@mdn/fred 2.0.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/components/about-tabs/element.css +3 -2
  3. package/components/scrim-inline/element.css +0 -7
  4. package/components/scrim-inline/global.css +10 -0
  5. package/components/social-image/README.md +16 -0
  6. package/components/social-image/sandbox.js +23 -0
  7. package/components/social-image/server.css +28 -0
  8. package/components/social-image/server.js +13 -0
  9. package/l10n/fluent.js +8 -7
  10. package/out/service-worker.js +1 -1
  11. package/out/service-worker.js.map +1 -1
  12. package/out/static/client/5183.ed3575d7370b617c.js +64 -0
  13. package/out/static/client/5183.ed3575d7370b617c.js.map +1 -0
  14. package/out/static/client/7047.7084b7bcf9a47b7b.js +9 -0
  15. package/out/static/client/7047.7084b7bcf9a47b7b.js.map +1 -0
  16. package/out/static/client/{8292.88217634072b2959.js → 8292.5a4929a466c7b3ca.js} +2 -2
  17. package/out/static/client/{8292.88217634072b2959.js.map → 8292.5a4929a466c7b3ca.js.map} +1 -1
  18. package/out/static/client/{index.a7f592ef6e4f2a0e.js → index.0e1f202766cdb426.js} +3 -3
  19. package/out/static/client/{index.a7f592ef6e4f2a0e.js.map → index.0e1f202766cdb426.js.map} +1 -1
  20. package/out/static/client/{runtime.14f0bbf7912ff6c2.js → runtime.076e84c93222dfd0.js} +2 -2
  21. package/out/static/client/{runtime.14f0bbf7912ff6c2.js.map → runtime.076e84c93222dfd0.js.map} +1 -1
  22. package/out/static/client/stats.json +319 -283
  23. package/out/static/client/styles-a11y-menu.bf24a870a8a4969f.js +1 -0
  24. package/out/static/client/styles-advertising.9f2b7bddc08575fc.js +1 -0
  25. package/out/static/client/styles-article-footer.aa9f8d240980b0f4.js +1 -0
  26. package/out/static/client/styles-banner.e738836bac789a8b.js +1 -0
  27. package/out/static/client/styles-baseline-indicator.c062716f3d033dd8.js +1 -0
  28. package/out/static/client/styles-blog-index.818261c8123bc042.js +1 -0
  29. package/out/static/client/styles-blog-post.96ce1680245bbc86.js +1 -0
  30. package/out/static/client/styles-breadcrumbs-bar.ed7d1440bdccf98f.js +1 -0
  31. package/out/static/client/styles-breadcrumbs.7599a269dc584d75.js +1 -0
  32. package/out/static/client/styles-button.de6a7b9b7548d84b.js +1 -0
  33. package/out/static/client/styles-content-section.a8bd7fde04898354.js +1 -0
  34. package/out/static/client/styles-contributor-spotlight.adad2e813e1667fe.js +1 -0
  35. package/out/static/client/styles-curriculum-about.eefa128bb415258c.js +1 -0
  36. package/out/static/client/styles-curriculum-default.a2692218d2b1a1f9.js +1 -0
  37. package/out/static/client/styles-curriculum-landing.2d51b8fce8f12b8d.js +1 -0
  38. package/out/static/client/styles-curriculum-module.f4ae8920ee1c92ff.js +1 -0
  39. package/out/static/client/styles-curriculum-overview.2d7c17b0f0b9bd92.js +1 -0
  40. package/out/static/client/styles-featured-articles.c54e8f6b90567441.js +1 -0
  41. package/out/static/client/styles-footer.cff8d2b7669e06a9.js +1 -0
  42. package/out/static/client/styles-generic-about.b31b672a5d394108.js +1 -0
  43. package/out/static/client/styles-generic-community.f7e5df670c7aeaf3.js +1 -0
  44. package/out/static/client/styles-generic-content.1a9e4b87d8a12a85.js +1 -0
  45. package/out/static/client/styles-generic-layout.76e37948146a2f39.js +1 -0
  46. package/out/static/client/styles-generic-sidebar.c07d266d1382c357.js +1 -0
  47. package/out/static/client/styles-generic-toc.342bb77a42e3cc84.js +1 -0
  48. package/out/static/client/{styles-global.e813b635d036a38b.css → styles-global.63980d9c69df1f6a.css} +2 -2
  49. package/out/static/client/{styles-global.e813b635d036a38b.css.map → styles-global.63980d9c69df1f6a.css.map} +1 -1
  50. package/out/static/client/styles-global.c2e6118d3b833b4a.js +1 -0
  51. package/out/static/client/styles-heading-anchor.79390408a0c88875.js +1 -0
  52. package/out/static/client/styles-homepage-body.20c015a218d0bc96.js +1 -0
  53. package/out/static/client/styles-homepage-contributor-spotlight.21f37f11b3bd4bda.js +1 -0
  54. package/out/static/client/styles-homepage-footer.24e66b627b59d99f.js +1 -0
  55. package/out/static/client/styles-homepage-header.1a75fa94f8bab5a0.js +1 -0
  56. package/out/static/client/styles-homepage-hero.f1bf55f1be2d516d.js +1 -0
  57. package/out/static/client/styles-homepage.cd5bf6213bc06b4e.js +1 -0
  58. package/out/static/client/styles-latest-news.0f32a584ef1ed171.js +1 -0
  59. package/out/static/client/styles-left-sidebar.d7d52289da7ba969.js +1 -0
  60. package/out/static/client/styles-logo.1ff82941fc133017.js +1 -0
  61. package/out/static/client/styles-mandala.2a99de27a8c19d02.js +1 -0
  62. package/out/static/client/styles-menu.13c3394ada0512ef.js +1 -0
  63. package/out/static/client/styles-navigation.f857f577084aa7ef.js +1 -0
  64. package/out/static/client/styles-not-found.0bdc6a72643ebe34.js +1 -0
  65. package/out/static/client/styles-observatory-landing.e709efc8103ee08c.js +1 -0
  66. package/out/static/client/styles-observatory-results.e098740504c0c0f0.js +1 -0
  67. package/out/static/client/styles-page-layout.2ab75fc5b95edf1b.js +1 -0
  68. package/out/static/client/styles-pagination.667a2af3eaebe782.js +1 -0
  69. package/out/static/client/styles-playground.c1339745dabdf1f6.js +1 -0
  70. package/out/static/client/styles-recent-contributions.706333df420f227c.js +1 -0
  71. package/out/static/client/styles-reference-layout.6eaaea648e7e4dce.js +1 -0
  72. package/out/static/client/styles-reference-toc.dcb67aadb5032e3f.js +1 -0
  73. package/out/static/client/styles-sandbox.c14203f7b76d9e70.js +1 -0
  74. package/out/static/client/styles-site-search.ba674569591c3348.js +1 -0
  75. package/out/static/client/styles-social-image.47d082e57762bfb4.css +2 -0
  76. package/out/static/client/styles-social-image.47d082e57762bfb4.css.map +1 -0
  77. package/out/static/client/styles-social-image.f457942a12584899.js +1 -0
  78. package/out/static/client/styles-translation-banner.c0bf41a60bc2fe87.js +1 -0
  79. package/out/static/client/styles-writer-toolbar.e7438b6d8e7c99f4.js +1 -0
  80. package/out/static/client/{styles.519e2a3b2b0392d7.js → styles.cbf2ca4b84823096.js} +2 -2
  81. package/out/static/client/{styles.519e2a3b2b0392d7.js.map → styles.cbf2ca4b84823096.js.map} +1 -1
  82. package/out/static/legacy/{145.f57152daa80bc354.js → 145.e71ec0c1d16bfeb6.js} +2 -2
  83. package/out/static/legacy/{145.f57152daa80bc354.js.map → 145.e71ec0c1d16bfeb6.js.map} +1 -1
  84. package/out/static/legacy/{2439.db04dec0f2bfe008.js → 2439.152ddc8eff5390cc.js} +2 -2
  85. package/out/static/legacy/{2439.db04dec0f2bfe008.js.map → 2439.152ddc8eff5390cc.js.map} +1 -1
  86. package/out/static/legacy/{2569.2ed6f988d52f6cb2.js → 2569.41b52dfae9ff5dbd.js} +2 -2
  87. package/out/static/legacy/{2569.2ed6f988d52f6cb2.js.map → 2569.41b52dfae9ff5dbd.js.map} +1 -1
  88. package/out/static/legacy/{3097.5ee3eace96d8c3ea.js → 3097.89f8c27a39d2d759.js} +2 -2
  89. package/out/static/legacy/{3097.5ee3eace96d8c3ea.js.map → 3097.89f8c27a39d2d759.js.map} +1 -1
  90. package/out/static/legacy/{4624.5f395686fe61b4a3.js → 4624.831090754998070f.js} +2 -2
  91. package/out/static/legacy/{4624.5f395686fe61b4a3.js.map → 4624.831090754998070f.js.map} +1 -1
  92. package/out/static/legacy/{4944.dff54c3109113729.js → 4944.d5de2520acb6bc03.js} +2 -2
  93. package/out/static/legacy/{4944.dff54c3109113729.js.map → 4944.d5de2520acb6bc03.js.map} +1 -1
  94. package/out/static/legacy/{4968.12b8af0a52d054ac.js → 4968.c5c0429688b49438.js} +2 -2
  95. package/out/static/legacy/{4968.12b8af0a52d054ac.js.map → 4968.c5c0429688b49438.js.map} +1 -1
  96. package/out/static/legacy/{652.702c9f7893508b7f.js → 652.984bbafca5a127d6.js} +2 -2
  97. package/out/static/legacy/{652.702c9f7893508b7f.js.map → 652.984bbafca5a127d6.js.map} +1 -1
  98. package/out/static/legacy/{6542.8f8dc41c1b7b4f3d.js → 6542.9ae1d636a2097c7a.js} +2 -2
  99. package/out/static/legacy/{6542.8f8dc41c1b7b4f3d.js.map → 6542.9ae1d636a2097c7a.js.map} +1 -1
  100. package/out/static/legacy/{6786.d37ed4aa6d7a5c1a.js → 6786.c180a40232e02d98.js} +3 -3
  101. package/out/static/legacy/{6786.d37ed4aa6d7a5c1a.js.map → 6786.c180a40232e02d98.js.map} +1 -1
  102. package/out/static/legacy/{8292.88217634072b2959.js → 8292.5a4929a466c7b3ca.js} +2 -2
  103. package/out/static/legacy/{8292.88217634072b2959.js.map → 8292.5a4929a466c7b3ca.js.map} +1 -1
  104. package/out/static/legacy/{8315.525575601119f224.js → 8315.732f4f8af2f04044.js} +2 -2
  105. package/out/static/legacy/{8315.525575601119f224.js.map → 8315.732f4f8af2f04044.js.map} +1 -1
  106. package/out/static/legacy/{8769.d63b4369d16f3391.js → 8769.c0eb10a75d355ed3.js} +2 -2
  107. package/out/static/legacy/{8769.d63b4369d16f3391.js.map → 8769.c0eb10a75d355ed3.js.map} +1 -1
  108. package/out/static/legacy/{9380.d18451f1d350375d.js → 9380.2e09c0a94dc10112.js} +2 -2
  109. package/out/static/legacy/{9380.d18451f1d350375d.js.map → 9380.2e09c0a94dc10112.js.map} +1 -1
  110. package/out/static/legacy/asset-manifest.json +20 -20
  111. package/out/static/legacy/{index.0b85877f879160b2.js → index.5e65b9f52e86ad40.js} +5 -5
  112. package/out/static/legacy/{index.0b85877f879160b2.js.LICENSE.txt → index.5e65b9f52e86ad40.js.LICENSE.txt} +1 -1
  113. package/out/static/legacy/{index.0b85877f879160b2.js.map → index.5e65b9f52e86ad40.js.map} +1 -1
  114. package/out/static/legacy/{index.645247acbde1c666.html → index.6838304b64f32836.html} +1 -1
  115. package/out/static/legacy/stats.json +14 -14
  116. package/out/static/legacy/{yari.46e28128e98126d7.js → yari.c8f274d3a31b194e.js} +6 -6
  117. package/out/static/legacy/{yari.46e28128e98126d7.js.LICENSE.txt → yari.c8f274d3a31b194e.js.LICENSE.txt} +1 -1
  118. package/out/static/legacy/{yari.46e28128e98126d7.js.map → yari.c8f274d3a31b194e.js.map} +1 -1
  119. package/out/static/ssr/8292.js +1 -1
  120. package/out/static/ssr/8292.js.map +1 -1
  121. package/out/static/ssr/index.js +149 -142
  122. package/out/static/ssr/index.js.map +1 -1
  123. package/out/static/ssr/stats.json +4 -4
  124. package/out/twitter-card-summary.46ac2375.png +0 -0
  125. package/package.json +16 -15
  126. package/public/twitter-card-summary.46ac2375.png +0 -0
  127. package/server.js +12 -1
  128. package/out/static/client/5183.e4104aeffa888fd3.js +0 -64
  129. package/out/static/client/5183.e4104aeffa888fd3.js.map +0 -1
  130. package/out/static/client/7047.5a3c9165bf33e8ef.js +0 -9
  131. package/out/static/client/7047.5a3c9165bf33e8ef.js.map +0 -1
  132. package/out/static/client/styles-a11y-menu.49f604eb400e3a1b.js +0 -1
  133. package/out/static/client/styles-advertising.206d401ac1918107.js +0 -1
  134. package/out/static/client/styles-article-footer.bf7a12a8f26de9d8.js +0 -1
  135. package/out/static/client/styles-banner.045fd9429c0b4559.js +0 -1
  136. package/out/static/client/styles-baseline-indicator.1a9a989c5eed2bd0.js +0 -1
  137. package/out/static/client/styles-blog-index.07075fbe70ea701a.js +0 -1
  138. package/out/static/client/styles-blog-post.f096d7b72acc54c7.js +0 -1
  139. package/out/static/client/styles-breadcrumbs-bar.b6d2903779905507.js +0 -1
  140. package/out/static/client/styles-breadcrumbs.7b6a3fca16762395.js +0 -1
  141. package/out/static/client/styles-button.68557b262acc04d5.js +0 -1
  142. package/out/static/client/styles-content-section.8b58198fcbb512cd.js +0 -1
  143. package/out/static/client/styles-contributor-spotlight.65897b7d1c3de5e6.js +0 -1
  144. package/out/static/client/styles-curriculum-about.013603624423e8b7.js +0 -1
  145. package/out/static/client/styles-curriculum-default.8d3cc74e416d99c0.js +0 -1
  146. package/out/static/client/styles-curriculum-landing.95ce2c9c6203fda2.js +0 -1
  147. package/out/static/client/styles-curriculum-module.6bd730e94b6ab4b0.js +0 -1
  148. package/out/static/client/styles-curriculum-overview.31fd536067fb14e7.js +0 -1
  149. package/out/static/client/styles-featured-articles.122a3779cde55236.js +0 -1
  150. package/out/static/client/styles-footer.fedc4476f04ebc15.js +0 -1
  151. package/out/static/client/styles-generic-about.7e63ff8a4b7851ef.js +0 -1
  152. package/out/static/client/styles-generic-community.dae09a544431e63d.js +0 -1
  153. package/out/static/client/styles-generic-content.16d08aa39ea401b9.js +0 -1
  154. package/out/static/client/styles-generic-layout.3e4f2f4951ea186b.js +0 -1
  155. package/out/static/client/styles-generic-sidebar.b2e094fc3c0756ab.js +0 -1
  156. package/out/static/client/styles-generic-toc.cd70dab26a1241d4.js +0 -1
  157. package/out/static/client/styles-global.339e7f9a94da6256.js +0 -1
  158. package/out/static/client/styles-heading-anchor.0deb48e0e151aba3.js +0 -1
  159. package/out/static/client/styles-homepage-body.cb1b213bec93efdd.js +0 -1
  160. package/out/static/client/styles-homepage-contributor-spotlight.1a2acbf06be6d425.js +0 -1
  161. package/out/static/client/styles-homepage-footer.3435c9576666f4a5.js +0 -1
  162. package/out/static/client/styles-homepage-header.6a6b4ebaf675e721.js +0 -1
  163. package/out/static/client/styles-homepage-hero.de64115a608af810.js +0 -1
  164. package/out/static/client/styles-homepage.09583f85e229d2de.js +0 -1
  165. package/out/static/client/styles-latest-news.d7d8beb1f187d6f5.js +0 -1
  166. package/out/static/client/styles-left-sidebar.62e4bdb34c86bc43.js +0 -1
  167. package/out/static/client/styles-logo.15608a14aefd9e51.js +0 -1
  168. package/out/static/client/styles-mandala.18c6e16ec318e10a.js +0 -1
  169. package/out/static/client/styles-menu.8011e6627accb1f3.js +0 -1
  170. package/out/static/client/styles-navigation.507be0a6a4278751.js +0 -1
  171. package/out/static/client/styles-not-found.5abe16a37f65b63a.js +0 -1
  172. package/out/static/client/styles-observatory-landing.2bda92fc6d68c4fc.js +0 -1
  173. package/out/static/client/styles-observatory-results.090bb92b82d036eb.js +0 -1
  174. package/out/static/client/styles-page-layout.ca4cbe58578a57eb.js +0 -1
  175. package/out/static/client/styles-pagination.cacd3f49e3de0552.js +0 -1
  176. package/out/static/client/styles-playground.1c172c9a3a8d9b79.js +0 -1
  177. package/out/static/client/styles-recent-contributions.45d4f26778c7ba5b.js +0 -1
  178. package/out/static/client/styles-reference-layout.d26c1e2e7b6dcf90.js +0 -1
  179. package/out/static/client/styles-reference-toc.bb1b05755fbc1108.js +0 -1
  180. package/out/static/client/styles-sandbox.a14cc003eeaa8914.js +0 -1
  181. package/out/static/client/styles-site-search.76d1310c8fe1b8fb.js +0 -1
  182. package/out/static/client/styles-translation-banner.c9804ae977f28550.js +0 -1
  183. package/out/static/client/styles-writer-toolbar.e88f55bfa22d6f0e.js +0 -1
  184. /package/out/static/client/{5183.e4104aeffa888fd3.js.LICENSE.txt → 5183.ed3575d7370b617c.js.LICENSE.txt} +0 -0
  185. /package/out/static/client/{index.a7f592ef6e4f2a0e.js.LICENSE.txt → index.0e1f202766cdb426.js.LICENSE.txt} +0 -0
  186. /package/out/static/legacy/{6786.d37ed4aa6d7a5c1a.js.LICENSE.txt → 6786.c180a40232e02d98.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
- export const __rspack_esm_id="9380";export const __rspack_esm_ids=["9380"];export const __webpack_modules__={59903(e,t,n){n.r(t),n.d(t,{default:()=>T});var r=n(96540),a=n(3322),l=n(54225),o=n(49351),c=n(85017),u=n(31256),i=n(70661),s=n(85743),f=n(2181),d=n(1086),m=n(60405),p=n(96540);function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function y(e,t,n,r,a,l,o){try{var c=e[l](o),u=c.value}catch(e){n(e);return}c.done?t(u):Promise.resolve(u).then(r,a)}function v(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){y(l,r,a,o,c,"next",e)}function c(e){y(l,r,a,o,c,"throw",e)}o(void 0)})}}function b(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),c=Object.defineProperty;return c(o,"next",{value:u(0)}),c(o,"throw",{value:u(1)}),c(o,"return",{value:u(2)}),"function"==typeof Symbol&&c(o,Symbol.iterator,{value:function(){return this}}),o;function u(c){return function(u){var i=[c,u];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,i[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return l.label++,{value:i[1],done:!1};case 5:l.label++,r=i[1],i=[0];continue;case 7:i=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){l=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){l.label=i[1];break}if(6===i[0]&&l.label<a[1]){l.label=a[1],a=i;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(i);break}a[2]&&l.ops.pop(),l.trys.pop();continue}i=t.call(e,l)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}function g(e){var t=e.gistId;return p.createElement("form",{className:"flag"},p.createElement("span",null,"Report this malicious or inappropriate shared playground. Can you please share some details on what's wrong with this content:"),p.createElement("textarea",{id:"flagReason"}),p.createElement("div",{className:"buttons"},p.createElement(o.$,{id:"flag-cancel",value:"cancel",type:"secondary",buttonType:"submit",formMethod:"dialog"},"Cancel"),p.createElement(o.$,{id:"flag-send",onClickHandler:function(e){return v(function(){var n,r;return b(this,function(a){switch(a.label){case 0:return e.preventDefault(),[4,fetch("/api/v1/play/flag",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:t,reason:document.getElementById("flagReason").value})})];case 1:return a.sent(),null==(r=document.getElementById("flag-send"))||null==(n=r.closest("dialog"))||n.close(),[2]}})})()},value:"default"},"Report")))}function E(e){var t,n=e.url,a=e.share,l=e.code,c=(0,s.P_)(),y=(0,f.db)(),g=(t=(0,r.useState)(!1),function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),2!==l.length);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(t,2)||function(e,t){if(e){if("string"==typeof e)return h(e,2);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return h(e,2)}}(t,2)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),E=g[0],w=g[1];return p.createElement("form",{className:"share"},p.createElement(o.$,{id:"share-cancel",title:"Cancel",extraClasses:"action",value:"cancel",icon:"cancel",buttonType:"submit",formMethod:"dialog"}),p.createElement("section",null,p.createElement("span",null,"Share Markdown"),p.createElement(o.$,{type:"secondary",onClickHandler:function(){return v(function(){return b(this,function(e){switch(e.label){case 0:if(y("".concat(d.aE,": share-markdown")),!l)return[3,2];return[4,navigator.clipboard.writeText((0,u.Oo)(l()))];case 1:e.sent(),e.label=2;case 2:return[2]}})})()}},"Copy markdown to clipboard")),p.createElement("section",{id:"share-link"},p.createElement("span",null,"Share your code via Permalink"),(null==c?void 0:c.isAuthenticated)?p.createElement(p.Fragment,null,n?E?p.createElement(i.R,null):p.createElement(p.Fragment,null,p.createElement("input",{value:n.toString()}),p.createElement(o.$,{type:"secondary",onClickHandler:function(){return v(function(){return b(this,function(e){switch(e.label){case 0:if(!n)return[3,2];return[4,navigator.clipboard.writeText(n.toString())];case 1:e.sent(),e.label=2;case 2:return[2]}})})()}},"Copy to clipboard")):p.createElement(o.$,{onClickHandler:function(){return v(function(){return b(this,function(e){switch(e.label){case 0:return w(!0),y("".concat(d.aE,": share-permalink")),[4,null==a?void 0:a()];case 1:return e.sent(),w(!1),[2]}})})()}},"Create link")):p.createElement(m.W,{className:"share-get-plus",gleanPrefix:d.aE},"Want to share this playground via link?",p.createElement("br",null))))}var w=n(12149),k=n(88038),S=n(70181),C=n(14643),j=n(96540);function O(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function x(e,t,n,r,a,l,o){try{var c=e[l](o),u=c.value}catch(e){n(e);return}c.done?t(u):Promise.resolve(u).then(r,a)}function I(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){x(l,r,a,o,c,"next",e)}function c(e){x(l,r,a,o,c,"throw",e)}o(void 0)})}}function P(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return O(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return O(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function N(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),c=Object.defineProperty;return c(o,"next",{value:u(0)}),c(o,"throw",{value:u(1)}),c(o,"return",{value:u(2)}),"function"==typeof Symbol&&c(o,Symbol.iterator,{value:function(){return this}}),o;function u(c){return function(u){var i=[c,u];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,i[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return l.label++,{value:i[1],done:!1};case 5:l.label++,r=i[1],i=[0];continue;case 7:i=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){l=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){l.label=i[1];break}if(6===i[0]&&l.label<a[1]){l.label=a[1],a=i;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(i);break}a[2]&&l.ops.pop(),l.trys.pop();continue}i=t.call(e,l)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}function A(e,t){sessionStorage.setItem(e,JSON.stringify(t))}function T(){var e,t,n=(0,f.db)(),i=P((0,a.ok)(),2),s=i[0],m=i[1],p=s.get("id"),h=s.get("state"),y=P((0,r.useState)(0),2),v=y[0],b=y[1],O=P((0,r.useState)(!1),2),x=O[0],T=O[1],_=P((0,r.useState)(null),2),R=_[0],$=_[1],H=P((0,r.useState)(0),2),U=H[0],D=H[1],J=P((0,r.useState)(!0),2),M=J[0],F=J[1],B=P((0,r.useState)(!0),2),X=B[0],G=B[1],L=P((0,r.useState)(null),2),W=L[0],z=L[1],V=(0,l.A)(h||x||!p?null:"/api/v1/play/".concat(encodeURIComponent(p)),function(e){return I(function(){var t,r;return N(this,function(a){switch(a.label){case 0:return[4,fetch(e)];case 1:if(!(t=a.sent()).ok)throw Error(t.statusText);return n("".concat(d.aE,": load-shared")),[4,t.json()];case 2:if(r=a.sent())return D(2),[2,r];return[2,null]}})})()},{fallbackData:!h&&!p&&0===U&&(e=u.FX,{html:(null==(t=JSON.parse(sessionStorage.getItem(e)||"{}"))?void 0:t.html)||"",css:(null==t?void 0:t.css)||"",js:(null==t?void 0:t.js)||"",src:null==t?void 0:t.src})||void 0}).data,q=(0,r.useRef)(null),K=(0,r.useRef)(null);(0,r.useEffect)(function(){V&&(A(u.FX,V),Object.values(V).some(Boolean)&&z(structuredClone(V)))},[V,z]);var Q=(0,r.useCallback)(function(){var e,t,n;return{html:(null==(e=q.current)?void 0:e.code.html)||"",css:(null==(t=q.current)?void 0:t.code.css)||"",js:(null==(n=q.current)?void 0:n.code.js)||"",src:(null==V?void 0:V.src)||(null==W?void 0:W.src)}},[null==W?void 0:W.src,null==V?void 0:V.src]),Y=(0,r.useCallback)(function(e){var t=e.html,n=e.css,r=e.js;F(!t.trim()&&!n.trim()&&!r.trim()),G(!t&&!n&&!r)},[]),Z=(0,r.useCallback)(function(e){q.current&&(q.current.code=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){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({},e),e.src&&(q.current.srcPrefix=e.src),Y(e),A(u.FX,e))},[Y]);(0,r.useEffect)(function(){I(function(){var e;return N(this,function(t){switch(t.label){case 0:if(0!==U&&2!==U)return[3,8];if(!(V&&Object.values(V).some(Boolean)))return[3,1];return Z(V),p||null==(e=q.current)||e.run(),[3,7];case 1:if(!h)return[3,6];t.label=2;case 2:return t.trys.push([2,4,,5]),[4,(0,u.ps)(h)];case 3:return Z(JSON.parse(t.sent().state||"{}")),[3,5];case 4:return console.error(t.sent()),[3,5];case 5:return[3,7];case 6:Z({html:"",css:"",js:""}),t.label=7;case 7:D(1),t.label=8;case 8:return[2]}})})()},[V,U,p,h,Z]);var ee=function(){var e,t,n;null==(t=document.getElementById("run"))||null==(e=t.firstElementChild)||e.animate([{},{backgroundColor:"var(--background-mark-green)"},{}],{duration:1e3,iterations:1}),null==(n=q.current)||n.run()},et=(0,r.useCallback)(function(){return I(function(){var e,t;return N(this,function(n){switch(n.label){case 0:var r;return[4,(r=Q(),I(function(){var e,t;return N(this,function(n){switch(n.label){case 0:return[4,fetch("/api/v1/play/",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})];case 1:return[4,n.sent().json()];case 2:return e=n.sent().id,(t=new URL(document.URL)).search=new URLSearchParams([["id",e]]).toString(),[2,{url:t,id:e}]}})})())];case 1:return t=(e=n.sent()).url,m([["id",e.id]],{replace:!0}),T(!0),$(t),[2]}})})()},[m,$,T,Q]),en=function(){var e=Q();Y(e),A(u.FX,e)};return j.createElement(w.s,{ref:q,runOnChange:!0},j.createElement("main",{className:"play container"},j.createElement("dialog",{id:"playDialog",ref:K,onClose:function(){1===v&&$(null)}},2===v&&j.createElement(g,{gistId:p}),1===v&&j.createElement(E,{url:R,code:Q,share:et})),j.createElement("section",{className:"editors"},j.createElement("aside",null,j.createElement("h1",null,"Playground"),j.createElement("menu",null,j.createElement(o.$,{type:"secondary",id:"format",onClickHandler:function(){return I(function(){var e;return N(this,function(t){switch(t.label){case 0:return[4,null==(e=q.current)?void 0:e.format()];case 1:return t.sent(),[2]}})})()}},"format"),j.createElement(o.$,{type:"secondary",id:"run",onClickHandler:ee},"run"),j.createElement(o.$,{type:"secondary",id:"share",isDisabled:M,onClickHandler:function(){var e;n("".concat(d.aE,": share-click")),b(1),null==(e=K.current)||e.showModal()}},"share"),j.createElement(o.$,{type:"secondary",isDisabled:X,id:"clear",extraClasses:"red",onClickHandler:function(){return I(function(){return N(this,function(e){switch(e.label){case 0:if(!window.confirm("Do you really want to clear everything?"))return[3,2];return n("".concat(d.aE,": reset-click")),[4,I(function(){return N(this,function(e){return m([],{replace:!0}),z(null),Z({html:"",css:"",js:"",src:void 0}),ee(),[2]})})()];case 1:e.sent(),e.label=2;case 2:return[2]}})})()}},"clear"),W&&j.createElement(o.$,{type:"secondary",id:"reset",extraClasses:"red",onClickHandler:function(){return I(function(){return N(this,function(e){switch(e.label){case 0:if(!window.confirm("Do you really want to revert your changes?"))return[3,2];return n("".concat(d.aE,": revert-click")),[4,I(function(){return N(this,function(e){return Z({html:(null==W?void 0:W.html)||"",css:(null==W?void 0:W.css)||"",js:(null==W?void 0:W.js)||""}),ee(),[2]})})()];case 1:e.sent(),e.label=2;case 2:return[2]}})})()}},"reset"))),j.createElement("details",{className:"editor-container",open:!0},j.createElement("summary",null,"HTML"),j.createElement(k.J,{language:"html",onUpdate:en})),j.createElement("details",{className:"editor-container",open:!0},j.createElement("summary",null,"CSS"),j.createElement(k.J,{language:"css",onUpdate:en})),j.createElement("details",{className:"editor-container",open:!0},j.createElement("summary",null,"JAVASCRIPT"),j.createElement(k.J,{language:"js",onUpdate:en}))),j.createElement("section",{className:"preview"},p&&j.createElement("button",{className:"flag-example",onClick:function(e){var t;e.preventDefault(),n("".concat(d.aE,": flag-click")),b(2),null==(t=K.current)||t.showModal()}},"Seeing something inappropriate?"),j.createElement(C.S,null),j.createElement("div",{id:"play-console"},j.createElement("span",null,"Console"),j.createElement(S.H,null)),j.createElement(c.Xp,{extraClasses:["horizontal"]}))))}},60405(e,t,n){n.d(t,{W:()=>c});var r=n(2181),a=n(1908),l=n(72185),o=n(96540);function c(e){var t=e.children,n=e.className,c=e.gleanPrefix,u=(0,l.B)(),i=(0,r.db)();return o.createElement("div",{className:void 0===n?"login-banner":n},o.createElement("span",null,o.createElement("span",null,t)," ",o.createElement("strong",null,"Upgrade to"," ",o.createElement("a",{className:"plus-link",href:u,onClick:function(){return i("".concat(c,": banner-link"))}},"MDN Plus")," ","for free.")),o.createElement(a._,{logInGleanContext:"".concat(c,": banner-login"),signUpGleanContext:"".concat(c,": banner-signup")}))}},54225(e,t,n){n.d(t,{A:()=>a});var r=n(92177);let a=(0,n(14993).Ht)(r.Ay,e=>(t,n,r)=>(r.revalidateOnFocus=!1,r.revalidateIfStale=!1,r.revalidateOnReconnect=!1,e(t,n,r)))}};
2
- //# sourceMappingURL=9380.d18451f1d350375d.js.map
1
+ export const __rspack_esm_id="9380";export const __rspack_esm_ids=["9380"];export const __webpack_modules__={59903(e,t,n){n.r(t),n.d(t,{default:()=>T});var r=n(96540),a=n(3433),l=n(54225),o=n(49351),c=n(85017),u=n(31256),i=n(70661),s=n(85743),f=n(2181),d=n(1086),m=n(60405),p=n(96540);function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function y(e,t,n,r,a,l,o){try{var c=e[l](o),u=c.value}catch(e){n(e);return}c.done?t(u):Promise.resolve(u).then(r,a)}function v(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){y(l,r,a,o,c,"next",e)}function c(e){y(l,r,a,o,c,"throw",e)}o(void 0)})}}function b(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),c=Object.defineProperty;return c(o,"next",{value:u(0)}),c(o,"throw",{value:u(1)}),c(o,"return",{value:u(2)}),"function"==typeof Symbol&&c(o,Symbol.iterator,{value:function(){return this}}),o;function u(c){return function(u){var i=[c,u];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,i[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return l.label++,{value:i[1],done:!1};case 5:l.label++,r=i[1],i=[0];continue;case 7:i=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){l=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){l.label=i[1];break}if(6===i[0]&&l.label<a[1]){l.label=a[1],a=i;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(i);break}a[2]&&l.ops.pop(),l.trys.pop();continue}i=t.call(e,l)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}function g(e){var t=e.gistId;return p.createElement("form",{className:"flag"},p.createElement("span",null,"Report this malicious or inappropriate shared playground. Can you please share some details on what's wrong with this content:"),p.createElement("textarea",{id:"flagReason"}),p.createElement("div",{className:"buttons"},p.createElement(o.$,{id:"flag-cancel",value:"cancel",type:"secondary",buttonType:"submit",formMethod:"dialog"},"Cancel"),p.createElement(o.$,{id:"flag-send",onClickHandler:function(e){return v(function(){var n,r;return b(this,function(a){switch(a.label){case 0:return e.preventDefault(),[4,fetch("/api/v1/play/flag",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:t,reason:document.getElementById("flagReason").value})})];case 1:return a.sent(),null==(r=document.getElementById("flag-send"))||null==(n=r.closest("dialog"))||n.close(),[2]}})})()},value:"default"},"Report")))}function E(e){var t,n=e.url,a=e.share,l=e.code,c=(0,s.P_)(),y=(0,f.db)(),g=(t=(0,r.useState)(!1),function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),2!==l.length);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(t,2)||function(e,t){if(e){if("string"==typeof e)return h(e,2);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return h(e,2)}}(t,2)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),E=g[0],w=g[1];return p.createElement("form",{className:"share"},p.createElement(o.$,{id:"share-cancel",title:"Cancel",extraClasses:"action",value:"cancel",icon:"cancel",buttonType:"submit",formMethod:"dialog"}),p.createElement("section",null,p.createElement("span",null,"Share Markdown"),p.createElement(o.$,{type:"secondary",onClickHandler:function(){return v(function(){return b(this,function(e){switch(e.label){case 0:if(y("".concat(d.aE,": share-markdown")),!l)return[3,2];return[4,navigator.clipboard.writeText((0,u.Oo)(l()))];case 1:e.sent(),e.label=2;case 2:return[2]}})})()}},"Copy markdown to clipboard")),p.createElement("section",{id:"share-link"},p.createElement("span",null,"Share your code via Permalink"),(null==c?void 0:c.isAuthenticated)?p.createElement(p.Fragment,null,n?E?p.createElement(i.R,null):p.createElement(p.Fragment,null,p.createElement("input",{value:n.toString()}),p.createElement(o.$,{type:"secondary",onClickHandler:function(){return v(function(){return b(this,function(e){switch(e.label){case 0:if(!n)return[3,2];return[4,navigator.clipboard.writeText(n.toString())];case 1:e.sent(),e.label=2;case 2:return[2]}})})()}},"Copy to clipboard")):p.createElement(o.$,{onClickHandler:function(){return v(function(){return b(this,function(e){switch(e.label){case 0:return w(!0),y("".concat(d.aE,": share-permalink")),[4,null==a?void 0:a()];case 1:return e.sent(),w(!1),[2]}})})()}},"Create link")):p.createElement(m.W,{className:"share-get-plus",gleanPrefix:d.aE},"Want to share this playground via link?",p.createElement("br",null))))}var w=n(12149),k=n(88038),S=n(70181),C=n(14643),j=n(96540);function O(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function x(e,t,n,r,a,l,o){try{var c=e[l](o),u=c.value}catch(e){n(e);return}c.done?t(u):Promise.resolve(u).then(r,a)}function I(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var l=e.apply(t,n);function o(e){x(l,r,a,o,c,"next",e)}function c(e){x(l,r,a,o,c,"throw",e)}o(void 0)})}}function P(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,c=!1;try{for(a=a.call(e);!(o=(n=a.next()).done)&&(l.push(n.value),!t||l.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==a.return||a.return()}finally{if(c)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return O(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return O(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function N(e,t){var n,r,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),c=Object.defineProperty;return c(o,"next",{value:u(0)}),c(o,"throw",{value:u(1)}),c(o,"return",{value:u(2)}),"function"==typeof Symbol&&c(o,Symbol.iterator,{value:function(){return this}}),o;function u(c){return function(u){var i=[c,u];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,i[0]&&(l=0)),l;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return l.label++,{value:i[1],done:!1};case 5:l.label++,r=i[1],i=[0];continue;case 7:i=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){l=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){l.label=i[1];break}if(6===i[0]&&l.label<a[1]){l.label=a[1],a=i;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(i);break}a[2]&&l.ops.pop(),l.trys.pop();continue}i=t.call(e,l)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}function A(e,t){sessionStorage.setItem(e,JSON.stringify(t))}function T(){var e,t,n=(0,f.db)(),i=P((0,a.ok)(),2),s=i[0],m=i[1],p=s.get("id"),h=s.get("state"),y=P((0,r.useState)(0),2),v=y[0],b=y[1],O=P((0,r.useState)(!1),2),x=O[0],T=O[1],_=P((0,r.useState)(null),2),R=_[0],$=_[1],H=P((0,r.useState)(0),2),U=H[0],D=H[1],J=P((0,r.useState)(!0),2),M=J[0],F=J[1],B=P((0,r.useState)(!0),2),X=B[0],G=B[1],L=P((0,r.useState)(null),2),W=L[0],z=L[1],V=(0,l.A)(h||x||!p?null:"/api/v1/play/".concat(encodeURIComponent(p)),function(e){return I(function(){var t,r;return N(this,function(a){switch(a.label){case 0:return[4,fetch(e)];case 1:if(!(t=a.sent()).ok)throw Error(t.statusText);return n("".concat(d.aE,": load-shared")),[4,t.json()];case 2:if(r=a.sent())return D(2),[2,r];return[2,null]}})})()},{fallbackData:!h&&!p&&0===U&&(e=u.FX,{html:(null==(t=JSON.parse(sessionStorage.getItem(e)||"{}"))?void 0:t.html)||"",css:(null==t?void 0:t.css)||"",js:(null==t?void 0:t.js)||"",src:null==t?void 0:t.src})||void 0}).data,q=(0,r.useRef)(null),K=(0,r.useRef)(null);(0,r.useEffect)(function(){V&&(A(u.FX,V),Object.values(V).some(Boolean)&&z(structuredClone(V)))},[V,z]);var Q=(0,r.useCallback)(function(){var e,t,n;return{html:(null==(e=q.current)?void 0:e.code.html)||"",css:(null==(t=q.current)?void 0:t.code.css)||"",js:(null==(n=q.current)?void 0:n.code.js)||"",src:(null==V?void 0:V.src)||(null==W?void 0:W.src)}},[null==W?void 0:W.src,null==V?void 0:V.src]),Y=(0,r.useCallback)(function(e){var t=e.html,n=e.css,r=e.js;F(!t.trim()&&!n.trim()&&!r.trim()),G(!t&&!n&&!r)},[]),Z=(0,r.useCallback)(function(e){q.current&&(q.current.code=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){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({},e),e.src&&(q.current.srcPrefix=e.src),Y(e),A(u.FX,e))},[Y]);(0,r.useEffect)(function(){I(function(){var e;return N(this,function(t){switch(t.label){case 0:if(0!==U&&2!==U)return[3,8];if(!(V&&Object.values(V).some(Boolean)))return[3,1];return Z(V),p||null==(e=q.current)||e.run(),[3,7];case 1:if(!h)return[3,6];t.label=2;case 2:return t.trys.push([2,4,,5]),[4,(0,u.ps)(h)];case 3:return Z(JSON.parse(t.sent().state||"{}")),[3,5];case 4:return console.error(t.sent()),[3,5];case 5:return[3,7];case 6:Z({html:"",css:"",js:""}),t.label=7;case 7:D(1),t.label=8;case 8:return[2]}})})()},[V,U,p,h,Z]);var ee=function(){var e,t,n;null==(t=document.getElementById("run"))||null==(e=t.firstElementChild)||e.animate([{},{backgroundColor:"var(--background-mark-green)"},{}],{duration:1e3,iterations:1}),null==(n=q.current)||n.run()},et=(0,r.useCallback)(function(){return I(function(){var e,t;return N(this,function(n){switch(n.label){case 0:var r;return[4,(r=Q(),I(function(){var e,t;return N(this,function(n){switch(n.label){case 0:return[4,fetch("/api/v1/play/",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})];case 1:return[4,n.sent().json()];case 2:return e=n.sent().id,(t=new URL(document.URL)).search=new URLSearchParams([["id",e]]).toString(),[2,{url:t,id:e}]}})})())];case 1:return t=(e=n.sent()).url,m([["id",e.id]],{replace:!0}),T(!0),$(t),[2]}})})()},[m,$,T,Q]),en=function(){var e=Q();Y(e),A(u.FX,e)};return j.createElement(w.s,{ref:q,runOnChange:!0},j.createElement("main",{className:"play container"},j.createElement("dialog",{id:"playDialog",ref:K,onClose:function(){1===v&&$(null)}},2===v&&j.createElement(g,{gistId:p}),1===v&&j.createElement(E,{url:R,code:Q,share:et})),j.createElement("section",{className:"editors"},j.createElement("aside",null,j.createElement("h1",null,"Playground"),j.createElement("menu",null,j.createElement(o.$,{type:"secondary",id:"format",onClickHandler:function(){return I(function(){var e;return N(this,function(t){switch(t.label){case 0:return[4,null==(e=q.current)?void 0:e.format()];case 1:return t.sent(),[2]}})})()}},"format"),j.createElement(o.$,{type:"secondary",id:"run",onClickHandler:ee},"run"),j.createElement(o.$,{type:"secondary",id:"share",isDisabled:M,onClickHandler:function(){var e;n("".concat(d.aE,": share-click")),b(1),null==(e=K.current)||e.showModal()}},"share"),j.createElement(o.$,{type:"secondary",isDisabled:X,id:"clear",extraClasses:"red",onClickHandler:function(){return I(function(){return N(this,function(e){switch(e.label){case 0:if(!window.confirm("Do you really want to clear everything?"))return[3,2];return n("".concat(d.aE,": reset-click")),[4,I(function(){return N(this,function(e){return m([],{replace:!0}),z(null),Z({html:"",css:"",js:"",src:void 0}),ee(),[2]})})()];case 1:e.sent(),e.label=2;case 2:return[2]}})})()}},"clear"),W&&j.createElement(o.$,{type:"secondary",id:"reset",extraClasses:"red",onClickHandler:function(){return I(function(){return N(this,function(e){switch(e.label){case 0:if(!window.confirm("Do you really want to revert your changes?"))return[3,2];return n("".concat(d.aE,": revert-click")),[4,I(function(){return N(this,function(e){return Z({html:(null==W?void 0:W.html)||"",css:(null==W?void 0:W.css)||"",js:(null==W?void 0:W.js)||""}),ee(),[2]})})()];case 1:e.sent(),e.label=2;case 2:return[2]}})})()}},"reset"))),j.createElement("details",{className:"editor-container",open:!0},j.createElement("summary",null,"HTML"),j.createElement(k.J,{language:"html",onUpdate:en})),j.createElement("details",{className:"editor-container",open:!0},j.createElement("summary",null,"CSS"),j.createElement(k.J,{language:"css",onUpdate:en})),j.createElement("details",{className:"editor-container",open:!0},j.createElement("summary",null,"JAVASCRIPT"),j.createElement(k.J,{language:"js",onUpdate:en}))),j.createElement("section",{className:"preview"},p&&j.createElement("button",{className:"flag-example",onClick:function(e){var t;e.preventDefault(),n("".concat(d.aE,": flag-click")),b(2),null==(t=K.current)||t.showModal()}},"Seeing something inappropriate?"),j.createElement(C.S,null),j.createElement("div",{id:"play-console"},j.createElement("span",null,"Console"),j.createElement(S.H,null)),j.createElement(c.Xp,{extraClasses:["horizontal"]}))))}},60405(e,t,n){n.d(t,{W:()=>c});var r=n(2181),a=n(1908),l=n(72185),o=n(96540);function c(e){var t=e.children,n=e.className,c=e.gleanPrefix,u=(0,l.B)(),i=(0,r.db)();return o.createElement("div",{className:void 0===n?"login-banner":n},o.createElement("span",null,o.createElement("span",null,t)," ",o.createElement("strong",null,"Upgrade to"," ",o.createElement("a",{className:"plus-link",href:u,onClick:function(){return i("".concat(c,": banner-link"))}},"MDN Plus")," ","for free.")),o.createElement(a._,{logInGleanContext:"".concat(c,": banner-login"),signUpGleanContext:"".concat(c,": banner-signup")}))}},54225(e,t,n){n.d(t,{A:()=>a});var r=n(92177);let a=(0,n(14993).Ht)(r.Ay,e=>(t,n,r)=>(r.revalidateOnFocus=!1,r.revalidateIfStale=!1,r.revalidateOnReconnect=!1,e(t,n,r)))}};
2
+ //# sourceMappingURL=9380.2e09c0a94dc10112.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"9380.d18451f1d350375d.js","sources":["webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/playground/forms.tsx","webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/playground/index.tsx","webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/plus/common/login-banner.tsx","webpack://@mdn/fred/./node_modules/swr/dist/immutable/index.mjs"],"sourcesContent":["import { useState } from \"react\";\nimport { Button } from \"../ui/atoms/button\";\nimport { EditorContent, codeToMarkdown } from \"./utils\";\nimport { Loading } from \"../ui/atoms/loading\";\nimport { useUserData } from \"../user-context\";\nimport { useGleanClick } from \"../telemetry/glean-context\";\nimport { PLAYGROUND } from \"../telemetry/constants\";\nimport { PlusLoginBanner } from \"../plus/common/login-banner\";\n\nexport function FlagForm({ gistId }: { gistId: string | null }) {\n return (\n <form className=\"flag\">\n <span>\n Report this malicious or inappropriate shared playground. Can you please\n share some details on what's wrong with this content:\n </span>\n <textarea id=\"flagReason\"></textarea>\n <div className=\"buttons\">\n <Button\n id=\"flag-cancel\"\n value=\"cancel\"\n type=\"secondary\"\n buttonType=\"submit\"\n formMethod=\"dialog\"\n >\n Cancel\n </Button>\n <Button\n id=\"flag-send\"\n onClickHandler={async (e) => {\n e.preventDefault();\n await fetch(\"/api/v1/play/flag\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id: gistId,\n reason: (\n document.getElementById(\"flagReason\") as HTMLTextAreaElement\n ).value,\n }),\n });\n document.getElementById(\"flag-send\")?.closest(\"dialog\")?.close();\n }}\n value=\"default\"\n >\n Report\n </Button>\n </div>\n </form>\n );\n}\n\nexport function ShareForm({\n url,\n share,\n code,\n}: {\n url: URL | null;\n share?: () => Promise<void>;\n code?: () => EditorContent;\n extraClasses?: string;\n}) {\n let userData = useUserData();\n const gleanClick = useGleanClick();\n let [loading, setLoading] = useState(false);\n return (\n <form className=\"share\">\n <Button\n id=\"share-cancel\"\n title=\"Cancel\"\n extraClasses=\"action\"\n value=\"cancel\"\n icon=\"cancel\"\n buttonType=\"submit\"\n formMethod=\"dialog\"\n ></Button>\n <section>\n <span>Share Markdown</span>\n <Button\n type=\"secondary\"\n onClickHandler={async () => {\n gleanClick(`${PLAYGROUND}: share-markdown`);\n code &&\n (await navigator.clipboard.writeText(codeToMarkdown(code())));\n }}\n >\n Copy markdown to clipboard\n </Button>\n </section>\n <section id=\"share-link\">\n <span>Share your code via Permalink</span>\n {userData?.isAuthenticated ? (\n <>\n {url ? (\n loading ? (\n <Loading />\n ) : (\n <>\n <input value={url.toString()} />\n <Button\n type=\"secondary\"\n onClickHandler={async () => {\n url &&\n (await navigator.clipboard.writeText(url.toString()));\n }}\n >\n Copy to clipboard\n </Button>\n </>\n )\n ) : (\n <Button\n onClickHandler={async () => {\n setLoading(true);\n gleanClick(`${PLAYGROUND}: share-permalink`);\n await share?.();\n setLoading(false);\n }}\n >\n Create link\n </Button>\n )}\n </>\n ) : (\n <PlusLoginBanner className=\"share-get-plus\" gleanPrefix={PLAYGROUND}>\n Want to share this playground via link?\n <br />\n </PlusLoginBanner>\n )}\n </section>\n </form>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useSearchParams } from \"react-router-dom\";\nimport useSWRImmutable from \"swr/immutable\";\nimport { Button } from \"../ui/atoms/button\";\nimport { SidePlacement } from \"../ui/organisms/placement\";\nimport { decompressFromBase64, EditorContent, SESSION_KEY } from \"./utils\";\n\nimport \"./index.scss\";\nimport { FlagForm, ShareForm } from \"./forms\";\nimport { PlayController, ReactPlayController } from \"../lit/play/controller\";\nimport { ReactPlayEditor } from \"../lit/play/editor\";\nimport { ReactPlayConsole } from \"../lit/play/console\";\nimport { ReactPlayRunner } from \"../lit/play/runner\";\nimport { useGleanClick } from \"../telemetry/glean-context\";\nimport { PLAYGROUND } from \"../telemetry/constants\";\n\nconst HTML_DEFAULT = \"\";\nconst CSS_DEFAULT = \"\";\nconst JS_DEFAULT = \"\";\n\nenum State {\n initial,\n ready,\n remote,\n}\n\nenum DialogState {\n none,\n share,\n flag,\n}\n\nasync function save(editorContent: EditorContent) {\n const res = await fetch(\"/api/v1/play/\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(editorContent),\n });\n let { id } = await res.json();\n let url = new URL(document.URL);\n url.search = new URLSearchParams([[\"id\", id]]).toString();\n return { url, id };\n}\n\nfunction store(session: string, editorContent: EditorContent) {\n sessionStorage.setItem(session, JSON.stringify(editorContent));\n}\n\nfunction load(session: string) {\n let code = JSON.parse(sessionStorage.getItem(session) || \"{}\");\n return {\n html: code?.html || HTML_DEFAULT,\n css: code?.css || CSS_DEFAULT,\n js: code?.js || JS_DEFAULT,\n src: code?.src,\n };\n}\n\nexport default function Playground() {\n const gleanClick = useGleanClick();\n let [searchParams, setSearchParams] = useSearchParams();\n const gistId = searchParams.get(\"id\");\n const stateParam = searchParams.get(\"state\");\n let [dialogState, setDialogState] = useState(DialogState.none);\n let [shared, setShared] = useState(false);\n let [shareUrl, setShareUrl] = useState<URL | null>(null);\n let [state, setState] = useState(State.initial);\n const [isShareable, setIsShareable] = useState<boolean>(true);\n const [isClearable, setIsClearable] = useState<boolean>(true);\n const [initialContent, setInitialContent] = useState<EditorContent | null>(\n null\n );\n let { data: initialCode } = useSWRImmutable<EditorContent>(\n !stateParam && !shared && gistId\n ? `/api/v1/play/${encodeURIComponent(gistId)}`\n : null,\n async (url) => {\n const response = await fetch(url);\n\n if (!response.ok) {\n throw Error(response.statusText);\n }\n gleanClick(`${PLAYGROUND}: load-shared`);\n\n const code = await response.json();\n if (code) {\n setState(State.remote);\n return code;\n }\n return null;\n },\n {\n fallbackData:\n (!stateParam &&\n !gistId &&\n state === State.initial &&\n load(SESSION_KEY)) ||\n undefined,\n }\n );\n const controller = useRef<PlayController | null>(null);\n const diaRef = useRef<HTMLDialogElement | null>(null);\n\n useEffect(() => {\n if (initialCode) {\n store(SESSION_KEY, initialCode);\n if (Object.values(initialCode).some(Boolean)) {\n setInitialContent(structuredClone(initialCode));\n }\n }\n }, [initialCode, setInitialContent]);\n\n const getEditorContent = useCallback(() => {\n return {\n html: controller.current?.code.html || HTML_DEFAULT,\n css: controller.current?.code.css || CSS_DEFAULT,\n js: controller.current?.code.js || JS_DEFAULT,\n src: initialCode?.src || initialContent?.src,\n };\n }, [initialContent?.src, initialCode?.src]);\n\n const setIsEmpty = useCallback((content: EditorContent) => {\n const { html, css, js } = content;\n setIsShareable(!html.trim() && !css.trim() && !js.trim());\n setIsClearable(!html && !css && !js);\n }, []);\n\n const setEditorContent = useCallback(\n (content: EditorContent) => {\n if (controller.current) {\n controller.current.code = { ...content };\n if (content.src) {\n controller.current.srcPrefix = content.src;\n }\n setIsEmpty(content);\n store(SESSION_KEY, content);\n }\n },\n [setIsEmpty]\n );\n\n useEffect(() => {\n (async () => {\n if (state === State.initial || state === State.remote) {\n if (initialCode && Object.values(initialCode).some(Boolean)) {\n setEditorContent(initialCode);\n if (!gistId) {\n // don't auto run shared code\n controller.current?.run();\n }\n } else if (stateParam) {\n try {\n let { state } = await decompressFromBase64(stateParam);\n let code = JSON.parse(state || \"{}\") as EditorContent;\n setEditorContent(code);\n } catch (e) {\n console.error(e);\n }\n } else {\n setEditorContent({\n html: HTML_DEFAULT,\n css: CSS_DEFAULT,\n js: JS_DEFAULT,\n });\n }\n setState(State.ready);\n }\n })();\n }, [initialCode, state, gistId, stateParam, setEditorContent]);\n\n const clear = async () => {\n setSearchParams([], { replace: true });\n setInitialContent(null);\n setEditorContent({\n html: HTML_DEFAULT,\n css: CSS_DEFAULT,\n js: JS_DEFAULT,\n src: undefined,\n });\n\n run();\n };\n\n const reset = async () => {\n setEditorContent({\n html: initialContent?.html || HTML_DEFAULT,\n css: initialContent?.css || CSS_DEFAULT,\n js: initialContent?.js || JS_DEFAULT,\n });\n\n run();\n };\n\n const clearConfirm = async () => {\n if (window.confirm(\"Do you really want to clear everything?\")) {\n gleanClick(`${PLAYGROUND}: reset-click`);\n await clear();\n }\n };\n\n const resetConfirm = async () => {\n if (window.confirm(\"Do you really want to revert your changes?\")) {\n gleanClick(`${PLAYGROUND}: revert-click`);\n await reset();\n }\n };\n\n const run = () => {\n const loading = [\n {},\n {\n backgroundColor: \"var(--background-mark-green)\",\n },\n {},\n ];\n const timing = {\n duration: 1000,\n iterations: 1,\n };\n document.getElementById(\"run\")?.firstElementChild?.animate(loading, timing);\n controller.current?.run();\n };\n\n const format = async () => {\n await controller.current?.format();\n };\n\n const share = useCallback(async () => {\n const { url, id } = await save(getEditorContent());\n setSearchParams([[\"id\", id]], { replace: true });\n setShared(true);\n setShareUrl(url);\n }, [setSearchParams, setShareUrl, setShared, getEditorContent]);\n\n const cleanDialog = () => {\n if (dialogState === DialogState.share) {\n setShareUrl(null);\n }\n };\n\n const onEditorUpdate = () => {\n const code = getEditorContent();\n setIsEmpty(code);\n store(SESSION_KEY, code);\n };\n\n return (\n <ReactPlayController ref={controller} runOnChange={true}>\n <main className=\"play container\">\n <dialog id=\"playDialog\" ref={diaRef} onClose={cleanDialog}>\n {dialogState === DialogState.flag && <FlagForm gistId={gistId} />}\n {dialogState === DialogState.share && (\n <ShareForm url={shareUrl} code={getEditorContent} share={share} />\n )}\n </dialog>\n <section className=\"editors\">\n <aside>\n <h1>Playground</h1>\n <menu>\n <Button type=\"secondary\" id=\"format\" onClickHandler={format}>\n format\n </Button>\n <Button type=\"secondary\" id=\"run\" onClickHandler={run}>\n run\n </Button>\n <Button\n type=\"secondary\"\n id=\"share\"\n isDisabled={isShareable}\n onClickHandler={() => {\n gleanClick(`${PLAYGROUND}: share-click`);\n setDialogState(DialogState.share);\n diaRef.current?.showModal();\n }}\n >\n share\n </Button>\n <Button\n type=\"secondary\"\n isDisabled={isClearable}\n id=\"clear\"\n extraClasses=\"red\"\n onClickHandler={clearConfirm}\n >\n clear\n </Button>\n {initialContent && (\n <Button\n type=\"secondary\"\n id=\"reset\"\n extraClasses=\"red\"\n onClickHandler={resetConfirm}\n >\n reset\n </Button>\n )}\n </menu>\n </aside>\n <details className=\"editor-container\" open={true}>\n <summary>HTML</summary>\n <ReactPlayEditor\n language=\"html\"\n onUpdate={onEditorUpdate}\n ></ReactPlayEditor>\n </details>\n <details className=\"editor-container\" open={true}>\n <summary>CSS</summary>\n <ReactPlayEditor\n language=\"css\"\n onUpdate={onEditorUpdate}\n ></ReactPlayEditor>\n </details>\n <details className=\"editor-container\" open={true}>\n <summary>JAVASCRIPT</summary>\n <ReactPlayEditor\n language=\"js\"\n onUpdate={onEditorUpdate}\n ></ReactPlayEditor>\n </details>\n </section>\n <section className=\"preview\">\n {gistId && (\n <button\n className=\"flag-example\"\n onClick={(e) => {\n e.preventDefault();\n gleanClick(`${PLAYGROUND}: flag-click`);\n setDialogState(DialogState.flag);\n diaRef.current?.showModal();\n }}\n >\n Seeing something inappropriate?\n </button>\n )}\n <ReactPlayRunner />\n <div id=\"play-console\">\n <span>Console</span>\n <ReactPlayConsole />\n </div>\n <SidePlacement extraClasses={[\"horizontal\"]} />\n </section>\n </main>\n </ReactPlayController>\n );\n}\n","import { useGleanClick } from \"../../telemetry/glean-context\";\nimport { AuthContainer } from \"../../ui/molecules/auth-container\";\nimport { usePlusUrl } from \"../utils\";\nimport \"./login-banner.scss\";\n\nexport function PlusLoginBanner({\n children,\n className = \"login-banner\",\n gleanPrefix,\n}: {\n children: React.ReactNode;\n className?: string;\n gleanPrefix: string;\n}) {\n const href = usePlusUrl();\n const gleanClick = useGleanClick();\n\n return (\n <div className={className}>\n <span>\n <span>{children}</span>{\" \"}\n <strong>\n Upgrade to{\" \"}\n <a\n className=\"plus-link\"\n href={href}\n onClick={() => gleanClick(`${gleanPrefix}: banner-link`)}\n >\n MDN Plus\n </a>{\" \"}\n for free.\n </strong>\n </span>\n <AuthContainer\n logInGleanContext={`${gleanPrefix}: banner-login`}\n signUpGleanContext={`${gleanPrefix}: banner-signup`}\n />\n </div>\n );\n}\n","import useSWR from '../index/index.mjs';\nimport { withMiddleware } from '../_internal/index.mjs';\n\nconst immutable = (useSWRNext)=>(key, fetcher, config)=>{\n // Always override all revalidate options.\n config.revalidateOnFocus = false;\n config.revalidateIfStale = false;\n config.revalidateOnReconnect = false;\n return useSWRNext(key, fetcher, config);\n };\nconst useSWRImmutable = withMiddleware(useSWR, immutable);\n\nexport { useSWRImmutable as default, immutable };\n"],"names":["FlagForm","param","gistId","Button","e","_document_getElementById_closest","fetch","JSON","document","a","ShareForm","url","share","code","userData","useUserData","gleanClick","useGleanClick","_useState","loading","setLoading","PLAYGROUND","navigator","codeToMarkdown","Loading","PlusLoginBanner","store","session","editorContent","sessionStorage","Playground","_useSearchParams","searchParams","setSearchParams","stateParam","dialogState","setDialogState","_useState1","shared","setShared","_useState2","shareUrl","setShareUrl","_useState3","state","setState","_useState4","isShareable","setIsShareable","_useState5","isClearable","setIsClearable","_useState6","initialContent","setInitialContent","initialCode","_useSWRImmutable","encodeURIComponent","response","Error","SESSION_KEY","undefined","controller","useRef","diaRef","useEffect","Object","Boolean","structuredClone","getEditorContent","useCallback","_controller_current","_controller_current1","_controller_current2","setIsEmpty","content","html","css","js","setEditorContent","decompressFromBase64","state1","console","run","_document_getElementById_firstElementChild","_ref","id","res","URL","URLSearchParams","onEditorUpdate","ReactPlayController","_diaRef_current","window","ReactPlayEditor","ReactPlayRunner","ReactPlayConsole","SidePlacement","children","className","gleanPrefix","href","usePlusUrl","AuthContainer"],"mappings":"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"}
1
+ {"version":3,"file":"9380.2e09c0a94dc10112.js","sources":["webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/playground/forms.tsx","webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/playground/index.tsx","webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/plus/common/login-banner.tsx","webpack://@mdn/fred/./node_modules/swr/dist/immutable/index.mjs"],"sourcesContent":["import { useState } from \"react\";\nimport { Button } from \"../ui/atoms/button\";\nimport { EditorContent, codeToMarkdown } from \"./utils\";\nimport { Loading } from \"../ui/atoms/loading\";\nimport { useUserData } from \"../user-context\";\nimport { useGleanClick } from \"../telemetry/glean-context\";\nimport { PLAYGROUND } from \"../telemetry/constants\";\nimport { PlusLoginBanner } from \"../plus/common/login-banner\";\n\nexport function FlagForm({ gistId }: { gistId: string | null }) {\n return (\n <form className=\"flag\">\n <span>\n Report this malicious or inappropriate shared playground. Can you please\n share some details on what's wrong with this content:\n </span>\n <textarea id=\"flagReason\"></textarea>\n <div className=\"buttons\">\n <Button\n id=\"flag-cancel\"\n value=\"cancel\"\n type=\"secondary\"\n buttonType=\"submit\"\n formMethod=\"dialog\"\n >\n Cancel\n </Button>\n <Button\n id=\"flag-send\"\n onClickHandler={async (e) => {\n e.preventDefault();\n await fetch(\"/api/v1/play/flag\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id: gistId,\n reason: (\n document.getElementById(\"flagReason\") as HTMLTextAreaElement\n ).value,\n }),\n });\n document.getElementById(\"flag-send\")?.closest(\"dialog\")?.close();\n }}\n value=\"default\"\n >\n Report\n </Button>\n </div>\n </form>\n );\n}\n\nexport function ShareForm({\n url,\n share,\n code,\n}: {\n url: URL | null;\n share?: () => Promise<void>;\n code?: () => EditorContent;\n extraClasses?: string;\n}) {\n let userData = useUserData();\n const gleanClick = useGleanClick();\n let [loading, setLoading] = useState(false);\n return (\n <form className=\"share\">\n <Button\n id=\"share-cancel\"\n title=\"Cancel\"\n extraClasses=\"action\"\n value=\"cancel\"\n icon=\"cancel\"\n buttonType=\"submit\"\n formMethod=\"dialog\"\n ></Button>\n <section>\n <span>Share Markdown</span>\n <Button\n type=\"secondary\"\n onClickHandler={async () => {\n gleanClick(`${PLAYGROUND}: share-markdown`);\n code &&\n (await navigator.clipboard.writeText(codeToMarkdown(code())));\n }}\n >\n Copy markdown to clipboard\n </Button>\n </section>\n <section id=\"share-link\">\n <span>Share your code via Permalink</span>\n {userData?.isAuthenticated ? (\n <>\n {url ? (\n loading ? (\n <Loading />\n ) : (\n <>\n <input value={url.toString()} />\n <Button\n type=\"secondary\"\n onClickHandler={async () => {\n url &&\n (await navigator.clipboard.writeText(url.toString()));\n }}\n >\n Copy to clipboard\n </Button>\n </>\n )\n ) : (\n <Button\n onClickHandler={async () => {\n setLoading(true);\n gleanClick(`${PLAYGROUND}: share-permalink`);\n await share?.();\n setLoading(false);\n }}\n >\n Create link\n </Button>\n )}\n </>\n ) : (\n <PlusLoginBanner className=\"share-get-plus\" gleanPrefix={PLAYGROUND}>\n Want to share this playground via link?\n <br />\n </PlusLoginBanner>\n )}\n </section>\n </form>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useSearchParams } from \"react-router-dom\";\nimport useSWRImmutable from \"swr/immutable\";\nimport { Button } from \"../ui/atoms/button\";\nimport { SidePlacement } from \"../ui/organisms/placement\";\nimport { decompressFromBase64, EditorContent, SESSION_KEY } from \"./utils\";\n\nimport \"./index.scss\";\nimport { FlagForm, ShareForm } from \"./forms\";\nimport { PlayController, ReactPlayController } from \"../lit/play/controller\";\nimport { ReactPlayEditor } from \"../lit/play/editor\";\nimport { ReactPlayConsole } from \"../lit/play/console\";\nimport { ReactPlayRunner } from \"../lit/play/runner\";\nimport { useGleanClick } from \"../telemetry/glean-context\";\nimport { PLAYGROUND } from \"../telemetry/constants\";\n\nconst HTML_DEFAULT = \"\";\nconst CSS_DEFAULT = \"\";\nconst JS_DEFAULT = \"\";\n\nenum State {\n initial,\n ready,\n remote,\n}\n\nenum DialogState {\n none,\n share,\n flag,\n}\n\nasync function save(editorContent: EditorContent) {\n const res = await fetch(\"/api/v1/play/\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(editorContent),\n });\n let { id } = await res.json();\n let url = new URL(document.URL);\n url.search = new URLSearchParams([[\"id\", id]]).toString();\n return { url, id };\n}\n\nfunction store(session: string, editorContent: EditorContent) {\n sessionStorage.setItem(session, JSON.stringify(editorContent));\n}\n\nfunction load(session: string) {\n let code = JSON.parse(sessionStorage.getItem(session) || \"{}\");\n return {\n html: code?.html || HTML_DEFAULT,\n css: code?.css || CSS_DEFAULT,\n js: code?.js || JS_DEFAULT,\n src: code?.src,\n };\n}\n\nexport default function Playground() {\n const gleanClick = useGleanClick();\n let [searchParams, setSearchParams] = useSearchParams();\n const gistId = searchParams.get(\"id\");\n const stateParam = searchParams.get(\"state\");\n let [dialogState, setDialogState] = useState(DialogState.none);\n let [shared, setShared] = useState(false);\n let [shareUrl, setShareUrl] = useState<URL | null>(null);\n let [state, setState] = useState(State.initial);\n const [isShareable, setIsShareable] = useState<boolean>(true);\n const [isClearable, setIsClearable] = useState<boolean>(true);\n const [initialContent, setInitialContent] = useState<EditorContent | null>(\n null\n );\n let { data: initialCode } = useSWRImmutable<EditorContent>(\n !stateParam && !shared && gistId\n ? `/api/v1/play/${encodeURIComponent(gistId)}`\n : null,\n async (url) => {\n const response = await fetch(url);\n\n if (!response.ok) {\n throw Error(response.statusText);\n }\n gleanClick(`${PLAYGROUND}: load-shared`);\n\n const code = await response.json();\n if (code) {\n setState(State.remote);\n return code;\n }\n return null;\n },\n {\n fallbackData:\n (!stateParam &&\n !gistId &&\n state === State.initial &&\n load(SESSION_KEY)) ||\n undefined,\n }\n );\n const controller = useRef<PlayController | null>(null);\n const diaRef = useRef<HTMLDialogElement | null>(null);\n\n useEffect(() => {\n if (initialCode) {\n store(SESSION_KEY, initialCode);\n if (Object.values(initialCode).some(Boolean)) {\n setInitialContent(structuredClone(initialCode));\n }\n }\n }, [initialCode, setInitialContent]);\n\n const getEditorContent = useCallback(() => {\n return {\n html: controller.current?.code.html || HTML_DEFAULT,\n css: controller.current?.code.css || CSS_DEFAULT,\n js: controller.current?.code.js || JS_DEFAULT,\n src: initialCode?.src || initialContent?.src,\n };\n }, [initialContent?.src, initialCode?.src]);\n\n const setIsEmpty = useCallback((content: EditorContent) => {\n const { html, css, js } = content;\n setIsShareable(!html.trim() && !css.trim() && !js.trim());\n setIsClearable(!html && !css && !js);\n }, []);\n\n const setEditorContent = useCallback(\n (content: EditorContent) => {\n if (controller.current) {\n controller.current.code = { ...content };\n if (content.src) {\n controller.current.srcPrefix = content.src;\n }\n setIsEmpty(content);\n store(SESSION_KEY, content);\n }\n },\n [setIsEmpty]\n );\n\n useEffect(() => {\n (async () => {\n if (state === State.initial || state === State.remote) {\n if (initialCode && Object.values(initialCode).some(Boolean)) {\n setEditorContent(initialCode);\n if (!gistId) {\n // don't auto run shared code\n controller.current?.run();\n }\n } else if (stateParam) {\n try {\n let { state } = await decompressFromBase64(stateParam);\n let code = JSON.parse(state || \"{}\") as EditorContent;\n setEditorContent(code);\n } catch (e) {\n console.error(e);\n }\n } else {\n setEditorContent({\n html: HTML_DEFAULT,\n css: CSS_DEFAULT,\n js: JS_DEFAULT,\n });\n }\n setState(State.ready);\n }\n })();\n }, [initialCode, state, gistId, stateParam, setEditorContent]);\n\n const clear = async () => {\n setSearchParams([], { replace: true });\n setInitialContent(null);\n setEditorContent({\n html: HTML_DEFAULT,\n css: CSS_DEFAULT,\n js: JS_DEFAULT,\n src: undefined,\n });\n\n run();\n };\n\n const reset = async () => {\n setEditorContent({\n html: initialContent?.html || HTML_DEFAULT,\n css: initialContent?.css || CSS_DEFAULT,\n js: initialContent?.js || JS_DEFAULT,\n });\n\n run();\n };\n\n const clearConfirm = async () => {\n if (window.confirm(\"Do you really want to clear everything?\")) {\n gleanClick(`${PLAYGROUND}: reset-click`);\n await clear();\n }\n };\n\n const resetConfirm = async () => {\n if (window.confirm(\"Do you really want to revert your changes?\")) {\n gleanClick(`${PLAYGROUND}: revert-click`);\n await reset();\n }\n };\n\n const run = () => {\n const loading = [\n {},\n {\n backgroundColor: \"var(--background-mark-green)\",\n },\n {},\n ];\n const timing = {\n duration: 1000,\n iterations: 1,\n };\n document.getElementById(\"run\")?.firstElementChild?.animate(loading, timing);\n controller.current?.run();\n };\n\n const format = async () => {\n await controller.current?.format();\n };\n\n const share = useCallback(async () => {\n const { url, id } = await save(getEditorContent());\n setSearchParams([[\"id\", id]], { replace: true });\n setShared(true);\n setShareUrl(url);\n }, [setSearchParams, setShareUrl, setShared, getEditorContent]);\n\n const cleanDialog = () => {\n if (dialogState === DialogState.share) {\n setShareUrl(null);\n }\n };\n\n const onEditorUpdate = () => {\n const code = getEditorContent();\n setIsEmpty(code);\n store(SESSION_KEY, code);\n };\n\n return (\n <ReactPlayController ref={controller} runOnChange={true}>\n <main className=\"play container\">\n <dialog id=\"playDialog\" ref={diaRef} onClose={cleanDialog}>\n {dialogState === DialogState.flag && <FlagForm gistId={gistId} />}\n {dialogState === DialogState.share && (\n <ShareForm url={shareUrl} code={getEditorContent} share={share} />\n )}\n </dialog>\n <section className=\"editors\">\n <aside>\n <h1>Playground</h1>\n <menu>\n <Button type=\"secondary\" id=\"format\" onClickHandler={format}>\n format\n </Button>\n <Button type=\"secondary\" id=\"run\" onClickHandler={run}>\n run\n </Button>\n <Button\n type=\"secondary\"\n id=\"share\"\n isDisabled={isShareable}\n onClickHandler={() => {\n gleanClick(`${PLAYGROUND}: share-click`);\n setDialogState(DialogState.share);\n diaRef.current?.showModal();\n }}\n >\n share\n </Button>\n <Button\n type=\"secondary\"\n isDisabled={isClearable}\n id=\"clear\"\n extraClasses=\"red\"\n onClickHandler={clearConfirm}\n >\n clear\n </Button>\n {initialContent && (\n <Button\n type=\"secondary\"\n id=\"reset\"\n extraClasses=\"red\"\n onClickHandler={resetConfirm}\n >\n reset\n </Button>\n )}\n </menu>\n </aside>\n <details className=\"editor-container\" open={true}>\n <summary>HTML</summary>\n <ReactPlayEditor\n language=\"html\"\n onUpdate={onEditorUpdate}\n ></ReactPlayEditor>\n </details>\n <details className=\"editor-container\" open={true}>\n <summary>CSS</summary>\n <ReactPlayEditor\n language=\"css\"\n onUpdate={onEditorUpdate}\n ></ReactPlayEditor>\n </details>\n <details className=\"editor-container\" open={true}>\n <summary>JAVASCRIPT</summary>\n <ReactPlayEditor\n language=\"js\"\n onUpdate={onEditorUpdate}\n ></ReactPlayEditor>\n </details>\n </section>\n <section className=\"preview\">\n {gistId && (\n <button\n className=\"flag-example\"\n onClick={(e) => {\n e.preventDefault();\n gleanClick(`${PLAYGROUND}: flag-click`);\n setDialogState(DialogState.flag);\n diaRef.current?.showModal();\n }}\n >\n Seeing something inappropriate?\n </button>\n )}\n <ReactPlayRunner />\n <div id=\"play-console\">\n <span>Console</span>\n <ReactPlayConsole />\n </div>\n <SidePlacement extraClasses={[\"horizontal\"]} />\n </section>\n </main>\n </ReactPlayController>\n );\n}\n","import { useGleanClick } from \"../../telemetry/glean-context\";\nimport { AuthContainer } from \"../../ui/molecules/auth-container\";\nimport { usePlusUrl } from \"../utils\";\nimport \"./login-banner.scss\";\n\nexport function PlusLoginBanner({\n children,\n className = \"login-banner\",\n gleanPrefix,\n}: {\n children: React.ReactNode;\n className?: string;\n gleanPrefix: string;\n}) {\n const href = usePlusUrl();\n const gleanClick = useGleanClick();\n\n return (\n <div className={className}>\n <span>\n <span>{children}</span>{\" \"}\n <strong>\n Upgrade to{\" \"}\n <a\n className=\"plus-link\"\n href={href}\n onClick={() => gleanClick(`${gleanPrefix}: banner-link`)}\n >\n MDN Plus\n </a>{\" \"}\n for free.\n </strong>\n </span>\n <AuthContainer\n logInGleanContext={`${gleanPrefix}: banner-login`}\n signUpGleanContext={`${gleanPrefix}: banner-signup`}\n />\n </div>\n );\n}\n","import useSWR from '../index/index.mjs';\nimport { withMiddleware } from '../_internal/index.mjs';\n\nconst immutable = (useSWRNext)=>(key, fetcher, config)=>{\n // Always override all revalidate options.\n config.revalidateOnFocus = false;\n config.revalidateIfStale = false;\n config.revalidateOnReconnect = false;\n return useSWRNext(key, fetcher, config);\n };\nconst useSWRImmutable = withMiddleware(useSWR, immutable);\n\nexport { useSWRImmutable as default, immutable };\n"],"names":["FlagForm","param","gistId","Button","e","_document_getElementById_closest","fetch","JSON","document","a","ShareForm","url","share","code","userData","useUserData","gleanClick","useGleanClick","_useState","loading","setLoading","PLAYGROUND","navigator","codeToMarkdown","Loading","PlusLoginBanner","store","session","editorContent","sessionStorage","Playground","_useSearchParams","searchParams","setSearchParams","stateParam","dialogState","setDialogState","_useState1","shared","setShared","_useState2","shareUrl","setShareUrl","_useState3","state","setState","_useState4","isShareable","setIsShareable","_useState5","isClearable","setIsClearable","_useState6","initialContent","setInitialContent","initialCode","_useSWRImmutable","encodeURIComponent","response","Error","SESSION_KEY","undefined","controller","useRef","diaRef","useEffect","Object","Boolean","structuredClone","getEditorContent","useCallback","_controller_current","_controller_current1","_controller_current2","setIsEmpty","content","html","css","js","setEditorContent","decompressFromBase64","state1","console","run","_document_getElementById_firstElementChild","_ref","id","res","URL","URLSearchParams","onEditorUpdate","ReactPlayController","_diaRef_current","window","ReactPlayEditor","ReactPlayRunner","ReactPlayConsole","SidePlacement","children","className","gleanPrefix","href","usePlusUrl","AuthContainer"],"mappings":"g3DASO,SAASA,EAASC,CAAqC,E,IAAnCC,EAAFD,EAAEC,MAAM,CAC/B,OACE,gBAAC,QAAK,UAAU,M,EACd,gBAAC,YAAK,kIAIN,gBAAC,YAAS,GAAG,Y,GACb,gBAAC,OAAI,UAAU,S,EACb,gBAACC,EAAAA,CAAMA,CAAAA,CACL,GAAG,cACH,MAAM,SACN,KAAK,YACL,WAAW,SACX,WAAW,Q,EACZ,UAGD,gBAACA,EAAAA,CAAMA,CAAAA,CACL,GAAG,YACH,eAAgB,SAAOC,CAAC,E,wBActBC,EAAAA,E,iDAZA,OADAD,EAAE,cAAc,GAChB,C,EAAME,MAAM,oBAAqB,CAC/B,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAMC,KAAK,SAAS,CAAC,CACnB,GAAIL,EACJ,OACEM,SAAS,cAAc,CAAC,cACxB,KAAK,AACT,EACF,G,eAXAC,EAAA,O,MAYAJ,CAAAA,EAAAA,SAAS,cAAc,CAAC,YAAW,GAAnCA,MAAAA,CAAAA,EAAAA,EAAsC,OAAO,CAAC,SAAQ,GAAtDA,EAAyD,KAAK,G,MAChE,I,EACA,MAAM,S,EACP,WAMT,CAEO,SAASK,EAAUT,CASzB,E,MARCU,EADwBV,EACxBU,GAAG,CACHC,EAFwBX,EAExBW,KAAK,CACLC,EAHwBZ,EAGxBY,IAAI,CAOAC,EAAWC,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,IACTC,EAAaC,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,IACSC,G,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAS,I,sOAAA,I,gHAAA,I,qDAAA,G,uOAAA,G,IAAA,I,6KAAhCC,EAAuBD,CAAAA,CAAAA,EAAAA,CAAdE,EAAcF,CAAAA,CAAAA,EAAAA,CAC5B,OACE,gBAAC,QAAK,UAAU,O,EACd,gBAACf,EAAAA,CAAMA,CAAAA,CACL,GAAG,eACH,MAAM,SACN,aAAa,SACb,MAAM,SACN,KAAK,SACL,WAAW,SACX,WAAW,Q,GAEb,gBAAC,eACC,gBAAC,YAAK,kBACN,gBAACA,EAAAA,CAAMA,CAAAA,CACL,KAAK,YACL,eAAgB,W,wEACda,EAAY,GAAa,OAAXK,EAAAA,EAAUA,CAAC,qB,CACzBR,EAAAA,MAAAA,C,KACG,O,EAAMS,UAAU,SAAS,CAAC,SAAS,CAACC,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAeV,M,QAAnD,S,6BACL,I,GACD,+BAIH,gBAAC,WAAQ,GAAG,Y,EACV,gBAAC,YAAK,iCACLC,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAU,eAAe,AAAD,EACvB,gCACGH,EACCQ,EACE,gBAACK,EAAAA,CAAOA,CAAAA,MAER,gCACE,gBAAC,SAAM,MAAOb,EAAI,QAAQ,E,GAC1B,gBAACR,EAAAA,CAAMA,CAAAA,CACL,KAAK,YACL,eAAgB,W,yEACdQ,EAAAA,MAAAA,C,KACG,O,EAAMW,UAAU,SAAS,CAAC,SAAS,CAACX,EAAI,QAAQ,I,QAAhD,S,6BACL,I,GACD,sBAML,gBAACR,EAAAA,CAAMA,CAAAA,CACL,eAAgB,W,qEAGd,OAFAiB,EAAW,IACXJ,EAAY,GAAa,OAAXK,EAAAA,EAAUA,CAAC,sBACzB,C,EAAMT,MAAAA,EAAAA,KAAAA,EAAAA,I,eAAN,SACAQ,EAAW,I,MACb,I,GACD,gBAML,gBAACK,EAAAA,CAAeA,CAAAA,CAAC,UAAU,iBAAiB,YAAaJ,EAAAA,EAAUA,A,EAAE,0CAEnE,gBAAC,aAMb,C,69ECxFA,SAASK,EAAMC,CAAe,CAAEC,CAA4B,EAC1DC,eAAe,OAAO,CAACF,EAASpB,KAAK,SAAS,CAACqB,GACjD,CAYe,SAASE,IACtB,IAXYH,EACRd,EAUEG,EAAaC,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,IACmBc,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,IAAeA,GAAhDC,EAAiCD,CAAAA,CAAAA,EAAAA,CAAnBE,EAAmBF,CAAAA,CAAAA,EAAAA,CAChC7B,EAAS8B,EAAa,GAAG,CAAC,MAC1BE,EAAaF,EAAa,GAAG,CAAC,SACAd,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAS,GAADA,GAAvCiB,EAA+BjB,CAAAA,CAAAA,EAAAA,CAAlBkB,EAAkBlB,CAAAA,CAAAA,EAAAA,CACVmB,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAS,OAA9BC,EAAqBD,CAAAA,CAAAA,EAAAA,CAAbE,EAAaF,CAAAA,CAAAA,EAAAA,CACIG,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAqB,SAA9CC,EAAyBD,CAAAA,CAAAA,EAAAA,CAAfE,EAAeF,CAAAA,CAAAA,EAAAA,CACNG,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAS,GAADA,GAA3BC,EAAmBD,CAAAA,CAAAA,EAAAA,CAAZE,EAAYF,CAAAA,CAAAA,EAAAA,CACcG,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAkB,OAAjDC,EAA+BD,CAAAA,CAAAA,EAAAA,CAAlBE,EAAkBF,CAAAA,CAAAA,EAAAA,CACAG,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAkB,OAAjDC,EAA+BD,CAAAA,CAAAA,EAAAA,CAAlBE,EAAkBF,CAAAA,CAAAA,EAAAA,CACMG,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAC1C,SADKC,EAAqCD,CAAAA,CAAAA,EAAAA,CAArBE,EAAqBF,CAAAA,CAAAA,EAAAA,CAGhCG,EAAgBC,AAAAA,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAC1B,AAACtB,GAAeI,IAAUpC,EAEtB,KADC,gBAA0C,OAA3BuD,mBAAmBvD,IAEvC,SAAOS,CAAG,E,wBACF+C,EAOA7C,E,iDAPW,O,EAAMP,MAAMK,G,QAE7B,GAAI,CAAC+C,AAFCA,CAAAA,EAAWjD,EAAA,QAEH,EAAE,CACd,MAAMkD,MAAMD,EAAS,UAAU,EAIpB,OAFb1C,EAAY,GAAa,OAAXK,EAAAA,EAAUA,CAAC,kBAEZ,C,EAAMqC,EAAS,IAAI,G,QAChC,GADM7C,EAAOJ,EAAA,OAGX,OADAoC,EAAS,GACF,C,EAAAhC,E,CAET,MAAO,C,EAAA,K,GACT,I,EACA,CACE,aACG,CAACqB,GACA,CAAChC,GACD0C,AAAU,IAAVA,IA/CIjB,EAgDCiC,EAAAA,EAAWA,CA9CjB,CACL,KAAM/C,AAAAA,QAFJA,EAAON,KAAK,KAAK,CAACsB,eAAe,OAAO,CAACF,IAAY,OAEjDd,KAAAA,EAAAA,EAAM,IAAI,AAAD,GArCE,GAsCjB,IAAKA,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,GAAG,AAAD,GArCG,GAsChB,GAAIA,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,EAAE,AAAD,GArCI,GAsCf,IAAKA,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,GAAG,AAChB,IA0CMgD,MACJ,GA1BI,IAAI,CA4BJC,EAAaC,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAA8B,MAC3CC,EAASD,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAiC,MAEhDE,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,WACJV,IACF7B,EAAMkC,EAAAA,EAAWA,CAAEL,GACfW,OAAO,MAAM,CAACX,GAAa,IAAI,CAACY,UAClCb,EAAkBc,gBAAgBb,IAGxC,EAAG,CAACA,EAAaD,EAAkB,EAEnC,IAAMe,EAAmBC,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAAY,W,IAE3BC,EACDC,EACDC,EAHN,MAAO,CACL,KAAMF,AAAAA,OAAAA,CAAAA,EAAAA,EAAW,OAAO,AAAD,EAAjBA,KAAAA,EAAAA,EAAoB,IAAI,CAAC,IAAI,AAAD,GApGnB,GAqGf,IAAKC,AAAAA,OAAAA,CAAAA,EAAAA,EAAW,OAAO,AAAD,EAAjBA,KAAAA,EAAAA,EAAoB,IAAI,CAAC,GAAG,AAAD,GApGlB,GAqGd,GAAIC,AAAAA,OAAAA,CAAAA,EAAAA,EAAW,OAAO,AAAD,EAAjBA,KAAAA,EAAAA,EAAoB,IAAI,CAAC,EAAE,AAAD,GApGjB,GAqGb,IAAKlB,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAa,GAAG,AAAD,GAAKF,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAgB,GAAG,AAAD,CAC7C,CACF,EAAG,CAACA,MAAAA,EAAAA,KAAAA,EAAAA,EAAgB,GAAG,CAAEE,MAAAA,EAAAA,KAAAA,EAAAA,EAAa,GAAG,CAAC,EAEpCmB,EAAaJ,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAAY,SAACK,CAAO,EACrC,IAAQC,EAAkBD,EAAlBC,IAAI,CAAEC,EAAYF,EAAZE,GAAG,CAAEC,EAAOH,EAAPG,EAAE,CACrB9B,EAAe,CAAC4B,EAAK,IAAI,IAAM,CAACC,EAAI,IAAI,IAAM,CAACC,EAAG,IAAI,IACtD3B,EAAe,CAACyB,GAAQ,CAACC,GAAO,CAACC,EACnC,EAAG,EAAE,EAECC,EAAmBT,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EACvB,SAACK,CAAO,EACFb,EAAW,OAAO,GACpBA,EAAW,OAAO,CAAC,IAAI,CAAG,A,iaAAA,GAAKa,GAC3BA,EAAQ,GAAG,EACbb,CAAAA,EAAW,OAAO,CAAC,SAAS,CAAGa,EAAQ,GAAG,AAAD,EAE3CD,EAAWC,GACXjD,EAAMkC,EAAAA,EAAWA,CAAEe,GAEvB,EACA,CAACD,EAAW,EAGdT,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,W,iBAOAM,E,oDALF3B,AAAU,IAAVA,GAA2BA,AAAU,IAAVA,EAA3BA,MAAAA,C,SACEW,CAAAA,GAAeW,OAAO,MAAM,CAACX,GAAa,IAAI,CAACY,QAAO,EAAtDZ,MAAAA,C,YACFwB,EAAiBxB,GACb,AAACrD,G,MAEHqE,CAAAA,EAAAA,EAAW,OAAO,AAAD,GAAjBA,EAAoB,GAAG,G,iBAEhBrC,EAAAA,MAAAA,C,sBAES,O,sBAAA,C,EAAM8C,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAqB9C,G,eAE3C6C,EADWxE,KAAK,KAAK,CAAC0E,AADN,SAAVA,KAAK,EACoB,O,oBAG/BC,QAAQ,KAAK,CADN9E,EAAAA,IAAAA,I,gCAIT2E,EAAiB,CACf,KAlJS,GAmJT,IAlJQ,GAmJR,GAlJO,EAmJT,G,iBAEFlC,EAAS,G,6BAEb,IACF,EAAG,CAACU,EAAaX,EAAO1C,EAAQgC,EAAY6C,EAAiB,EAuC7D,IAAMI,GAAM,WACV,IAWAC,EAAAA,EACAb,C,OADAa,CAAAA,EAAAA,SAAS,cAAc,CAAC,MAAK,GAA7BA,MAAAA,CAAAA,EAAAA,EAAgC,iBAAiB,AAAD,GAAhDA,EAAmD,OAAO,CAX1C,CACd,CAAC,EACD,CACE,gBAAiB,8BACnB,EACA,CAAC,EACF,CACc,CACb,SAAU,IACV,WAAY,CACd,G,MAEAb,CAAAA,EAAAA,EAAW,OAAO,AAAD,GAAjBA,EAAoB,GAAG,EACzB,EAMM3D,GAAQ0D,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAAY,W,wBACJe,EAAZ1E,E,qDAtMQiB,EAsMIyD,MAAAA,C,GAtMJzD,EAsMeyC,I,iBA9L3BiB,EACF3E,E,iDARQ,O,EAAML,MAAM,gBAAiB,CACvC,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAMC,KAAK,SAAS,CAACqB,EACvB,G,QACa,O,EAAM2D,AAPP,SAOW,IAAI,G,QAG3B,OAHMD,EAAO,SAAPA,EAAE,CAER3E,AADIA,CAAAA,EAAM,IAAI6E,IAAIhF,SAAS,GAAG,GAC1B,MAAM,CAAG,IAAIiF,gBAAgB,C,CAAE,KAAMH,E,GAAM,QAAQ,GAChD,C,EAAA,CAAE3E,IAAAA,EAAK2E,GAAAA,CAAG,E,GACnB,M,eA0LY3E,EAAY0E,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAZ1E,GAAG,CACXsB,EAAgB,C,CAAE,KADEoD,EAAPC,EAAE,C,EACe,CAAE,QAAS,EAAK,GAC9C/C,EAAU,IACVG,EAAY/B,G,MACd,I,EAAG,CAACsB,EAAiBS,EAAaH,EAAW8B,EAAiB,EAQxDqB,GAAiB,WACrB,IAAM7E,EAAOwD,IACbK,EAAW7D,GACXa,EAAMkC,EAAAA,EAAWA,CAAE/C,EACrB,EAEA,OACE,gBAAC8E,EAAAA,CAAmBA,CAAAA,CAAC,IAAK7B,EAAY,YAAa,E,EACjD,gBAAC,QAAK,UAAU,gB,EACd,gBAAC,UAAO,GAAG,aAAa,IAAKE,EAAQ,QAfvB,WACd7B,AAAgB,IAAhBA,GACFO,EAAY,KAEhB,C,EAYSP,AAAgB,IAAhBA,GAAoC,gBAACnC,EAAQA,CAAC,OAAQE,C,GACtDiC,AAAgB,IAAhBA,GACC,gBAACzB,EAASA,CAAC,IAAK+B,EAAU,KAAM4B,EAAkB,MAAOzD,E,IAG7D,gBAAC,WAAQ,UAAU,S,EACjB,gBAAC,aACC,gBAAC,UAAG,cACJ,gBAAC,YACC,gBAACT,EAAAA,CAAMA,CAAAA,CAAC,KAAK,YAAY,GAAG,SAAS,eApClC,W,wBACPoE,E,iDAAN,O,QAAMA,CAAAA,EAAAA,EAAW,OAAO,AAAD,EAAjBA,KAAAA,EAAAA,EAAoB,MAAM,G,eAAhC,S,MACF,I,GAkCyE,UAG7D,gBAACpE,EAAAA,CAAMA,CAAAA,CAAC,KAAK,YAAY,GAAG,MAAM,eAAgBgF,E,EAAK,OAGvD,gBAAChF,EAAAA,CAAMA,CAAAA,CACL,KAAK,YACL,GAAG,QACH,WAAY4C,EACZ,eAAgB,W,IAGd6C,EAFA5E,EAAY,GAAa,OAAXK,EAAAA,EAAUA,CAAC,kBACzBe,EAAe,G,MACfwD,CAAAA,EAAAA,EAAO,OAAO,AAAD,GAAbA,EAAgB,SAAS,EAC3B,C,EACD,SAGD,gBAACzF,EAAAA,CAAMA,CAAAA,CACL,KAAK,YACL,WAAY+C,EACZ,GAAG,QACH,aAAa,MACb,eAzFO,W,yEACf2C,OAAO,OAAO,CAAC,2CAAfA,MAAAA,C,KAEF,OADA7E,EAAY,GAAa,OAAXK,EAAAA,EAAUA,CAAC,kBACzB,C,gDAzBFY,EAAgB,EAAE,CAAE,CAAE,QAAS,EAAK,GACpCqB,EAAkB,MAClByB,EAAiB,CACf,KAhKe,GAiKf,IAhKc,GAiKd,GAhKa,GAiKb,IAAKlB,MACP,GAEAsB,K,KACF,K,QAeI,S,6BAEJ,I,GAqFa,SAGA9B,GACC,gBAAClD,EAAAA,CAAMA,CAAAA,CACL,KAAK,YACL,GAAG,QACH,aAAa,MACb,eA3FK,W,yEACf0F,OAAO,OAAO,CAAC,8CAAfA,MAAAA,C,KAEF,OADA7E,EAAY,GAAa,OAAXK,EAAAA,EAAUA,CAAC,mBACzB,C,gDAnBF0D,EAAiB,CACf,KAAM1B,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAgB,IAAI,AAAD,GA3KV,GA4Kf,IAAKA,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAgB,GAAG,AAAD,GA3KT,GA4Kd,GAAIA,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAgB,EAAE,AAAD,GA3KR,EA4Kf,GAEA8B,K,KACF,K,QAYI,S,6BAEJ,I,GAuFe,WAMP,gBAAC,WAAQ,UAAU,mBAAmB,KAAM,E,EAC1C,gBAAC,eAAQ,QACT,gBAACW,EAAAA,CAAeA,CAAAA,CACd,SAAS,OACT,SAAUJ,E,IAGd,gBAAC,WAAQ,UAAU,mBAAmB,KAAM,E,EAC1C,gBAAC,eAAQ,OACT,gBAACI,EAAAA,CAAeA,CAAAA,CACd,SAAS,MACT,SAAUJ,E,IAGd,gBAAC,WAAQ,UAAU,mBAAmB,KAAM,E,EAC1C,gBAAC,eAAQ,cACT,gBAACI,EAAAA,CAAeA,CAAAA,CACd,SAAS,KACT,SAAUJ,E,KAIhB,gBAAC,WAAQ,UAAU,S,EAChBxF,GACC,gBAAC,UACC,UAAU,eACV,QAAS,SAACE,CAAC,E,IAITwF,EAHAxF,EAAE,cAAc,GAChBY,EAAY,GAAa,OAAXK,EAAAA,EAAUA,CAAC,iBACzBe,EAAe,G,MACfwD,CAAAA,EAAAA,EAAO,OAAO,AAAD,GAAbA,EAAgB,SAAS,EAC3B,C,EACD,mCAIH,gBAACG,EAAAA,CAAeA,CAAAA,MAChB,gBAAC,OAAI,GAAG,c,EACN,gBAAC,YAAK,WACN,gBAACC,EAAAA,CAAgBA,CAAAA,OAEnB,gBAACC,EAAAA,EAAaA,CAAAA,CAAC,aAAc,CAAC,aAAa,A,KAKrD,C,8ECrVO,SAASxE,EAAgBxB,CAQ/B,E,IAPCiG,EAD8BjG,EAC9BiG,QAAQ,CAARA,EAD8BjG,EAE9BkG,SAAS,CACTC,EAH8BnG,EAG9BmG,WAAW,CAMLC,EAAOC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,IACPtF,EAAaC,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,IAEnB,OACE,gBAAC,OAAI,UAXK,AAAZkF,KAAAA,IAAY,kB,EAYR,gBAAC,YACC,gBAAC,YAAMD,GAAiB,IACxB,gBAAC,cAAO,aACK,IACX,gBAAC,KACC,UAAU,YACV,KAAMG,EACN,QAAS,W,OAAMrF,EAAY,GAAc,OAAZoF,EAAY,iB,GAC1C,YAEI,IAAI,cAIb,gBAACG,EAAAA,CAAaA,CAAAA,CACZ,kBAAoB,GAAc,OAAZH,EAAY,kBAClC,mBAAqB,GAAc,OAAZA,EAAY,kB,GAI3C,C,+CC7BA,IAAM,EAAkB,G,SAAA,IAAe,IAAM,CAP3B,AAAC,GAAa,CAAC,EAAK,EAAS,KAEvC,EAAO,iBAAiB,CAAG,GAC3B,EAAO,iBAAiB,CAAG,GAC3B,EAAO,qBAAqB,CAAG,GACxB,EAAW,EAAK,EAAS,I"}
@@ -1,13 +1,13 @@
1
1
  [
2
- "/static/legacy/index.0b85877f879160b2.js",
2
+ "/static/legacy/index.5e65b9f52e86ad40.js",
3
3
  "/static/legacy/index.b907d3ce0ac3a2b4.css",
4
- "/static/legacy/yari.46e28128e98126d7.js",
5
4
  "/static/legacy/yari.be7e5d3c19a4d1a1.css",
5
+ "/static/legacy/yari.c8f274d3a31b194e.js",
6
6
  "/static/legacy/7555.499540c46b2d1bd3.js",
7
7
  "/static/legacy/8802.96d6bc141bc64597.js",
8
8
  "/static/legacy/4403.10c3fe3643841cec.css",
9
9
  "/static/legacy/3278.14d03c88ea115e37.css",
10
- "/static/legacy/3097.5ee3eace96d8c3ea.js",
10
+ "/static/legacy/3097.89f8c27a39d2d759.js",
11
11
  "/static/legacy/8399.8d25b2aeaed7ee13.js",
12
12
  "/static/legacy/6421.c95be7b7cb482adb.js",
13
13
  "/static/legacy/1689.9711944d8ca293fe.js",
@@ -16,18 +16,18 @@
16
16
  "/static/legacy/construct-style-sheets-polyfill.7173baeb1a22fc68.js",
17
17
  "/static/legacy/1899.2161b7dfb2deb62f.css",
18
18
  "/static/legacy/8941.0bd53a756ae56da1.css",
19
- "/static/legacy/2569.2ed6f988d52f6cb2.js",
19
+ "/static/legacy/2569.41b52dfae9ff5dbd.js",
20
20
  "/static/legacy/2569.a63cea7cd4c7863b.css",
21
21
  "/static/legacy/9799.d085f300c7b90432.css",
22
22
  "/static/legacy/7771.383567cb70ff38c5.css",
23
23
  "/static/legacy/4944.9ae3bfe5ff190795.css",
24
- "/static/legacy/4944.dff54c3109113729.js",
24
+ "/static/legacy/4944.d5de2520acb6bc03.js",
25
25
  "/static/legacy/1745.98ac3d247214830b.js",
26
26
  "/static/legacy/664.cf1a8ec6d989d5f4.js",
27
27
  "/static/legacy/1337.acd0242c38a8e5cb.css",
28
28
  "/static/legacy/1337.e1195f3a1e963bf6.js",
29
29
  "/static/legacy/5883.be0b66805805d590.js",
30
- "/static/legacy/4968.12b8af0a52d054ac.js",
30
+ "/static/legacy/4968.c5c0429688b49438.js",
31
31
  "/static/legacy/665.e3a69b707226897a.css",
32
32
  "/static/legacy/8771.143b262a3eeac821.js",
33
33
  "/static/legacy/9797.dedd1cf7285db9a0.css",
@@ -332,8 +332,8 @@
332
332
  "/static/legacy/prism-zig-js.0ee51fca5ce6f99d.js",
333
333
  "/static/legacy/6186.d28521fe744f5fce.js",
334
334
  "/static/legacy/4624.584f90c3e476fbba.css",
335
- "/static/legacy/4624.5f395686fe61b4a3.js",
336
- "/static/legacy/8292.88217634072b2959.js",
335
+ "/static/legacy/4624.831090754998070f.js",
336
+ "/static/legacy/8292.5a4929a466c7b3ca.js",
337
337
  "/static/legacy/8048.e9d5e843c9dcfccd.js",
338
338
  "/static/legacy/2834.2c9c22d03d75f8ab.js",
339
339
  "/static/legacy/6375.f3376bf22971d946.js",
@@ -345,14 +345,14 @@
345
345
  "/static/legacy/687.2544329f0c9b42ae.js",
346
346
  "/static/legacy/9605.48767e2a1b115892.js",
347
347
  "/static/legacy/6786.1bf6e5fd8081cb38.css",
348
- "/static/legacy/6786.d37ed4aa6d7a5c1a.js",
349
- "/static/legacy/652.702c9f7893508b7f.js",
350
- "/static/legacy/6542.8f8dc41c1b7b4f3d.js",
351
- "/static/legacy/145.f57152daa80bc354.js",
352
- "/static/legacy/9380.d18451f1d350375d.js",
353
- "/static/legacy/2439.db04dec0f2bfe008.js",
354
- "/static/legacy/8769.d63b4369d16f3391.js",
355
- "/static/legacy/8315.525575601119f224.js",
348
+ "/static/legacy/6786.c180a40232e02d98.js",
349
+ "/static/legacy/652.984bbafca5a127d6.js",
350
+ "/static/legacy/6542.9ae1d636a2097c7a.js",
351
+ "/static/legacy/145.e71ec0c1d16bfeb6.js",
352
+ "/static/legacy/9380.2e09c0a94dc10112.js",
353
+ "/static/legacy/2439.152ddc8eff5390cc.js",
354
+ "/static/legacy/8769.c0eb10a75d355ed3.js",
355
+ "/static/legacy/8315.732f4f8af2f04044.js",
356
356
  "/static/legacy/watify_bg.dc8862fe10114050.wasm",
357
357
  "/static/legacy/STIXTwoMath-Regular.00f90890ff705978.woff2",
358
358
  "/static/legacy/ai-help_dark.046ff33d604ca485.png",
@@ -380,12 +380,12 @@
380
380
  "/static/legacy/stats.json",
381
381
  "/static/legacy/star.ad1e866563e32428.svg",
382
382
  "/static/legacy/curriculum-modules-underline.01944cab0caa296e.svg",
383
- "/static/legacy/yari.46e28128e98126d7.js.LICENSE.txt",
383
+ "/static/legacy/yari.c8f274d3a31b194e.js.LICENSE.txt",
384
384
  "/static/legacy/mastodon.fffa3e16e0b2db59.svg",
385
385
  "/static/legacy/curriculum-resources.30a90089bcf9d9a1.svg",
386
386
  "/static/legacy/eye.1d6bc09fd049c172.svg",
387
387
  "/static/legacy/curriculum-landing-started-employment.9434f729055ae3ce.svg",
388
- "/static/legacy/index.0b85877f879160b2.js.LICENSE.txt",
388
+ "/static/legacy/index.5e65b9f52e86ad40.js.LICENSE.txt",
389
389
  "/static/legacy/prefix.2977e3d4b9fb9a82.svg",
390
390
  "/static/legacy/star-filled.c9db99aeb16b1913.svg",
391
391
  "/static/legacy/curriculum-landing-started-advanced.977e749fb909b586.svg",
@@ -477,7 +477,7 @@
477
477
  "/static/legacy/browser-check.9493085bbbb366b3.svg",
478
478
  "/static/legacy/ai-help.ab31f935f670437e.svg",
479
479
  "/static/legacy/message.fbba45f4c3a1d6f2.svg",
480
- "/static/legacy/index.645247acbde1c666.html",
480
+ "/static/legacy/index.6838304b64f32836.html",
481
481
  "/static/legacy/feedback.d387aa9ea5798baf.svg",
482
482
  "/static/legacy/text-box-check-outline.c3134e1621b4bb2f.svg",
483
483
  "/static/legacy/limited-dark.0d15ef53cc4ad5ef.svg",
@@ -531,7 +531,7 @@
531
531
  "/static/legacy/next.444bedba48443091.svg",
532
532
  "/static/legacy/information.8a003538c18a7e2d.svg",
533
533
  "/static/legacy/results-icon.9b0a9ef2cb6c6f47.svg",
534
- "/static/legacy/6786.d37ed4aa6d7a5c1a.js.LICENSE.txt",
534
+ "/static/legacy/6786.c180a40232e02d98.js.LICENSE.txt",
535
535
  "/static/legacy/menu.360c324943803a41.svg",
536
536
  "/static/legacy/yes.39b8ee80cd467e41.svg",
537
537
  "/static/legacy/note-info.eacdd4a9f2821d63.svg",