[
  {
    "path": ".gitignore",
    "content": "*.class\n*.log\n\n# sbt specific\n.cache/\n.history/\n.lib/\ndist/*\ntarget/\nlib_managed/\nsrc_managed/\nproject/boot/\nproject/plugins/project/\n\n# Scala-IDE specific\n.scala_dependencies/\n.worksheet/\n.cache-main/\n.cache-tests/\n*/.classpath/\n*/.metadata/\n*/.project/\n*/.settings/\n\n#intellij\n\n.idea\n.idea_modules\n\n#project\nassets/\nnode_modules/\n/core/docs\n.DS_Store\nyarn.lock\n\ncore/.cache-main\ncore/.classpath\ncore/.project\ndemo/.classpath\ndemo/.project\ngen/.cache-main\ngen/.cache-tests\ngen/.classpath\ngen/.project\nmacros/.cache-main\nmacros/.classpath\nmacros/.project\n\n*/.gitignore"
  },
  {
    "path": ".scalafmt.conf",
    "content": "align = true    # For pretty alignment.\nmaxColumn = 100 # For my wide 30\" display."
  },
  {
    "path": ".travis.yml",
    "content": "language: scala\n\nscala:\n  - 2.12.4\njdk:\n  - oraclejdk8\n\nsbt_args:\n  -no-colors\n  -J-Xss2m\n\nenv:\n  - NODE_VERSION=\"8.10.0\"\n\nbefore_install:\n  - nvm install $NODE_VERSION\n  - npm install -g yarn\n\nscript:\n- sbt ++$TRAVIS_SCALA_VERSION test demo/fastOptJS::webpack\n# Tricks to avoid unnecessary cache updates, from\n# http://www.scala-sbt.org/0.13/docs/Travis-CI-with-sbt.html\n- find $HOME/.sbt -name \"*.lock\" | xargs rm\n- find $HOME/.ivy2 -name \"ivydata-*.properties\" | xargs rm\n\ncache:\n  yarn: true\n  directories:\n    - $HOME/.ivy2/cache\n    - $HOME/.sbt\n    - $HOME/.cache/yarn\n"
  },
  {
    "path": "LICENSE",
    "content": "Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "NOTICE",
    "content": "Copyright 2017 rleibman\n"
  },
  {
    "path": "README.md",
    "content": "scalajs-react-components\n========================\n\n[![Join the chat at https://gitter.im/chandu0101/scalajs-react-components](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/chandu0101/scalajs-react-components?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\nReusable [scalajs-react](https://github.com/japgolly/scalajs-react) components.\n\nWe are trying to make the experience of using javascript components in scala.js\n as good as possible by adding typed wrappers.\n\nAdding types to javascript is a lot of guesswork, and we're certain to have gotten them wrong\n some places. Bug reports and/or pull requests are very much welcome! :)\n\n### Wrappers for javascript components:\nThese components require you to provide javascript yourself.\n\n- Material-ui 0.18.1\n- Elemental-ui 0.6.1\n- Semantic-ui 0.68.5\n- Google maps (downloads js directly from google)\n- React GeomIcon (react-geomicons: 2.1.10)\n- React Infinite (react-infinite, 0.11.0)\n- Spinner (react-spinner, 0.2.7)\n- React Select (react-select: 1.0.0-rc.5)\n- React TagsInput (react-tagsinput, 3.16.1)\n- React Slick (react-slick: 0.14.11)\n\n### Components written in scala.js\n- DefaultSelect\n- Pager\n- ReactDraggable\n- ReactListView\n- ReactPopOver\n- ReactSearchBox\n- ReactTable\n- ReactTreeView\n\n## Gotchas\n\n#### You have to call `apply` even when components dont have children:\n```scala\nMuiRaisedButton(label = \"label\")()\n```\n\n## Setup\n\n#### SBT\nAdd these dependencies to you sbt build file\n```scala\nlibraryDependencies ++= Seq(\n  \"com.github.japgolly.scalajs-react\" %%% \"core\" % \"1.1.0\",\n  \"com.github.japgolly.scalajs-react\" %%% \"extra\" % \"1.1.0\",\n  \"com.olvind\" %%% \"scalajs-react-components\" % \"1.0.0-M2\"\n)\n```\n\nThis repository includes an example project, by all means use it as a template for your own.\n\n\n#### ScalaCSS\nIn order to use the scala.js components, you need to make sure you load their CSS:\n```scala\nGlobalRegistry.register(<component>.Style)\n```\nSee [here](https://japgolly.github.io/scalacss/book/ext/react.html) for more details\n\n## Full Demo With Code Examples\n\n**Online :**\n\nhttp://chandu0101.github.io/scalajs-react-components\n\n**Local :** This will start a web server on http://localhost:8080\n```\nsbt \nfastOptJS::webpack\ndemo/compile:fastOptJS::startWebpackDevServer\n\n```\n\n## Example project\n\nWe've included an example project to give you an idea how to use the components"
  },
  {
    "path": "build.sbt",
    "content": "// *****************************************************************************\n// Projects\n// *****************************************************************************\nlazy val macros =\n  project\n    .in(file(\"macros\"))\n    .enablePlugins(ScalaJSPlugin)\n    .settings(commonSettings, publicationSettings)\n    .settings(\n      name := \"scalajs-react-components-macros\",\n      libraryDependencies ++= Seq(\n        \"com.github.japgolly.scalajs-react\" %%% \"core\"      % \"1.1.1\",\n        \"com.github.japgolly.scalajs-react\" %%% \"extra\"     % \"1.1.1\",\n        \"org.scalatest\"                     %%% \"scalatest\" % \"3.0.4\" % Test\n      )\n    )\n\nlazy val gen =\n  project\n    .in(file(\"gen\"))\n    .enablePlugins(ScalaJSBundlerPlugin)\n    .settings(commonSettings, preventPublication, npmGenSettings)\n    .settings(\n      organization := \"com.olvind\",\n      name := \"generator\",\n      version in webpack := \"2.6.1\",\n      libraryDependencies ++= Seq(\n        \"com.lihaoyi\"   %% \"ammonite-ops\" % \"1.0.1\",\n        \"org.scalatest\" %% \"scalatest\"    % \"3.0.4\" % Test\n      )\n    )\n\nlazy val generateMui = TaskKey[Seq[File]](\"generateMui\")\nlazy val generateEui = TaskKey[Seq[File]](\"generateEui\")\nlazy val generateSui = TaskKey[Seq[File]](\"generateSui\")\n\nlazy val core =\n  project\n    .in(file(\"core\"))\n    .dependsOn(macros)\n    .enablePlugins(ScalaJSPlugin)\n    .settings(commonSettings, publicationSettings)\n    .settings(\n      generateEui := {\n        val genDir = sourceManaged.value\n        genDir.mkdirs()\n        val res = runner.value.run(\n          \"com.olvind.eui.EuiRunner\",\n          (fullClasspath in (gen, Runtime)).value.files,\n          List(\n            (npmUpdate in (gen, Compile)).value / \"node_modules\" / \"elemental\",\n            sourceManaged.value / \"main\"\n          ) map (_.absolutePath),\n          streams.value.log\n        )\n\n        val pathFinder: PathFinder = sourceManaged.value ** \"*.scala\"\n        pathFinder.get.filter(_.getAbsolutePath.contains(\"elemental\"))\n      },\n      generateMui := {\n        val genDir = sourceManaged.value\n        genDir.mkdirs()\n        val res = runner.value.run(\n          \"com.olvind.mui.MuiRunner\",\n          (fullClasspath in (gen, Runtime)).value.files,\n          List(\n            (npmUpdate in (gen, Compile)).value / \"node_modules\" / \"material-ui\",\n            sourceManaged.value / \"main\"\n          ) map (_.absolutePath),\n          streams.value.log\n        )\n        val pathFinder: PathFinder = sourceManaged.value ** \"*.scala\"\n        pathFinder.get.filter(_.getAbsolutePath.contains(\"material\"))\n      },\n      generateSui := {\n        val genDir = sourceManaged.value\n        genDir.mkdirs()\n        val res = runner.value.run(\n          \"com.olvind.sui.SuiRunner\",\n          (fullClasspath in (gen, Runtime)).value.files,\n          List(\n            (npmUpdate in (gen, Compile)).value / \"node_modules\" / \"semantic-ui-react\" / \"dist\" / \"commonjs\",\n            sourceManaged.value / \"main\"\n          ) map (_.absolutePath),\n          streams.value.log\n        )\n        val pathFinder: PathFinder = sourceManaged.value ** \"*.scala\"\n        pathFinder.get.filter(_.getAbsolutePath.contains(\"semanticui\"))\n      }\n    )\n    .settings(\n      sourceGenerators in Compile += generateMui,\n      sourceGenerators in Compile += generateEui,\n      sourceGenerators in Compile += generateSui,\n      mappings in (Compile, packageSrc) ++= {\n        val sourceDir = (sourceManaged.value / \"main\").toPath\n        def rel(f: File) = sourceDir.relativize(f.toPath).toString\n\n        (managedSources in Compile).value map (s ⇒ s → rel(s))\n      },\n      libraryDependencies ++= Seq(\n        \"com.github.japgolly.scalajs-react\" %%% \"core\"        % \"1.1.1\" withSources (),\n        \"com.github.japgolly.scalajs-react\" %%% \"extra\"       % \"1.1.1\" withSources (),\n        \"com.github.japgolly.scalacss\"      %%% \"core\"        % \"0.5.5\" withSources (),\n        \"com.github.japgolly.scalacss\"      %%% \"ext-react\"   % \"0.5.5\" withSources (),\n        \"org.scala-js\"                      %%% \"scalajs-dom\" % \"0.9.4\" withSources (),\n        \"org.scalacheck\"                    %%% \"scalacheck\"  % \"1.13.5\" % Test,\n        \"org.scalatest\"                     %%% \"scalatest\"   % \"3.0.4\" % Test\n      )\n    )\n\nlazy val preventPublication = Seq(\n  publishArtifact := false,\n  publish := {},\n  packagedArtifacts := Map.empty) // doesn't work - https://github.com/sbt/sbt-pgp/issues/42\n\nlazy val demo =\n  project\n    .in(file(\"demo\"))\n    .dependsOn(core)\n    .enablePlugins(ScalaJSPlugin, ScalaJSBundlerPlugin)\n    .settings(commonSettings, preventPublication, npmSettings, npmDevSettings)\n    .settings(\n      name := \"scalajs-react-components-demo\",\n      version in webpack := \"2.6.1\",\n//      version in installWebpackDevServer := \"2.7.1\",\n      scalaJSUseMainModuleInitializer := true,\n      scalaJSUseMainModuleInitializer.in(Test) := false,\n      artifactPath.in(Compile, fastOptJS) := ((crossTarget in (Compile, fastOptJS)).value /\n        ((moduleName in fastOptJS).value + \"-opt.js\")),\n      webpackResources :=\n        webpackResources.value +++\n          PathFinder(Seq(baseDirectory.value / \"images\", baseDirectory.value / \"index.html\")) ** \"*.*\",\n      webpackConfigFile in (Test) := Some(baseDirectory.value / \"webpack.config.test.js\"),\n      webpackConfigFile in (Compile, fastOptJS) := Some(\n        baseDirectory.value / \"webpack.config.dev.js\"),\n      webpackConfigFile in (Compile, fullOptJS) := Some(\n        baseDirectory.value / \"webpack.config.prod.js\"),\n      jsEnv := new org.scalajs.jsenv.jsdomnodejs.JSDOMNodeJSEnv,\n      webpackBundlingMode := BundlingMode.LibraryOnly()\n    )\n\nlazy val root =\n  project\n    .in(file(\".\"))\n    .aggregate(macros, core, demo)\n    .settings(commonSettings, preventPublication)\n\n// *****************************************************************************\n// Settings\n// *****************************************************************************\n\nlazy val commonSettings =\n  Seq(\n    scalaVersion := \"2.12.4\",\n    version := \"1.0.0-M2\",\n    name := \"scalajs-react-components\",\n    organization := \"com.olvind\",\n    homepage := Some(url(\"http://chandu0101.github.io/scalajs-react-components\")),\n    licenses += (\"Apache 2.0\", url(\"http://www.apache.org/licenses/LICENSE-2.0\")),\n    mappings.in(Compile, packageBin) += baseDirectory.in(ThisBuild).value / \"LICENSE\" -> \"LICENSE\",\n    scalacOptions ++= Seq(\n      \"-deprecation\", // Emit warning and location for usages of deprecated APIs.\n      \"-feature\", // Emit warning and location for usages of features that should be imported explicitly.\n      \"-unchecked\", // Enable additional warnings where generated code depends on assumptions.\n      \"-language:implicitConversions\", // Allow definition of implicit functions called views\n      \"-language:postfixOps\",\n      \"-P:scalajs:sjsDefinedByDefault\"\n    ),\n    unmanagedSourceDirectories.in(Compile) := Seq(scalaSource.in(Compile).value),\n    unmanagedSourceDirectories.in(Test) := Seq(scalaSource.in(Test).value)\n  )\n\nlazy val publicationSettings = Seq(\n  publishTo := {\n    val nexus = \"https://oss.sonatype.org/\"\n    if (isSnapshot.value)\n      Some(\"snapshots\" at nexus + \"content/repositories/snapshots\")\n    else\n      Some(\"releases\" at nexus + \"service/local/staging/deploy/maven2\")\n  },\n  pomExtra :=\n    <scm>\n      <connection>scm:git:github.com:chandu0101/scalajs-react-components</connection>\n      <developerConnection>scm:git:git@github.com:chandu0101/scalajs-react-components.git</developerConnection>\n      <url>github.com:chandu0101/scalajs-react-components.git</url>\n    </scm>\n      <developers>\n        <developer>\n          <id>chandu0101</id>\n          <name>Chandra Sekhar Kode</name>\n        </developer>\n        <developer>\n          <id>oyvindberg</id>\n          <name>Øyvind Raddum Berg</name>\n        </developer>\n        <developer>\n          <id>fmcgough</id>\n          <name>Frankie</name>\n        </developer>\n        <developer>\n          <id>roberto@leibman.net</id>\n          <name>Roberto Leibman</name>\n        </developer>\n      </developers>\n)\n\nlazy val SuiVersion   = \"0.68.5\"\nlazy val EuiVersion   = \"0.6.1\"\nlazy val MuiVersion   = \"0.20.0\"\nlazy val reactVersion = \"15.5.4\"\n\nlazy val npmGenSettings = Seq(\n  useYarn := true,\n  npmDependencies.in(Compile) := Seq(\n    \"elemental\"         -> EuiVersion,\n    \"material-ui\"       -> MuiVersion,\n    \"semantic-ui-react\" -> SuiVersion\n  )\n)\n\nlazy val npmSettings = Seq(\n  useYarn := true,\n  npmDependencies.in(Compile) := Seq(\n    \"elemental\"                         -> EuiVersion,\n    \"highlight.js\"                      -> \"9.9.0\",\n    \"material-ui\"                       -> MuiVersion,\n    \"react\"                             -> reactVersion,\n    \"react-dom\"                         -> reactVersion,\n    \"react-addons-create-fragment\"      -> \"15.6.2\",\n    \"react-addons-css-transition-group\" -> \"15.6.2\",\n    \"react-addons-pure-render-mixin\"    -> \"15.6.2\",\n    \"react-addons-transition-group\"     -> \"15.6.2\",\n    \"react-addons-update\"               -> \"15.6.2\",\n    \"react-geomicons\"                   -> \"2.1.0\",\n    \"react-infinite\"                    -> \"0.12.1\",\n    \"react-select\"                      -> \"1.2.1\",\n    \"react-slick\"                       -> \"0.16.0\",\n    \"react-spinner\"                     -> \"0.2.7\",\n    \"react-split-pane\"                  -> \"0.1.74\",\n    \"react-tagsinput\"                   -> \"3.16.1\",\n    \"react-tap-event-plugin\"            -> \"2.0.1\",\n    \"semantic-ui-react\"                 -> SuiVersion,\n    \"svg-loader\"                        -> \"0.0.2\"\n  )\n)\n\nlazy val npmDevSettings = {\n  val deps = Seq(\n    \"css-loader\"           -> \"0.28.9\",\n    \"expose-loader\"        -> \"0.7.4\",\n    \"file-loader\"          -> \"1.1.6\",\n    \"gulp-decompress\"      -> \"2.0.1\",\n    \"imagemin\"             -> \"5.3.1\",\n    \"image-webpack-loader\" -> \"4.0.0\",\n    \"less\"                 -> \"2.7.3\",\n    \"less-loader\"          -> \"4.0.5\",\n    \"lodash\"               -> \"4.17.4\",\n    \"node-libs-browser\"    -> \"2.1.0\",\n    \"react-hot-loader\"     -> \"3.1.3\",\n    \"style-loader\"         -> \"0.19.0\",\n    \"url-loader\"           -> \"0.6.2\",\n    \"webpack\"              -> \"2.6.1\",\n    \"webpack-dev-server\"   -> \"2.11.1\"\n  )\n\n  Seq(\n    npmDevDependencies in Test := deps,\n    npmDevDependencies in Compile := deps\n  )\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/DefaultSelect.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.component.Scala.Unmounted\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject DefaultSelect {\n\n  class Backend(t: BackendScope[Props, Unit]) {\n\n    def onChange(P: Props)(e: ReactEventFromInput) =\n      P.onChange(e.target.value)\n\n    def render(P: Props) = {\n      <.div(\n        <.label(<.strong(P.label)),\n        <.select(^.paddingLeft := \"5px\",\n                 ^.id := \"reactselect\",\n                 ^.value := P.value,\n                 ^.onChange ==> onChange(P))(\n          P.options.map(item => <.option(item)).toTagMod\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"DefaultSelect\")\n    .stateless\n    .renderBackend[Backend]\n    .build\n\n  case class Props(label: String,\n                   options: List[String],\n                   value: String,\n                   onChange: String => Callback)\n\n  def apply(key: js.UndefOr[Key] = js.undefined,\n            label: String,\n            options: List[String],\n            value: String,\n            onChange: String => Callback): Unmounted[Props, Unit, Backend] = {\n    val props = Props(label, options, value, onChange)\n    key.fold(component(props))(key => component.withKey(key)(props))\n  }\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/GoogleMap.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport chandu0101.scalajs.react.components.fascades._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom.{Event, document, html}\n\nimport scala.scalajs.js\nimport scala.scalajs.js.Dynamic.{global => g}\n\nobject GoogleMap {\n\n  def parameterizeUrl(url: String, parameters: Map[String, Any]): String = {\n    require(url != null, \"Missing argument 'url'.\")\n    require(parameters != null, \"Missing argument 'parameters'.\")\n\n    parameters.foldLeft(url)((base, kv) =>\n      base ++ {\n        if (base.contains(\"?\")) \"&\" else \"?\"\n      } ++ kv._1 ++ \"=\" + kv._2)\n  }\n\n  case class State(mapObjects: Option[(GMap, GInfoWindow)], markers: List[GMarker])\n\n  class Backend(t: BackendScope[Props, State]) {\n    def loadScript(P: Props): Callback =\n      if (js.isUndefined(g.google) || js.isUndefined(g.google.maps))\n        Callback {\n          val script = document.createElement(\"script\").asInstanceOf[html.Script]\n          script.`type` = \"text/javascript\"\n          script.src = parameterizeUrl(P.url, Map(\"callback\" -> \"gmapinit\"))\n          document.body.appendChild(script)\n          g.gmapinit = initialize(P).toJsFn\n        } else initialize(P)\n\n    def initialize(P: Props): Callback =\n      t.root.getDOMNode\n        .flatMap(\n          node =>\n            t.modState(\n              _.copy(mapObjects = Some(\n                (new GMap(node, MapOptions(P.center, P.zoom).toGMapOptions), new GInfoWindow))),\n              callback = updateMap(P)\n          ))\n\n    def updateMap(P: Props): Callback =\n      t.modState(\n        S =>\n          S.mapObjects.fold(S) {\n            case (gmap, infoWindow) =>\n              gmap.setCenter(P.center.toGlatlng)\n              S.markers.foreach(_.setMap(null))\n              val newMarkers = P.markers.map(prepareMarker(infoWindow, gmap)).toList\n              S.copy(markers = newMarkers)\n        }\n      )\n\n    private def prepareMarker(infowindow: GInfoWindow, map: GMap)(m: Marker) = {\n      val marker = new GMarker(m.toGMarker(map))\n      if (!m.content.isEmpty) {\n        new GAddListener(\n          marker,\n          \"click\",\n          (e: Event) => {\n            infowindow.setContent(m.content)\n            infowindow.open(map, marker)\n          }\n        )\n      }\n      marker\n    }\n\n    def render(P: Props) = <.div(^.height := P.height, ^.width := P.width)\n  }\n\n  case class Props(width: String,\n                   height: String,\n                   center: LatLng,\n                   zoom: Int,\n                   markers: Seq[Marker],\n                   url: String)\n\n  val component = ScalaComponent\n    .builder[Props](\"googleMap\")\n    .initialState(State(None, Nil))\n    .renderBackend[Backend]\n    .componentWillReceiveProps { wrp =>\n      wrp.backend.updateMap(wrp.nextProps)\n    }\n    .componentDidMount($ => $.backend.loadScript($.props))\n    .componentWillUnmount($ => Callback($.state.markers.foreach(new GClearInstanceListeners(_))))\n    .build\n\n  /**\n    *\n    * @param width width of map\n    * @param height height of map\n    * @param center center position(lat,lng) for map\n    * @param zoom zoom value\n    * @param markers markers for the map\n    * @param url url to get googlemap api, by default it uses https://maps.googleapis.com/maps/api/js you can override if you want.\n    * @return\n    */\n  def apply(\n      width: String = \"500px\",\n      height: String = \"500px\",\n      center: LatLng,\n      zoom: Int = 4,\n      markers: List[Marker] = Nil,\n      url: String = \"https://maps.googleapis.com/maps/api/js\"\n  ) =\n    component(Props(width, height, center, zoom, markers, url))\n\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/Implicits.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport japgolly.scalajs.react._\n\nimport scala.scalajs.js\n\n// todo: figure out if we should keep these\nprivate[components] object Implicits {\n\n  /* this works here, but not in the general case!\n   * (see https://github.com/scala-js/scala-js/pull/2070 )\n   */\n  implicit final class UCB[R](private val uc: js.UndefOr[CallbackTo[R]]) extends AnyVal {\n    @inline def asCbo: CallbackOption[R] =\n      CallbackOption.liftOption(uc.toOption.map(_.runNow()))\n  }\n\n  implicit final class UF1CB[T1, R](private val uc: js.UndefOr[T1 => CallbackTo[R]])\n      extends AnyVal {\n    @inline def asCbo(t1: T1): CallbackOption[R] =\n      CallbackOption.liftOptionLike(uc).flatMap(_.apply(t1).toCBO)\n  }\n\n  implicit final class UF2CB[T1, T2, R](private val uc: js.UndefOr[(T1, T2) => CallbackTo[R]])\n      extends AnyVal {\n    @inline def asCbo(t1: T1, t2: T2): CallbackOption[R] =\n      CallbackOption.liftOptionLike(uc).flatMap(_.apply(t1, t2).toCBO)\n  }\n\n  implicit final class UF3CB[T1, T2, T3, R](\n      private val uc: js.UndefOr[(T1, T2, T3) => CallbackTo[R]])\n      extends AnyVal {\n    @inline def asCbo(t1: T1, t2: T2, t3: T3): CallbackOption[R] =\n      CallbackOption.liftOptionLike(uc).flatMap(_.apply(t1, t2, t3).toCBO)\n  }\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/Pager.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ScalaCssReact._\n\nobject Pager {\n\n  val cssSettings = scalacss.devOrProdDefaults\n  import cssSettings._\n\n  class Style extends StyleSheet.Inline {\n    import dsl._\n\n    val pager = style(\n      margin :=! \"15px 0\",\n      unsafeChild(\"a\")(\n        display.inlineBlock,\n        padding :=! \"5px 14px\",\n        backgroundColor :=! \"#EF5350\",\n        border :=! \"1px solid transparent\",\n        borderRadius :=! \"2px\",\n        cursor.pointer,\n        color :=! \"#ffffff\",\n        fontWeight.bold,\n        boxShadow := \"0 1px 3px 0 rgba(0, 0, 0, 0.12), 0 1px 2px 0 rgba(0, 0, 0, 0.24)\",\n        &.hover.apply(\n          textDecoration := \"none\",\n          backgroundColor :=! \"#ff1034\"\n        ),\n        &.focus.apply(\n          textDecoration := \"none\",\n          backgroundColor :=! \"#ff1034\"\n        )\n      )\n    )\n  }\n  case class Backend(t: BackendScope[Props, Unit]) {\n    def render(P: Props) = {\n      <.div(P.style.pager)(\n        <.a(\n          ^.onClick --> P.previousClick,\n          ^.float := \"left\",\n          \"← Previous\"\n        ).when(P.offset > 0),\n        <.a(\n          ^.onClick --> P.nextClick,\n          ^.float := \"right\",\n          \"Next →\"\n        ).when(P.offset + P.itemsPerPage < P.totalItems)\n      )\n    }\n  }\n  object DefaultStyle extends Style\n\n  val component = ScalaComponent\n    .builder[Props](\"Pager\")\n    .renderBackend[Backend]\n    .build\n\n  case class Props(itemsPerPage: Int,\n                   totalItems: Int,\n                   offset: Int,\n                   nextClick: Callback,\n                   previousClick: Callback,\n                   style: Style)\n\n  def apply(itemsPerPage: Int,\n            totalItems: Int,\n            offset: Int,\n            nextClick: Callback,\n            previousClick: Callback,\n            style: Style = DefaultStyle) = {\n    component(Props(itemsPerPage, totalItems, offset, nextClick, previousClick, style))\n  }\n\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/ReactDraggable.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.Reusability\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom\nimport org.scalajs.dom._\n\nimport scala.scalajs.js\nimport scalacss.ScalaCssReact._\nimport Implicits._\n\ncase class RPoint(x: Int, y: Int)\ncase class RGrid(width: Int, height: Int)\ncase class RElementPosition(element: Element,\n                            top: Int = 0,\n                            left: Int = 0,\n                            right: Int = 0,\n                            bottom: Int = 0)\ncase class ClientRect(top: Double, left: Double)\n\nobject ReactDraggable {\n\n  val cssSettings = scalacss.devOrProdDefaults\n  import cssSettings._\n\n  object Style extends StyleSheet.Inline {\n    import dsl._\n    val draggable       = style(position.relative)\n    val draggableActive = style(userSelect := \"none\")\n  }\n\n  import RCustomStyles._\n  type CssClassType = Map[String, Boolean]\n\n  object DomUtil {\n\n    /**\n      *  https://developer.mozilla.org/en-US/docs/Web/API/Element.matches#Browser_compatibility\n      * @param element dom element\n      * @param selector css selector\n      */\n    def matchesSelector(element: js.Dynamic)(selector: String): Boolean = {\n      val funcName = Stream(\n        \"matches\",\n        \"webkitMatchesSelector\",\n        \"mozMatchesSelector\",\n        \"msMatchesSelector\",\n        \"oMatchesSelector\"\n      ).filter(name => !js.isUndefined(element.selectDynamic(name))).head\n      element.selectDynamic(funcName).call(element, selector).asInstanceOf[Boolean]\n    }\n\n    /**\n      *  onTouchStart - / works on most browsers\n      *  onmsgesturechange - works on ie10 on ms surface\n      * @return whether device is touch enabled or not\n      */\n    def isTouchDevice =\n      dom.window.hasOwnProperty(\"ontouchstart\") || dom.window.hasOwnProperty(\"onmsgesturechange\")\n\n    def dragEventFor(e: Event, name: String) = name match {\n      case \"start\" => if (e.`type`.contains(\"touch\")) \"touchstart\" else \"mousedown\"\n      case \"move\"  => if (e.`type`.contains(\"touch\")) \"touchmove\" else \"mousemove\"\n      case \"end\"   => if (e.`type`.contains(\"touch\")) \"touchend\" else \"mouseup\"\n    }\n\n    def getControlPosition(e: Event): RPoint =\n      if (e.`type`.contains(\"touch\")) {\n        val position = e.asInstanceOf[TouchEvent].touches(0)\n        RPoint(position.clientX.toInt, position.clientY.toInt)\n      } else {\n        val position = e.asInstanceOf[MouseEvent]\n        RPoint(position.clientX.toInt, position.clientY.toInt)\n      }\n\n    def isLeftClick(e: Event) =\n      e.`type` == \"touchstart\" || e.asInstanceOf[MouseEvent].button == 0\n\n  }\n\n  case class Props(\n      cancel: js.UndefOr[String],\n      onDrag: js.UndefOr[(Event, RElementPosition) => Callback],\n      useCSSTransforms: Boolean,\n      clsNames: CssClassType,\n      ref: js.UndefOr[String],\n      moveOnStartChange: Boolean,\n      grid: js.UndefOr[RGrid],\n      key: js.Any,\n      zIndex: Int,\n      axis: String,\n      onStop: js.UndefOr[(Event, RElementPosition) => Callback],\n      start: RPoint,\n      onStart: js.UndefOr[(Event, RElementPosition) => Callback],\n      onMouseDown: js.UndefOr[Event => Callback],\n      handle: js.UndefOr[String],\n      minConstraints: js.UndefOr[RGrid],\n      maxConstraints: js.UndefOr[RGrid]\n  )\n\n  /**\n    * @param dragging whether or not currently dragging\n    * @param startX Start left of t.getDOmNode()\n    * @param startY Start top of t.getDOmNode()\n    * @param offsetX Offset between start left and mouse left\n    * @param offsetY Offset between start top and mouse top\n    * @param clientX Current left of this.getDOMNode\n    * @param clientY Current top of this.getDOMNode\n    */\n  case class State(\n      dragging: Boolean,\n      startX: Int,\n      startY: Int,\n      offsetX: Int,\n      offsetY: Int,\n      clientX: Int,\n      clientY: Int,\n      stopListening: js.UndefOr[Callback]\n  )\n\n  implicit val r0 = Reusability.byRef[Props]\n  implicit val r1 = Reusability.byRef[State]\n\n  class Backend(t: BackendScope[Props, State]) {\n\n    def pos(S: State) =\n      t.root.getDOMNode.map(node => RElementPosition(node, top = S.clientY, left = S.clientX))\n\n    def handleDragStart(props: Props)(e: Event): Callback = {\n      val moveEventType = DomUtil.dragEventFor(e, \"move\")\n      val endEventType  = DomUtil.dragEventFor(e, \"end\")\n      val dragPoint     = DomUtil.getControlPosition(e)\n\n      val mouseDown: Callback = props.onMouseDown.fold(Callback.empty)(fn => fn(e))\n\n      val onStart: Callback = {\n        t.state.flatMap(S => {\n          pos(S).flatMap(pos => props.onStart.asCbo(e, pos))\n        })\n      }\n\n      val startDrag = t.modState { S =>\n        val u1 = Events.register(dom.window, moveEventType, handleDrag(props))\n        val u2 = Events.register(dom.window, endEventType, handleDragEnd(props))\n\n        S.copy(\n          dragging = true,\n          offsetX = dragPoint.x.toInt - S.clientX,\n          offsetY = dragPoint.y.toInt - S.clientY,\n          stopListening = u1 >> u2\n        )\n      }\n\n      val matches: Boolean = {\n        val matchesTarget = DomUtil.matchesSelector(e.target.asInstanceOf[js.Dynamic]) _\n        props.handle.fold(true)(matchesTarget) && props.cancel.fold(true)(matchesTarget)\n      }\n\n      mouseDown << (onStart >> startDrag).when(DomUtil.isLeftClick(e) && matches).void\n    }\n\n    def handleDrag(props: Props)(e: Event): Callback = {\n      val dragPoint = DomUtil.getControlPosition(e)\n\n      val c1 = t.modState { S =>\n        // calculate top and left\n        var clientX: Int = S.startX + (dragPoint.x - S.offsetX)\n        var clientY: Int = S.startY + (dragPoint.y - S.offsetY)\n\n        // Snap to grid if prop has been provided\n        props.grid.foreach { (grid: RGrid) =>\n          val directionX = if (clientX < S.clientX) -1 else 1\n          val directionY = if (clientY < S.clientY) -1 else 1\n\n          clientX =\n            if (math.abs(clientX - S.clientX) >= grid.width)\n              S.clientX + (grid.width * directionX)\n            else S.clientX\n          clientY =\n            if (math.abs(clientY - S.clientY) >= grid.height)\n              S.clientY + (grid.height * directionY)\n            else S.clientY\n        }\n\n        //min/max contraints\n        props.minConstraints.foreach { (min: RGrid) =>\n          clientX = math.max(min.width, clientX)\n          clientY = math.max(min.height, clientY)\n        }\n\n        props.maxConstraints.foreach { (max: RGrid) =>\n          clientX = math.min(max.width, clientX)\n          clientY = math.min(max.height, clientY)\n        }\n\n        // Update top and left\n        S.copy(clientX = clientX.toInt, clientY = clientY.toInt)\n      }\n\n      //call event handler\n      val c2 = t.state.flatMap(S => {\n        pos(S).flatMap(pos => props.onDrag.asCbo(e, pos))\n      })\n\n      c1 >> c2\n    }\n\n    def handleDragEnd(props: Props)(e: Event): Callback = {\n      val unregister: Callback =\n        t.state.flatMap(_.stopListening.asCbo)\n      val onStop: Callback =\n        t.state.flatMap(S => {\n          pos(S).flatMap(pos => props.onStop.asCbo(e, pos))\n        })\n      val stopDragging: Callback =\n        t.modState(_.copy(dragging = false, stopListening = js.undefined))\n\n      unregister >> onStop >> stopDragging\n    }\n\n    def canDragY(props: Props): Boolean =\n      props.axis == \"both\" || props.axis == \"y\"\n\n    def canDragX(props: Props): Boolean =\n      props.axis == \"both\" || props.axis == \"x\"\n\n    private val transforms = Seq(^.transform, mozTransform, WebkitTransform, msTransform)\n\n    def positionToCSSTransform(left: Int, top: Int): TagMod =\n      (transforms map (_ := s\"translate(${left}px, ${top}px)\")).toTagMod\n\n    def render(props: Props, S: State, C: PropsChildren) = {\n      val topValue: Int =\n        if (canDragY(props)) S.clientY else S.startY\n      val leftValue: Int =\n        if (canDragX(props)) S.clientX else S.startX\n      val stl: TagMod =\n        if (props.useCSSTransforms) positionToCSSTransform(leftValue, topValue)\n        else TagMod(^.top := topValue.px, ^.left := leftValue.px)\n\n      implicit def rawEventCallbackToReactEventCallback(\n          fn: Event => Callback): ReactEvent => Callback = { e =>\n        fn(e.nativeEvent)\n      }\n\n      <.div(\n        Style.draggable,\n        Style.draggableActive.when(S.dragging),\n        stl,\n        ^.onMouseDown ==> handleDragStart(props),\n        ^.onTouchStart ==> handleDragStart(props),\n        ^.onMouseUp ==> handleDragEnd(props),\n        ^.onTouchEnd ==> handleDragEnd(props)\n      )(C)\n    }\n  }\n\n  def newStateFrom(props: Props): State =\n    State(\n      dragging = false,\n      startX = 0,\n      startY = 0,\n      clientX = props.start.x.toInt,\n      clientY = props.start.y.toInt,\n      offsetX = 0,\n      offsetY = 0,\n      stopListening = js.undefined\n    )\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactDraggable\")\n    .initialStateFromProps(newStateFrom)\n    .renderBackendWithChildren[Backend]\n    .componentWillReceiveProps {\n      case componentWillReceiveProps =>\n        componentWillReceiveProps\n          .setState(newStateFrom(componentWillReceiveProps.nextProps))\n          .when(componentWillReceiveProps.nextProps.moveOnStartChange)\n          .void\n    }\n    .configure(Reusability.shouldComponentUpdate)\n    .componentWillUnmount($ => $.state.stopListening.getOrElse(Callback.empty))\n    .build\n\n  /**\n    *\n    * @param cancel specifies a selector to be used to prevent drag initialization.\n    * @param onDrag  Called while dragging\n    * @param useCSSTransforms if true will place the element using translate(x, y)\n    *                         rather than CSS top/left.\n    *                         This generally gives better performance, and is useful in combination with\n    *                         other layout systems that use translate(), such as react-grid-layout.\n    * @param clsNames css class names map\n    * @param ref ref for this component\n    * @param moveOnStartChange tells the Draggable element to reset its position\n    *                          if the `start` parameters are changed. By default, if the `start`\n    *                          parameters change, the Draggable element still remains where it started\n    *                          or was dragged to.\n    * @param grid specifies the x and y that dragging should snap to.\n    * @param key key for this react component\n    * @param zIndex specifies the zIndex to use while dragging.\n    * @param axis determines which axis the draggable can move.(both,x,y)\n    * @param onStop Called when dragging stops\n    * @param start specifies the x and y that the dragged item should start at\n    * @param onStart Called when dragging starts.\n    * @param onMouseDown  * A workaround option which can be passed if onMouseDown needs to be accessed,\n    *                     since it'll always be blocked (due to that there's internal use of onMouseDown)\n    * @param handle specifies a selector to be used as the handle that initiates drag.\n    * @param children\n    * @return\n    */\n  def apply(\n      cancel: js.UndefOr[String] = js.undefined,\n      onDrag: js.UndefOr[(Event, RElementPosition) => Callback] = js.undefined,\n      useCSSTransforms: Boolean = false,\n      clsNames: CssClassType = Map(),\n      ref: js.UndefOr[String] = js.undefined,\n      moveOnStartChange: Boolean = false,\n      grid: js.UndefOr[RGrid] = js.undefined,\n      key: js.Any = {},\n      zIndex: Int = 0,\n      axis: String = \"both\",\n      onStop: js.UndefOr[(Event, RElementPosition) => Callback] = js.undefined,\n      start: RPoint = RPoint(0, 0),\n      onStart: js.UndefOr[(Event, RElementPosition) => Callback] = js.undefined,\n      onMouseDown: js.UndefOr[Event => Callback] = js.undefined,\n      handle: js.UndefOr[String] = js.undefined,\n      minConstraints: js.UndefOr[RGrid] = js.undefined,\n      maxConstraints: js.UndefOr[RGrid] = js.undefined\n  )(children: VdomNode) = {\n    val props = Props(\n      cancel = cancel,\n      onDrag = onDrag,\n      useCSSTransforms = useCSSTransforms,\n      clsNames = clsNames,\n      ref = ref,\n      moveOnStartChange = moveOnStartChange,\n      grid = grid,\n      key = key,\n      zIndex = zIndex,\n      axis = axis,\n      onStop = onStop,\n      start = start,\n      onStart = onStart,\n      onMouseDown = onMouseDown,\n      handle = handle,\n      minConstraints = minConstraints,\n      maxConstraints = maxConstraints\n    )\n    component(props)(children)\n  }\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/ReactGeomIcon.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport chandu0101.macros.tojs.JSMacro\nimport japgolly.scalajs.react._\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.JSImport\n\n@JSImport(\"react-geomicons\", JSImport.Default) @js.native\nobject ReactGeomIconRequire extends js.Any\n\ncase class ReactGeomIcon(\n    name: IconName,\n    height: js.UndefOr[String] = js.undefined,\n    ref: js.UndefOr[String] = js.undefined,\n    key: js.UndefOr[String] = js.undefined,\n    fill: js.UndefOr[String] = js.undefined,\n    width: js.UndefOr[String] = js.undefined\n) {\n\n  def apply() = {\n    val props = JSMacro[ReactGeomIcon](this)\n    val f     = JsComponent[js.Object, Children.None, Null](ReactGeomIconRequire)\n    f(props)\n  }\n}\n\nclass IconName private (val value: String) extends AnyVal\n\nobject IconName {\n  val BOOKMARK       = new IconName(\"bookmark\")\n  val CALENDAR       = new IconName(\"calendar\")\n  val CAMERA         = new IconName(\"camera\")\n  val CHAT           = new IconName(\"chat\")\n  val CHECK          = new IconName(\"check\")\n  val CHEVRONDOWN    = new IconName(\"chevronDown\")\n  val CHEVRONLEFT    = new IconName(\"chevronLeft\")\n  val CHEVRONRIGHT   = new IconName(\"chevronRight\")\n  val CHEVRONUP      = new IconName(\"chevronUp\")\n  val CLOCK          = new IconName(\"clock\")\n  val CLOSE          = new IconName(\"close\")\n  val CLOUD          = new IconName(\"cloud\")\n  val COG            = new IconName(\"cog\")\n  val COMPOSE        = new IconName(\"compose\")\n  val DRIBBBLE       = new IconName(\"dribbble\")\n  val EXPAND         = new IconName(\"expand\")\n  val EXTERNAL       = new IconName(\"external\")\n  val FACEBOOK       = new IconName(\"facebook\")\n  val FILE           = new IconName(\"file\")\n  val FOLDER         = new IconName(\"folder\")\n  val GEOLOCATION    = new IconName(\"geolocation\")\n  val GITHUB         = new IconName(\"github\")\n  val GRID           = new IconName(\"grid\")\n  val HEART          = new IconName(\"heart\")\n  val HOME           = new IconName(\"home\")\n  val INFO           = new IconName(\"info\")\n  val LINK           = new IconName(\"link\")\n  val LIST           = new IconName(\"list\")\n  val LOCK           = new IconName(\"lock\")\n  val MAIL           = new IconName(\"mail\")\n  val MUSIC_NOTE     = new IconName(\"musicNote\")\n  val NEXT           = new IconName(\"next\")\n  val NO             = new IconName(\"no\")\n  val PAUSE          = new IconName(\"pause\")\n  val PICTURE        = new IconName(\"picture\")\n  val PIN            = new IconName(\"pin\")\n  val PLAY           = new IconName(\"play\")\n  val PREVIOUS       = new IconName(\"previous\")\n  val REFRESH        = new IconName(\"refresh\")\n  val REPOST         = new IconName(\"repost\")\n  val SEARCH         = new IconName(\"search\")\n  val SHOPPING_CART  = new IconName(\"shoppingCart\")\n  val SKULL          = new IconName(\"skull\")\n  val SPEAKER        = new IconName(\"speaker\")\n  val SPEAKER_VOLUME = new IconName(\"speakerVolume\")\n  val STAR           = new IconName(\"star\")\n  val TAG            = new IconName(\"tag\")\n  val TRASH          = new IconName(\"trash\")\n  val TRIANGLE_DOWN  = new IconName(\"triangleDown\")\n  val TRIANGLE_LEFT  = new IconName(\"triangleLeft\")\n  val TRIANGLE_RIGHT = new IconName(\"triangleRight\")\n  val TRIANGLE_UP    = new IconName(\"triangleUp\")\n  val TWITTER        = new IconName(\"twitter\")\n  val USER           = new IconName(\"user\")\n  val VIDEO          = new IconName(\"video\")\n  val WARNING        = new IconName(\"warning\")\n\n  def newName(name: String) = new IconName(name)\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/ReactInfinite.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport chandu0101.macros.tojs.JSMacro\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.raw._\nimport japgolly.scalajs.react.vdom.VdomElement\nimport org.scalajs.dom.raw.HTMLElement\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.JSImport\n\n@JSImport(\"react-infinite\", JSImport.Default) @js.native\nobject ReactInfiniteRequire extends js.Any\n\ncase class ReactInfinite(\n    handleScroll: js.UndefOr[HTMLElement => Callback] = js.undefined,\n    preloadAdditionalHeight: js.UndefOr[Int] = js.undefined,\n    isInfiniteLoading: js.UndefOr[Boolean] = js.undefined,\n    preloadBatchSize: js.UndefOr[Int] = js.undefined,\n    containerHeight: Int,\n    ref: js.UndefOr[ReactInfiniteM => Unit] = js.undefined,\n    loadingSpinnerDelegate: js.UndefOr[ReactElement] = js.undefined,\n    timeScrollStateLastsForAfterUserScrolls: js.UndefOr[Int] = js.undefined,\n    elementHeight: Double,\n    key: js.UndefOr[String] = js.undefined,\n    className: js.UndefOr[String] = js.undefined,\n    infiniteLoadBeginBottomOffset: js.UndefOr[Int] = js.undefined,\n    onInfiniteLoad: js.UndefOr[Callback] = js.undefined\n) {\n\n  def apply(children: Seq[VdomElement]) = {\n    val props = JSMacro[ReactInfinite](this)\n    val f     = JsComponent[js.Object, Children.Varargs, Null](ReactInfiniteRequire)\n    f(props)(children: _*)\n  }\n}\n\n@js.native\ntrait ReactInfiniteM extends js.Object {\n  def getScrollTop(): Double = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/ReactListView.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport scalacss.ProdDefaults._\nimport scalacss.ScalaCssReact._\nimport Implicits._\n\nobject ReactListView {\n\n  class Style extends StyleSheet.Inline {\n    import dsl._\n\n    val listGroup = style(\n      marginBottom(20.px),\n      paddingLeft.`0`,\n      &.firstChild.lastChild(\n        borderBottomLeftRadius(4 px),\n        borderBottomRightRadius(4 px)\n      )\n    )\n\n    val listItem = styleF.bool(\n      selected =>\n        styleS(\n          position.relative,\n          display.block,\n          padding(v = 10.px, h = 15.px),\n          border :=! \"1px solid #ecf0f1\",\n          cursor.pointer,\n          mixinIfElse(selected)(\n            color.white,\n            fontWeight._500,\n            backgroundColor :=! \"#146699\"\n          )(\n            backgroundColor.white,\n            &.hover(\n              color :=! \"#555555\",\n              backgroundColor :=! \"#ecf0f1\"\n            )\n          )\n      ))\n\n  }\n\n  object DefaultStyle extends Style\n\n  case class State(filterText: String, selectedItem: String)\n\n  class Backend(t: BackendScope[Props, State]) {\n\n    def onTextChange(text: String): Callback =\n      t.modState(_.copy(filterText = text))\n\n    def onItemSelect(onItemSelect: js.UndefOr[String => Callback])(value: String): Callback = {\n      val setSelected = t.modState(_.copy(selectedItem = value))\n      val onSelect    = onItemSelect.asCbo(value)\n\n      setSelected >> onSelect\n    }\n\n    def render(P: Props, S: State) = {\n      val fItems =\n        P.items.filter(item => item.toString.toLowerCase.contains(S.filterText.toLowerCase))\n      <.div(\n        ReactSearchBox(onTextChange = onTextChange).when(P.showSearchBox),\n        <.ul(\n          P.style.listGroup,\n          fItems.map { item =>\n            val selected = item.toString == S.selectedItem\n            <.li(\n              P.style.listItem(selected),\n              ^.onClick --> onItemSelect(P.onItemSelect)(item.toString),\n              item\n            )\n          }.toTagMod\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactListView\")\n    .initialState(State(filterText = \"\", selectedItem = \"\"))\n    .renderBackend[Backend]\n    .build\n\n  case class Props(\n      items: List[String],\n      onItemSelect: js.UndefOr[String => Callback],\n      showSearchBox: Boolean,\n      style: Style\n  )\n\n  def apply(\n      items: List[String],\n      onItemSelect: js.UndefOr[String => Callback] = js.undefined,\n      showSearchBox: Boolean = false,\n      style: Style = DefaultStyle,\n      ref: js.UndefOr[String] = js.undefined,\n      key: js.Any = {}\n  ) =\n    component /*.set(key, ref)*/ (Props(items, onItemSelect, showSearchBox, style))\n\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/ReactPopOver.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom\nimport org.scalajs.dom.html\n\nobject ReactPopOver {\n  import RCustomStyles._\n\n  object DomUtil {\n    def offset(element: html.Element) = {\n      val rect       = element.getBoundingClientRect()\n      var scrollTop  = 0.0\n      var scrollLeft = 0.0\n      if (dom.document.body.scrollTop > 0) {\n        scrollTop = dom.document.body.scrollTop\n        scrollLeft = dom.document.body.scrollLeft\n      } else if (dom.document.documentElement.scrollTop > 0) { // for firefox\n        scrollTop = dom.document.documentElement.scrollTop\n        scrollLeft = dom.document.documentElement.scrollLeft\n      }\n      ClientRect(rect.top + scrollTop, rect.left + scrollLeft)\n    }\n  }\n\n  trait Style {\n    def popover: TagMod = TagMod(\n      ^.position := \"absolute\",\n      ^.top := \"0\",\n      ^.left := \"-100%\",\n      ^.zIndex := \"1060\",\n      ^.maxWidth := \"500px\",\n      ^.padding := \"1px\",\n      ^.fontSize := \"15px\",\n      ^.fontWeight := \"normal\",\n      ^.lineHeight := \"1.42857143\",\n      ^.textAlign := \"left\",\n      ^.backgroundColor := \"white\",\n      ^.borderRadius := \"6px\",\n      ^.border := \"1px solid #cccccc\",\n      ^.whiteSpace := \"normal\",\n      backgroundClipPreFixer(\"padding-box\"),\n      boxShadowPreFixer(\"0 5px 10px rgba(0, 0, 0, 0.2)\")\n    )\n\n    def backgroundClipPreFixer(value: String) =\n      TagMod(\n        ^.backgroundClip := value,\n        WebkitBackgroundClip := value\n      )\n\n    def boxShadowPreFixer(value: String) =\n      TagMod(\n        ^.boxShadow := value,\n        WebkitBoxShadow := value\n      )\n\n    def popoverTop = TagMod(^.marginTop := \"-10px\")\n\n    def popoverLeft = TagMod(^.marginLeft := \"-10px\")\n\n    def popoverRight = TagMod(^.marginLeft := \"10px\")\n\n    def popoverBottom = TagMod(^.marginTop := \"10px\")\n\n    def popoverTitle =\n      TagMod(^.margin := \"0\",\n             ^.padding := \"8px 14px\",\n             ^.fontSize := \"15px\",\n             ^.backgroundColor := \"#f7f7f7\",\n             ^.borderBottom := \"1px solid #ebebeb\",\n             ^.borderRadius := \"5px 5px 0 0\")\n\n    def popoverContent = TagMod(^.padding := \"9px 14px\")\n\n    val displayBlock = ^.display := \"block\"\n\n    def popoverArrow = TagMod(\n      ^.position := \"absolute\",\n      displayBlock,\n      ^.width := \"0\",\n      ^.height := \"0\",\n      ^.border := \"solid transparent\",\n      ^.borderWidth := \"11px\"\n    )\n\n    def popoverArrowAfter = TagMod(\n      ^.position := \"absolute\",\n      displayBlock,\n      ^.width := \"0\",\n      ^.height := \"0\",\n      ^.border := \"solid transparent\",\n      ^.borderWidth := \"10px\"\n    )\n\n    def popoverTopArrow = TagMod(\n      ^.left := \"50%\",\n      ^.marginLeft := \"-11px\",\n      ^.borderBottomWidth := \"0\",\n      ^.borderTopColor := \"#999999\",\n      ^.bottom := \"-11px\"\n    )\n\n    def popoverTopArrowAfter = TagMod(\n      ^.marginLeft := \"-10px\",\n      ^.borderBottomWidth := \"0\",\n      ^.borderTopColor := \"#ffffff\",\n      ^.bottom := \"1px\"\n    )\n\n    def popoverRightArrow = TagMod(\n      ^.top := \"50%\",\n      ^.left := \"-11px\",\n      ^.marginTop := \"-11px\",\n      ^.borderLeftWidth := \"0\",\n      ^.borderRightColor := \"#999999\",\n      ^.bottom := \"-11px\"\n    )\n\n    def popoverRightArrowAfter = TagMod(\n      ^.left := \"1px\",\n      ^.borderLeftWidth := \"0\",\n      ^.borderRightColor := \"#ffffff\",\n      ^.bottom := \"-10px\"\n    )\n\n    def popoverBottomArrow = TagMod(\n      ^.left := \"50%\",\n      ^.marginLeft := \"-11px\",\n      ^.borderTopWidth := \"0\",\n      ^.borderBottomColor := \"#999999\",\n      ^.top := \"-11px\"\n    )\n\n    def popoverBottomArrowAfter = TagMod(\n      ^.top := \"1px\",\n      ^.marginLeft := \"-10px\",\n      ^.borderTopWidth := \"0\",\n      ^.borderBottomColor := \"#ffffff\"\n    )\n\n    def popoverLeftArrow = TagMod(\n      ^.top := \"50%\",\n      ^.right := \"-11px\",\n      ^.marginTop := \"-11px\",\n      ^.borderRightWidth := \"0\",\n      ^.borderLeftColor := \"#999999\"\n    )\n\n    def popoverLeftArrowAfter = TagMod(\n      ^.right := \"1px\",\n      ^.borderRightWidth := \"0\",\n      ^.borderLeftColor := \"#ffffff\",\n      ^.bottom := \"-10px\"\n    )\n  }\n\n  case class State(open: Boolean, top: Double = 0, left: Double = 0)\n\n  class Backend($ : BackendScope[Props, State]) {\n\n    def toggle(node: html.Element): Callback =\n      ($.props zip $.state).flatMap {\n        case (p, s) => if (s.open) hide else show(getPosition(p)(node))\n      }\n\n    private def show(position: ClientRect) =\n      $.modState(_.copy(open = true, top = position.top, left = position.left))\n\n    private val hide = $.modState(_.copy(open = false))\n\n    def getPosition(P: Props)(node: html.Element): ClientRect = {\n      val offset = DomUtil.offset(node)\n      val height = node.offsetHeight\n      val width  = node.offsetWidth\n\n      val popoverHeight = $.getDOMNode.map(_.domAsHtml.offsetHeight).runNow()\n      val popoverWidth  = $.getDOMNode.map(_.domAsHtml.offsetWidth).runNow()\n      P.placement match {\n        case \"right\" =>\n          val top  = offset.top + height / 2 - popoverHeight / 2\n          val left = offset.left + width\n          ClientRect(top, left)\n        case \"left\" =>\n          val top  = offset.top + height / 2 - popoverHeight / 2\n          val left = offset.left - popoverWidth\n          ClientRect(top, left)\n        case \"top\" =>\n          val top  = offset.top - popoverHeight\n          val left = offset.left + width / 2 - popoverWidth / 2\n          ClientRect(top, left)\n        case \"bottom\" =>\n          val top  = offset.top + height\n          val left = offset.left + width / 2 - popoverWidth / 2\n          ClientRect(top, left)\n        case _ => throw new Exception(s\"unsupported placement: ${P.placement}\")\n      }\n    }\n\n    def arrowAfter(P: Props): TagMod = {\n      if (P.placement == \"top\")\n        <.span(P.style.popoverArrowAfter, P.style.popoverTopArrowAfter, \" \")\n      else if (P.placement == \"left\")\n        <.span(P.style.popoverArrowAfter, P.style.popoverLeftArrowAfter, \" \")\n      else if (P.placement == \"right\")\n        <.span(P.style.popoverArrowAfter, P.style.popoverRightArrowAfter, \" \")\n      else if (P.placement == \"bottom\")\n        <.span(P.style.popoverArrowAfter, P.style.popoverBottomArrowAfter, \" \")\n      else \"\"\n    }\n\n    def render(P: Props, S: State, C: PropsChildren) = {\n      <.div(\n        P.style.popover,\n        P.style.popoverTop.when(P.placement == \"top\"),\n        P.style.popoverLeft.when(P.placement == \"left\"),\n        P.style.popoverRight.when(P.placement == \"right\"),\n        P.style.popoverBottom.when(P.placement == \"bottom\"),\n        ^.top := S.top.toString(),\n        (^.left := S.left.toString).when(S.open)\n      )(\n        <.div(\n          P.style.popoverArrow,\n          P.style.popoverTopArrow.when(P.placement == \"top\"),\n          P.style.popoverLeftArrow.when(P.placement == \"left\"),\n          P.style.popoverRightArrow.when(P.placement == \"right\"),\n          P.style.popoverBottomArrow.when(P.placement == \"bottom\"),\n          arrowAfter(P)\n        ),\n        (<.h3(P.style.popoverTitle)(P.title)).unless(P.title.isEmpty),\n        <.div(P.style.popoverContent)(\n          C\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactPopover\")\n    .initialState(State(open = false))\n    .renderBackendWithChildren[Backend]\n    .build\n\n  case class Props(title: String = \"\", placement: String = \"\", style: Style = new Style {})\n\n  def apply(\n      title: String = \"\",\n      placement: String = \"right\",\n      style: Style = new Style {}\n  )(children: VdomNode*) =\n    component(Props(title, placement, style))(children: _*)\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/ReactSearchBox.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport scalacss.ScalaCssReact._\n\nobject ReactSearchBox {\n\n  val cssSettings = scalacss.devOrProdDefaults\n  import cssSettings._\n\n  class Style extends StyleSheet.Inline {\n\n    import dsl._\n\n    val searchBox = style(marginBottom(10 px))\n\n    val input = style(\n      fontSize(13 px),\n      fontWeight._300,\n      padding(3 px),\n      width(100.%%),\n      backgroundColor.transparent,\n      borderBottom :=! \"1px solid #B2ADAD\",\n      &.focus(\n        outline.none,\n        borderBottom :=! \"1.5px solid #03a9f4\"\n      )\n    )\n  }\n\n  class Backend(t: BackendScope[Props, Unit]) {\n    def onTextChange(P: Props)(e: ReactEventFromInput) =\n      e.preventDefaultCB >> P.onTextChange(e.target.value)\n\n    def render(P: Props) =\n      <.div(P.style.searchBox)(\n        <.input(P.style.input, ^.placeholder := \"Search ..\", ^.onKeyUp ==> onTextChange(P))\n      )\n  }\n\n  object DefaultStyle extends Style\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactSearchBox\")\n    .stateless\n    .renderBackend[Backend]\n    .build\n\n  case class Props(onTextChange: String => Callback, style: Style)\n\n  def apply(onTextChange: String => Callback, style: Style = DefaultStyle) =\n    component(Props(onTextChange, style))\n\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/ReactTable.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport japgolly.scalajs.react.Callback\nimport japgolly.scalajs.react.BackendScope\nimport japgolly.scalajs.react.ScalaComponent\nimport scala.collection.immutable\nimport scalacss.ProdDefaults._\n\nimport scalacss.ScalaCssReact.scalacssStyleaToTagMod\n\n/**\n  * Companion object of ReactTable, with tons of little utilities\n  */\nobject ReactTable {\n\n  /**\n    * The direction of the sort\n    */\n  object SortDirection extends Enumeration {\n    type SortDirection = Value\n    val asc, dsc = Value\n  }\n  /*\n   * Pass this to the ColumnConfig to sort using an ordering\n   */\n  //  def Sort[T, B](fn: T => B)(implicit ordering: Ordering[B]): (T, T) => Boolean = {\n  //    (m1: T, m2: T) =>\n  //      ordering.compare(fn(m1), fn(m2)) > 0\n  //  }\n  //  /*\n  //   * Pass this to the ColumnConfig to sort a string ignoring case using an ordering\n  //   */\n  //  def IgnoreCaseStringSort[T](fn: T => String): (T, T) => Boolean =\n  //    (m1: T, m2: T) => fn(m1).compareToIgnoreCase(fn(m2)) > 0\n\n  def DefaultOrdering[T, B](fn: T => B)(implicit ordering: Ordering[B]) = new Ordering[T] {\n    def compare(a: T, b: T) = ordering.compare(fn(a), fn(b))\n  }\n\n  def ignoreCaseStringOrdering[T](fn: T => String) = new Ordering[T] {\n    def compare(a: T, b: T) = fn(a).compareToIgnoreCase(fn(b))\n  }\n\n  class Style extends StyleSheet.Inline {\n\n    import dsl._\n\n    val reactTableContainer = style(display.flex, flexDirection.column)\n\n    val table = style(\n      display.flex,\n      flexDirection.column,\n      boxShadow := \"0 1px 3px 0 rgba(0, 0, 0, 0.12), 0 1px 2px 0 rgba(0, 0, 0, 0.24)\",\n      media.maxWidth(740 px)(boxShadow := \"none\")\n    )\n\n    val tableRow = style(padding :=! \"0.8rem\",\n                         &.hover(backgroundColor :=! \"rgba(244, 244, 244, 0.77)\"),\n                         media.maxWidth(740 px)(boxShadow := \"0 1px 3px grey\", margin(5 px)))\n\n    val tableHeader = style(fontWeight.bold, borderBottom :=! \"1px solid #e0e0e0\", tableRow)\n\n    val settingsBar = style(display.flex, margin :=! \"15px 0\", justifyContent.spaceBetween)\n\n    val sortIcon = styleF.bool(\n      ascending =>\n        styleS(\n          &.after(fontSize(9 px), marginLeft(5 px), if (ascending) { content := \"'\\\\25B2'\" } else {\n            content := \"'\\\\25BC'\"\n          })))\n\n  }\n\n  object DefaultStyle extends Style\n\n  type CellRenderer[T] = T => VdomNode\n\n  def DefaultCellRenderer[T]: CellRenderer[T] = { model =>\n    <.span(model.toString)\n  }\n  def EmailRenderer[T](fn: T => String): CellRenderer[T] = { t =>\n    val str = fn(t)\n    <.a(^.whiteSpace.nowrap, ^.href := s\"mailto:${str}\", str)\n  }\n  def OptionRenderer[T, B](defaultValue: VdomNode = \"\", bRenderer: CellRenderer[B])(\n      fn: T => Option[B]): CellRenderer[T] =\n    t => fn(t).fold(defaultValue)(bRenderer)\n\n  case class ColumnConfig[T](name: String,\n                             cellRenderer: CellRenderer[T],\n                             //sortBy: Option[(T, T) => Boolean] = None,\n                             width: Option[String] = None,\n                             nowrap: Boolean = false)(implicit val ordering: Ordering[T])\n\n  def SimpleStringConfig[T](name: String,\n                            stringRetriever: T => String,\n                            width: Option[String] = None,\n                            nowrap: Boolean = false): ReactTable.ColumnConfig[T] = {\n    val renderer: CellRenderer[T] = if (nowrap) { t =>\n      <.span(stringRetriever(t))\n    } else { t =>\n      stringRetriever(t)\n    }\n    ColumnConfig(name, renderer, width, nowrap)(ignoreCaseStringOrdering(stringRetriever))\n  }\n}\n\n/**\n  * A relatively simple html/react table with a pager.\n  * You should pass in the data as a sequence of items of type T\n  * But you should also pass a list of Column Configurations, each of which describes how to get to each column for a given item in the data, how to display it, how to sort it, etc.\n  */\ncase class ReactTable[T](data: Seq[T],\n                         configs: List[ReactTable.ColumnConfig[T]] = List(),\n                         rowsPerPage: Int = 5,\n                         style: ReactTable.Style = ReactTable.DefaultStyle,\n                         enableSearch: Boolean = true,\n                         searchBoxStyle: ReactSearchBox.Style = ReactSearchBox.DefaultStyle,\n                         onRowClick: (Int) => Callback = { _ =>\n                           Callback {}\n                         },\n                         searchStringRetriever: T => String = { t: T =>\n                           t.toString\n                         }) {\n\n  import ReactTable._\n  import SortDirection._\n\n  case class State(filterText: String,\n                   offset: Int,\n                   rowsPerPage: Int,\n                   filteredData: Seq[T],\n                   sortedState: Map[Int, SortDirection])\n\n  class Backend(t: BackendScope[Props, State]) {\n\n    def onTextChange(props: Props)(value: String): Callback =\n      t.modState(_.copy(filteredData = getFilteredData(value, props.data), offset = 0))\n\n    def onPreviousClick: Callback =\n      t.modState(s => s.copy(offset = s.offset - s.rowsPerPage))\n\n    def onNextClick: Callback =\n      t.modState(s => s.copy(offset = s.offset + s.rowsPerPage))\n\n    def getFilteredData(text: String, data: Seq[T]): Seq[T] = {\n      if (text.isEmpty) {\n        data\n      } else {\n        data.filter(searchStringRetriever(_).toLowerCase.contains(text.toLowerCase))\n      }\n    }\n\n    def sort(ordering: Ordering[T], columnIndex: Int): Callback =\n      t.modState { state =>\n        val rows = state.filteredData\n        state.sortedState.get(columnIndex) match {\n          case Some(asc) =>\n            state.copy(filteredData = rows.sorted(ordering.reverse),\n                       sortedState = Map(columnIndex -> dsc),\n                       offset = 0)\n          case _ =>\n            state.copy(filteredData = rows.sorted(ordering),\n                       sortedState = Map(columnIndex -> asc),\n                       offset = 0)\n        }\n      }\n\n    def onPageSizeChange(value: String): Callback =\n      t.modState(_.copy(rowsPerPage = value.toInt))\n\n    def render(props: Props, state: State): VdomElement = {\n      def settingsBar = {\n        var value                 = \"\"\n        var options: List[String] = Nil\n        val total                 = state.filteredData.length\n        if (total > props.rowsPerPage) {\n          value = state.rowsPerPage.toString\n          options = immutable.Range\n            .inclusive(props.rowsPerPage, total, 10 * (total / 100 + 1))\n            .:+(total)\n            .toList\n            .map(_.toString)\n        }\n        <.div(props.style.settingsBar)(<.div(<.strong(\"Total: \" + state.filteredData.size)),\n                                       DefaultSelect(label = \"Page Size: \",\n                                                     options = options,\n                                                     value = value,\n                                                     onChange = onPageSizeChange))\n      }\n      def renderHeader: TagMod =\n        <.tr(\n          props.style.tableHeader,\n          props.configs.zipWithIndex.map {\n            case (config, columnIndex) =>\n              val cell = getHeaderDiv(config)\n              //              config.sortBy.fold(cell(config.name.capitalize))(sortByFn =>\n              cell(\n                ^.cursor := \"pointer\",\n                ^.onClick --> sort(config.ordering, columnIndex),\n                config.name.capitalize,\n                props.style\n                  .sortIcon(state.sortedState.isDefinedAt(columnIndex) && state.sortedState(\n                    columnIndex) == asc)\n                  .when(state.sortedState.isDefinedAt(columnIndex))\n              )\n            //)\n          }.toTagMod\n        )\n\n      def renderRow(model: T): TagMod =\n        <.tr(\n          props.style.tableRow,\n          props.configs\n            .map(\n              config =>\n                <.td(^.whiteSpace.nowrap.when(config.nowrap),\n                     ^.verticalAlign.middle,\n                     config.cellRenderer(model)))\n            .toTagMod\n        )\n\n      val rows = state.filteredData\n        .slice(state.offset, state.offset + state.rowsPerPage)\n        .zipWithIndex\n        .map {\n          case (row, i) => renderRow(row) //tableRow.withKey(i)((row, props))\n        }\n        .toTagMod\n\n      <.div(\n        props.style.reactTableContainer,\n        ReactSearchBox(onTextChange = onTextChange(props) _, style = props.searchBoxStyle)\n          .when(props.enableSearch),\n        settingsBar,\n        <.div(props.style.table, <.table(<.thead(renderHeader()), <.tbody(rows))),\n        Pager(state.rowsPerPage,\n              state.filteredData.length,\n              state.offset,\n              onNextClick,\n              onPreviousClick)\n      )\n    }\n  }\n\n  def getHeaderDiv(config: ColumnConfig[T]): TagMod = {\n    config.width.fold(<.th())(width => <.th(^.width := width))\n  }\n\n  def arrowUp: TagMod =\n    TagMod(^.width := 0.px,\n           ^.height := 0.px,\n           ^.borderLeft := \"5px solid transparent\",\n           ^.borderRight := \"5px solid transparent\",\n           ^.borderBottom := \"5px solid black\")\n\n  def arrowDown: TagMod =\n    TagMod(^.width := 0.px,\n           ^.height := 0.px,\n           ^.borderLeft := \"5px solid transparent\",\n           ^.borderRight := \"5px solid transparent\",\n           ^.borderTop := \"5px solid black\")\n\n  def emptyClass: TagMod =\n    TagMod(^.padding := \"1px\")\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactTable\")\n    .initialStateFromProps(props =>\n      State(filterText = \"\", offset = 0, props.rowsPerPage, props.data, Map()))\n    .renderBackend[Backend]\n    .componentWillReceiveProps(e =>\n      Callback.when(e.currentProps.data != e.nextProps.data)(\n        e.backend.onTextChange(e.nextProps)(e.state.filterText)))\n    .build\n\n  case class Props(data: Seq[T],\n                   configs: List[ColumnConfig[T]],\n                   rowsPerPage: Int,\n                   style: Style,\n                   enableSearch: Boolean,\n                   searchBoxStyle: ReactSearchBox.Style)\n\n  def apply() = component(Props(data, configs, rowsPerPage, style, enableSearch, searchBoxStyle))\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/ReactTagsInput.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport chandu0101.macros.tojs.JSMacro\nimport japgolly.scalajs.react._\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.JSImport\n\n@JSImport(\"react-tagsinput\", JSImport.Default) @js.native\nobject ReactTagsInputRequire extends js.Any\n\n@JSImport(\"react-tagsinput/react-tagsinput.css\", JSImport.Namespace) @js.native\nobject ReactTagsInputCss extends js.Any\n\ncase class ReactTagsInput(\n    key: js.UndefOr[String] = js.undefined,\n    ref: js.UndefOr[ReactTagsInputM => Unit] = js.undefined,\n    /* An array of tags. */\n    value: js.Array[String],\n    /* Callback when tags change. */\n    onChange: js.Array[String] => Callback,\n    /* An array of key codes that add a tag, default is [9, 13] (Tab and Enter). */\n    addKeys: js.UndefOr[js.Array[Int]] = js.undefined,\n    /* An array of key codes that remove a tag, default is [8] (Backspace). */\n    removeKeys: js.UndefOr[js.Array[Int]] = js.undefined,\n    /* Props passed down to every tag component. Defualt is: {className: 'react-tagsinput-tag', classNameRemove: 'react-tagsinput-remove'}. */\n    tagProps: js.UndefOr[js.Any] = js.undefined,\n    /* Props passed down to input. Default is: {className: 'react-tagsinput-input'} */\n    inputProps: js.UndefOr[js.Any] = js.undefined,\n    /* Render function for every tag. Default is:\n    function defaultRenderTag (props) {\n      let {tag, key, onRemove, ...other} = props\n      return (\n        <span key={key} {...other}>\n          {tag}\n          <a onClick={(e) => onRemove(key)} />\n        </span>\n      )\n    }*/\n    renderTag: js.UndefOr[js.Any] = js.undefined,\n    /* Render function for input. Default is:\n    function defaultRenderInput (props) {\n      let {onChange, value, ...other} = props\n      return (\n        <input type='text' onChange={onChange} value={value} {...other} />\n      )\n    }\n     */\n    renderInput: js.UndefOr[js.Any] = js.undefined,\n    /* Renders the layout of the component. Takes tagComponents and inputComponent as args. Default is:\n    function defaultRenderLayout (tagComponents, inputComponent) {\n      return (\n        <span>\n          {tagComponents}\n          {inputComponent}\n        </span>\n      )\n    } */\n    renderLayout: js.UndefOr[js.Any] = js.undefined,\n    onBlur: js.UndefOr[Callback] = js.undefined,\n    onKeyDown: js.UndefOr[ReactEventFromInput => Callback] = js.undefined,\n    onKeyUp: js.UndefOr[ReactEventFromInput => Callback] = js.undefined\n) {\n\n  def apply() = {\n    val props = JSMacro[ReactTagsInput](this)\n    val f     = JsComponent[js.Object, Children.None, Null](ReactTagsInputRequire)\n    f(props)\n  }\n\n}\n\n@js.native\ntrait ReactTagsInputM extends js.Object {\n  def focus(): Unit = js.native\n  def blur(): Unit  = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/ReactTapEventPlugin.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.JSImport\nimport scala.scalajs.js.{Date, UndefOr}\n\n@js.native\ntrait StrategyOverrides extends js.Object {\n  var shouldRejectClick: js.UndefOr[\n    js.Function2[ /* lastTouchEventTimestamp */ Date, /* clickEventTimestamp */ Date, Boolean]] =\n    js.native\n}\n\n@JSImport(\"react-tap-event-plugin\", \"default\")\n@js.native\nobject ReactTapEventPlugin\n    extends js.Function1[ /* strategyOverrides */ js.UndefOr[StrategyOverrides], Unit] {\n  override def apply(strategyOverrides: UndefOr[StrategyOverrides]): Unit = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/ReactTreeView.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport Implicits._\n\ncase class TreeItem(item: Any, children: TreeItem*) {\n  def apply(item: Any): TreeItem = this(item, Nil)\n}\n\nobject ReactTreeView {\n\n  trait Style {\n\n    def reactTreeView = Seq[TagMod]()\n\n    def treeGroup = Seq(^.margin := \"0\", ^.padding := \"0 0 0 14px\")\n\n    def treeItem = Seq(^.listStyleType := \"none\")\n\n    def selectedTreeItemContent =\n      Seq(^.backgroundColor := \"#1B8EB0\",\n          ^.color := \"white\",\n          ^.fontWeight := \"400\",\n          ^.padding := \"0 7px\")\n\n    def treeItemBefore = Seq(\n      ^.display := \"inline-block\",\n      ^.fontSize := \"11px\",\n      ^.color := \"grey\",\n      ^.margin := \"3px 7px 0 0\",\n      ^.textAlign := \"center\",\n      ^.width := \"11px\"\n    )\n\n    def treeItemHasChildrenClosed = Seq(^.contentStyle := \"▶\")\n\n    def treeItemHasChildrenOpened = Seq(^.contentStyle := \"▼\")\n\n  }\n\n  type NodeC = ScalaComponent.MountedPure[NodeProps, NodeState, NodeBackend] //, _ <: CtorType[_, _]]\n\n  case class State(filterText: String, filterMode: Boolean, selectedNode: js.UndefOr[NodeC])\n\n  class Backend($ : BackendScope[Props, State]) {\n\n    def onNodeSelect(P: Props)(selected: NodeC): Callback = {\n      val removeSelection: Callback =\n        $.state.flatMap(\n          _.selectedNode\n            .filterNot(_ == selected)\n            .fold(Callback.empty)(_.modState(_.copy(selected = false)))\n        )\n\n      val updateThis: Callback =\n        $.modState(_.copy(selectedNode = selected, filterMode = false))\n\n      val setSelection: Callback = selected.modState(_.copy(selected = true))\n\n      val tell: Callback =\n        selected.props.flatMap(p => P.onItemSelect.asCbo(p.root.item.toString, p.parent, p.depth))\n\n      removeSelection >> updateThis >> setSelection >> tell\n    }\n\n    def onTextChange(text: String): Callback =\n      $.modState(_.copy(filterText = text, filterMode = true))\n\n    def render(P: Props, S: State) =\n      <.div(P.style.reactTreeView.toTagMod)(\n        ReactSearchBox(onTextChange = onTextChange).when(P.showSearchBox),\n        TreeNode.withKey(\"root\")(\n          NodeProps(\n            root = P.root,\n            open = if (S.filterText.nonEmpty) true else P.open,\n            onNodeSelect = onNodeSelect(P),\n            filterText = S.filterText,\n            style = P.style,\n            filterMode = S.filterMode\n          ))\n      )\n  }\n\n  case class NodeBackend($ : BackendScope[NodeProps, NodeState]) {\n\n    def onItemSelect(P: NodeProps)(e: ReactEventFromHtml): Callback = {\n      P.onNodeSelect($.asInstanceOf[NodeC]) >> e.preventDefaultCB >> e.stopPropagationCB\n    }\n\n    def childrenFromProps(P: NodeProps): CallbackTo[Option[Unit]] =\n      $.modState(S => S.copy(children = if (S.children.isEmpty) P.root.children else Nil))\n        .when(P.root.children.nonEmpty)\n\n    def onTreeMenuToggle(P: NodeProps)(e: ReactEventFromHtml): Callback =\n      childrenFromProps(P) >> e.preventDefaultCB >> e.stopPropagationCB\n\n    def isFilterTextExist(filterText: String, data: TreeItem): Boolean = {\n      def matches(item: TreeItem): Boolean =\n        item.item.toString.toLowerCase.contains(filterText.toLowerCase)\n\n      def loop(data: Seq[TreeItem]): Boolean =\n        data.view.exists(\n          item => if (item.children.isEmpty) matches(item) else loop(item.children)\n        )\n\n      matches(data) || loop(data.children)\n    }\n\n    def render(P: NodeProps, S: NodeState): VdomTag = {\n      val depth = P.depth + 1\n      val parent =\n        if (P.parent.isEmpty) P.root.item.toString\n        else s\"${P.parent}<-${P.root.item.toString}\"\n\n      val treeMenuToggle: TagMod =\n        if (S.children.nonEmpty)\n          <.span(\n            ^.onClick ==> onTreeMenuToggle(P),\n            ^.key := \"arrow\",\n            P.style.treeItemBefore.toTagMod,\n            \"▼\"\n          )\n        else if (P.root.children.nonEmpty && S.children.isEmpty)\n          <.span(\n            ^.onClick ==> onTreeMenuToggle(P),\n            ^.key := \"arrow\",\n            P.style.treeItemBefore.toTagMod,\n            \"▶\"\n          )\n        else \"\"\n\n      <.li(\n        P.style.treeItem.toTagMod,\n        treeMenuToggle,\n        ^.key := \"toggle\",\n        ^.cursor := \"pointer\",\n        <.span(\n          P.style.selectedTreeItemContent.toTagMod.when(S.selected),\n          ^.onClick ==> onItemSelect(P),\n          P.root.item.toString\n        ),\n        <.ul(P.style.treeGroup.toTagMod)(\n          S.children\n            .map(\n              child =>\n                TreeNode\n                  .withKey(s\"$parent$depth${child.item}\")\n                  .apply(\n                    P.copy(\n                      root = child,\n                      open = !P.filterText.trim.isEmpty,\n                      depth = depth,\n                      parent = parent,\n                      filterText = P.filterText\n                    ))\n                  .when(isFilterTextExist(P.filterText, child)))\n            .toTagMod)\n      )\n    }\n  }\n\n  case class NodeState(children: Seq[TreeItem] = Nil, selected: Boolean = false)\n\n  case class NodeProps(root: TreeItem,\n                       open: Boolean,\n                       depth: Int = 0,\n                       parent: String = \"\",\n                       onNodeSelect: (NodeC) => Callback,\n                       filterText: String,\n                       style: Style,\n                       filterMode: Boolean)\n\n  lazy val TreeNode = ScalaComponent\n    .builder[NodeProps](\"ReactTreeNode\")\n    .initialStateFromProps(P => if (P.open) NodeState(P.root.children) else NodeState())\n    .renderBackend[NodeBackend]\n    .componentWillReceiveProps { c =>\n      c.modState(_.copy(children = if (c.nextProps.open) c.nextProps.root.children else Nil))\n        .when(c.nextProps.filterMode)\n        .void\n    }\n    .build\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactTreeView\")\n    .initialState(State(\"\", false, js.undefined))\n    .renderBackend[Backend]\n    .build\n\n  case class Props(root: TreeItem,\n                   open: Boolean,\n                   onItemSelect: js.UndefOr[(String, String, Int) => Callback],\n                   showSearchBox: Boolean,\n                   style: Style)\n\n  def apply(root: TreeItem,\n            openByDefault: Boolean = false,\n            onItemSelect: js.UndefOr[(String, String, Int) => Callback] = js.undefined,\n            showSearchBox: Boolean = false,\n            style: Style = new Style {}) =\n    component(Props(root, openByDefault, onItemSelect, showSearchBox, style))\n\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/Spinner.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport chandu0101.macros.tojs.JSMacro\nimport japgolly.scalajs.react._\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.JSImport\n\n@js.native\n@JSImport(\"react-spinner\", JSImport.Default)\nobject SpinnerRequire extends js.Any\n\n@js.native\n@JSImport(\"react-spinner/react-spinner.css\", JSImport.Namespace)\nobject SpinnerCss extends js.Any\n\ncase class Spinner(\n    key: js.UndefOr[String] = js.undefined,\n    ref: js.UndefOr[String] = js.undefined,\n    className: js.UndefOr[String] = js.undefined\n) {\n  def apply() = {\n    val f = JsComponent[js.Object, Children.None, Null](SpinnerRequire)\n    f(JSMacro[Spinner](this))\n  }\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/elementalui/Eui.scala",
    "content": "package chandu0101.scalajs.react.components.elementalui\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.JSImport\n\nobject Eui {\n  // we need to fix these renames\n  @js.native @JSImport(\"elemental/lib/components/Alert\", JSImport.Default)\n  object ElementalAlert extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/FileDragAndDrop\", JSImport.Default)\n  object Dropzone extends js.Any\n\n  @js.native @JSImport(\"elemental/lib/components/BlankState\", JSImport.Default)\n  object BlankState extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Button\", JSImport.Default)\n  object Button extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/ButtonGroup\", JSImport.Default)\n  object ButtonGroup extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Checkbox\", JSImport.Default)\n  object Checkbox extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Card\", JSImport.Default)\n  object Card extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Col\", JSImport.Default)\n  object Col extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Container\", JSImport.Default)\n  object Container extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Dropdown\", JSImport.Default)\n  object Dropdown extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/EmailInputGroup\", JSImport.Default)\n  object EmailInputGroup extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/FileUpload\", JSImport.Default)\n  object FileUpload extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Form\", JSImport.Default)\n  object Form extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/FormField\", JSImport.Default)\n  object FormField extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/FormIcon\", JSImport.Default)\n  object FormIcon extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/FormIconField\", JSImport.Default)\n  object FormIconField extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/FormInput\", JSImport.Default)\n  object FormInput extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/FormLabel\", JSImport.Default)\n  object FormLabel extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/FormNote\", JSImport.Default)\n  object FormNote extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/FormRow\", JSImport.Default)\n  object FormRow extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/FormSelect\", JSImport.Default)\n  object FormSelect extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Glyph\", JSImport.Default)\n  object Glyph extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/InputGroup\", JSImport.Default)\n  object InputGroup extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/InputGroupSection\", JSImport.Default)\n  object InputGroupSection extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Modal\", JSImport.Default)\n  object Modal extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/ModalBody\", JSImport.Default)\n  object ModalBody extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/ModalFooter\", JSImport.Default)\n  object ModalFooter extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/ModalHeader\", JSImport.Default)\n  object ModalHeader extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Pagination\", JSImport.Default)\n  object Pagination extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/PasswordInputGroup\", JSImport.Default)\n  object PasswordInputGroup extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Pill\", JSImport.Default)\n  object Pill extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Radio\", JSImport.Default)\n  object Radio extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/ResponsiveText\", JSImport.Default)\n  object ResponsiveText extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Row\", JSImport.Default)\n  object Row extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/RadioGroup\", JSImport.Default)\n  object RadioGroup extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/SegmentedControl\", JSImport.Default)\n  object SegmentedControl extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Spinner\", JSImport.Default)\n  object Spinner extends js.Any\n  @js.native @JSImport(\"elemental/lib/components/Table\", JSImport.Default)\n  object Table extends js.Any\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/elementalui/types.scala",
    "content": "package chandu0101.scalajs.react.components.elementalui\n\nimport chandu0101.macros.tojs.JSMacro\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.ScalaJSDefined\n\nclass FormSelectOption(val label: String, val value: String) extends js.Object {\n  val toJS = JSMacro[FormSelectOption](this)\n}\nobject FormSelectOption {\n  def apply(label: String, value: String) = new FormSelectOption(label, value)\n}\n\ncase class ModalSize(value: String) extends AnyVal\nobject ModalSize {\n  val small  = ModalSize(\"small\")\n  val medium = ModalSize(\"medium\")\n  val large  = ModalSize(\"large\")\n  val values = List(small, medium, large)\n\n  def apply(value: String) = new ModalSize(value)\n}\n\ncase class ColBasis private (value: String) extends AnyVal\nobject ColBasis {\n  val number = ColBasis(\"number\")\n  val string = ColBasis(\"string\")\n}\ncase class EuiDropdownMenuItemType private (value: String) extends AnyVal\n\nobject EuiDropdownMenuItemType {\n  val DIVIDER = EuiDropdownMenuItemType(\"divider\")\n  val HEADER  = EuiDropdownMenuItemType(\"header\")\n  val DEFAULT = EuiDropdownMenuItemType(\"\")\n\n  def fromString(str: String): EuiDropdownMenuItemType = str match {\n    case \"divider\" => DIVIDER\n    case \"header\"  => HEADER\n    case _         => DEFAULT\n  }\n\n}\n\ncase class EuiDropdownMenuItem(label: String = \"\",\n                               `type`: EuiDropdownMenuItemType = EuiDropdownMenuItemType.DEFAULT) {\n  val toJS = JSMacro[EuiDropdownMenuItem](this)\n}\n\nobject EuiDropdownMenuItem {\n  def fromJson(obj: js.Dynamic) =\n    EuiDropdownMenuItem(label = obj.label.toString,\n                        `type` = EuiDropdownMenuItemType.fromString(obj.`type`.toString))\n}\n\ncase class File(lastModifiedDate: String,\n                name: String,\n                isClosed: Boolean,\n                size: Long,\n                `type`: String) {\n  val toJS = JSMacro[File](this)\n}\n\nobject File {\n  def fromJson(obj: js.Dynamic) = File(\n    lastModifiedDate = obj.lastModifiedState.toString,\n    name = obj.name.toString,\n    isClosed = obj.isClosed.toString.toBoolean,\n    size = obj.size.toString.toLong,\n    `type` = obj.`type`.toString\n  )\n\n}\n\ncase class IconColorVariant private (value: String) extends AnyVal\nobject IconColorVariant {\n  val DANGER  = IconColorVariant(\"danger\")\n  val DEFAULT = IconColorVariant(\"default\")\n  val PRIMARY = IconColorVariant(\"primary\")\n  val SUCCESS = IconColorVariant(\"success\")\n  val WARNING = IconColorVariant(\"warning\")\n}\n\ncase class FormIconFieldPosition private (value: String) extends AnyVal\nobject FormIconFieldPosition {\n  val LEFT  = FormIconFieldPosition(\"left\")\n  val RIGHT = FormIconFieldPosition(\"right\")\n}\ncase class FormInputSize private (value: String) extends AnyVal\n\nobject FormInputSize {\n  val LG = FormInputSize(\"lg\")\n  val SM = FormInputSize(\"sm\")\n  val XS = FormInputSize(\"xs\")\n}\ncase class VerticalAlignment private (value: String) extends AnyVal\nobject VerticalAlignment {\n  val baseline    = VerticalAlignment(\"baseline\")\n  val bottom      = VerticalAlignment(\"bottom\")\n  val inherit     = VerticalAlignment(\"inherit\")\n  val initial     = VerticalAlignment(\"initial\")\n  val middle      = VerticalAlignment(\"middle\")\n  val sub         = VerticalAlignment(\"sub\")\n  val `super`     = VerticalAlignment(\"super\")\n  val text_bottom = VerticalAlignment(\"text-bottom\")\n  val text_top    = VerticalAlignment(\"text-top\")\n  val top         = VerticalAlignment(\"top'\")\n}\n\ncase class ModalWidth private (value: String) extends AnyVal\n\nobject ModalWidth {\n  val SMALL  = ModalWidth(\"small\")\n  val MEDIUM = ModalWidth(\"medium\")\n  val LARGE  = ModalWidth(\"large\")\n}\ncase class Octicons private (value: String) extends AnyVal\n\nobject Octicons {\n  val alert             = Octicons(\"alert\")\n  val arrow_down        = Octicons(\"arrow-down\")\n  val arrow_left        = Octicons(\"arrow-left\")\n  val arrow_right       = Octicons(\"arrow-right\")\n  val arrow_small_down  = Octicons(\"arrow-small-down\")\n  val arrow_small_left  = Octicons(\"arrow-small-left\")\n  val arrow_small_right = Octicons(\"arrow-small-right\")\n  val arrow_small_up    = Octicons(\"arrow-small-up\")\n  val arrow_up          = Octicons(\"arrow-up\")\n  val beaker            = Octicons(\"beaker\")\n  val bell              = Octicons(\"bell\")\n  //  val bold = Octicons(\"bold\")\n  val bookmark               = Octicons(\"bookmark\")\n  val book                   = Octicons(\"book\")\n  val briefcase              = Octicons(\"briefcase\")\n  val broadcast              = Octicons(\"broadcast\")\n  val browser                = Octicons(\"browser\")\n  val bug                    = Octicons(\"bug\")\n  val calendar               = Octicons(\"calendar\")\n  val checklist              = Octicons(\"checklist\")\n  val check                  = Octicons(\"check\")\n  val chevron_down           = Octicons(\"chevron-down\")\n  val chevron_left           = Octicons(\"chevron-left\")\n  val chevron_right          = Octicons(\"chevron-right\")\n  val chevron_up             = Octicons(\"chevron-up\")\n  val circle_slash           = Octicons(\"circle-slash\")\n  val circuit_board          = Octicons(\"circuit-board\")\n  val clippy                 = Octicons(\"clippy\")\n  val clock                  = Octicons(\"clock\")\n  val cloud_download         = Octicons(\"cloud-download\")\n  val cloud_upload           = Octicons(\"cloud-upload\")\n  val code                   = Octicons(\"code\")\n  val color_mode             = Octicons(\"color-mode\")\n  val comment_discussion     = Octicons(\"comment-discussion\")\n  val comment                = Octicons(\"comment\")\n  val credit_card            = Octicons(\"credit-card\")\n  val dashboard              = Octicons(\"dashboard\")\n  val dash                   = Octicons(\"dash\")\n  val database               = Octicons(\"database\")\n  val desktop_download       = Octicons(\"desktop-download\")\n  val device_camera          = Octicons(\"device-camera\")\n  val device_camera_video    = Octicons(\"device-camera-video\")\n  val device_desktop         = Octicons(\"device-desktop\")\n  val device_mobile          = Octicons(\"device-mobile\")\n  val diff_added             = Octicons(\"diff-added\")\n  val diff_ignored           = Octicons(\"diff-ignored\")\n  val diff_modified          = Octicons(\"diff-modified\")\n  val diff_removed           = Octicons(\"diff-removed\")\n  val diff_renamed           = Octicons(\"diff-renamed\")\n  val diff                   = Octicons(\"diff\")\n  val ellipsis               = Octicons(\"ellipsis\")\n  val eye                    = Octicons(\"eye\")\n  val file_binary            = Octicons(\"file-binary\")\n  val file_code              = Octicons(\"file-code\")\n  val file_directory         = Octicons(\"file-directory\")\n  val file_media             = Octicons(\"file-media\")\n  val file_pdf               = Octicons(\"file-pdf\")\n  val file_submodule         = Octicons(\"file-submodule\")\n  val file_symlink_directory = Octicons(\"file-symlink-directory\")\n  val file_symlink_file      = Octicons(\"file-symlink-file\")\n  val file_text              = Octicons(\"file-text\")\n  val file_zip               = Octicons(\"file-zip\")\n  val flame                  = Octicons(\"flame\")\n  val fold                   = Octicons(\"fold\")\n  val gear                   = Octicons(\"gear\")\n  val gift                   = Octicons(\"gift\")\n  val gist_secret            = Octicons(\"gist-secret\")\n  val gist                   = Octicons(\"gist\")\n  val git_branch             = Octicons(\"git-branch\")\n  val git_commit             = Octicons(\"git-commit\")\n  val git_compare            = Octicons(\"git-compare\")\n  val git_merge              = Octicons(\"git-merge\")\n  val git_pull_request       = Octicons(\"git-pull-request\")\n  val globe                  = Octicons(\"globe\")\n  val graph                  = Octicons(\"graph\")\n  val heart                  = Octicons(\"heart\")\n  val history                = Octicons(\"history\")\n  val home                   = Octicons(\"home\")\n  val horizontal_rule        = Octicons(\"horizontal-rule\")\n  val hubot                  = Octicons(\"hubot\")\n  //  val icons = Octicons(\"icons\")\n  val inbox          = Octicons(\"inbox\")\n  val info           = Octicons(\"info\")\n  val issue_closed   = Octicons(\"issue-closed\")\n  val issue_opened   = Octicons(\"issue-opened\")\n  val issue_reopened = Octicons(\"issue-reopened\")\n  //  val italic = Octicons(\"italic\")\n  val jersey           = Octicons(\"jersey\")\n  val keyboard         = Octicons(\"keyboard\")\n  val key              = Octicons(\"key\")\n  val law              = Octicons(\"law\")\n  val light_bulb       = Octicons(\"light-bulb\")\n  val link_external    = Octicons(\"link-external\")\n  val link             = Octicons(\"link\")\n  val list_ordered     = Octicons(\"list-ordered\")\n  val list_unordered   = Octicons(\"list-unordered\")\n  val location         = Octicons(\"location\")\n  val lock             = Octicons(\"lock\")\n  val logo_github      = Octicons(\"logo-github\")\n  val mail_read        = Octicons(\"mail-read\")\n  val mail_reply       = Octicons(\"mail-reply\")\n  val mail             = Octicons(\"mail\")\n  val markdown         = Octicons(\"markdown\")\n  val mark_github      = Octicons(\"mark-github\")\n  val megaphone        = Octicons(\"megaphone\")\n  val mention          = Octicons(\"mention\")\n  val milestone        = Octicons(\"milestone\")\n  val mirror           = Octicons(\"mirror\")\n  val mortar_board     = Octicons(\"mortar-board\")\n  val mute             = Octicons(\"mute\")\n  val no_newline       = Octicons(\"no-newline\")\n  val octoface         = Octicons(\"octoface\")\n  val organization     = Octicons(\"organization\")\n  val paintcan         = Octicons(\"paintcan\")\n  val pencil           = Octicons(\"pencil\")\n  val person           = Octicons(\"person\")\n  val pin              = Octicons(\"pin\")\n  val plug             = Octicons(\"plug\")\n  val plus             = Octicons(\"plus\")\n  val primitive_dot    = Octicons(\"primitive-dot\")\n  val primitive_square = Octicons(\"primitive-square\")\n  val pulse            = Octicons(\"pulse\")\n  val question         = Octicons(\"question\")\n  val quote            = Octicons(\"quote\")\n  val radio_tower      = Octicons(\"radio-tower\")\n  val repo_clone       = Octicons(\"repo-clone\")\n  val repo_force_push  = Octicons(\"repo-force-push\")\n  val repo_forked      = Octicons(\"repo-forked\")\n  val repo_pull        = Octicons(\"repo-pull\")\n  val repo_push        = Octicons(\"repo-push\")\n  val repo             = Octicons(\"repo\")\n  val rocket           = Octicons(\"rocket\")\n  val rss              = Octicons(\"rss\")\n  val ruby             = Octicons(\"ruby\")\n  val search           = Octicons(\"search\")\n  val server           = Octicons(\"server\")\n  val settings         = Octicons(\"settings\")\n  val shield           = Octicons(\"shield\")\n  val sign_in          = Octicons(\"sign-in\")\n  val sign_out         = Octicons(\"sign-out\")\n  val squirrel         = Octicons(\"squirrel\")\n  val star             = Octicons(\"star\")\n  val stop             = Octicons(\"stop\")\n  val sync             = Octicons(\"sync\")\n  val tag              = Octicons(\"tag\")\n  //  val tasklist = Octicons(\"tasklist\")\n  val telescope = Octicons(\"telescope\")\n  val terminal  = Octicons(\"terminal\")\n  //  val text_size = Octicons(\"text-size\")\n  val three_bars     = Octicons(\"three-bars\")\n  val thumbsdown     = Octicons(\"thumbsdown\")\n  val thumbsup       = Octicons(\"thumbsup\")\n  val tools          = Octicons(\"tools\")\n  val trashcan       = Octicons(\"trashcan\")\n  val triangle_down  = Octicons(\"triangle-down\")\n  val triangle_left  = Octicons(\"triangle-left\")\n  val triangle_right = Octicons(\"triangle-right\")\n  val triangle_up    = Octicons(\"triangle-up\")\n  val unfold         = Octicons(\"unfold\")\n  val unmute         = Octicons(\"unmute\")\n  val versions       = Octicons(\"versions\")\n  val watch          = Octicons(\"watch\")\n  val x              = Octicons(\"x\")\n  val zap            = Octicons(\"zap\")\n\n  val values = List(\n    alert,\n    arrow_down,\n    arrow_left,\n    arrow_right,\n    arrow_small_down,\n    arrow_small_left,\n    arrow_small_right,\n    arrow_small_up,\n    arrow_up,\n    beaker,\n    bell,\n    //    bold,\n    bookmark,\n    book,\n    briefcase,\n    broadcast,\n    browser,\n    bug,\n    calendar,\n    checklist,\n    check,\n    chevron_down,\n    chevron_left,\n    chevron_right,\n    chevron_up,\n    circle_slash,\n    circuit_board,\n    clippy,\n    clock,\n    cloud_download,\n    cloud_upload,\n    code,\n    color_mode,\n    comment_discussion,\n    comment,\n    credit_card,\n    dashboard,\n    dash,\n    database,\n    desktop_download,\n    device_camera,\n    device_camera_video,\n    device_desktop,\n    device_mobile,\n    diff_added,\n    diff_ignored,\n    diff_modified,\n    diff_removed,\n    diff_renamed,\n    diff,\n    ellipsis,\n    eye,\n    file_binary,\n    file_code,\n    file_directory,\n    file_media,\n    file_pdf,\n    file_submodule,\n    file_symlink_directory,\n    file_symlink_file,\n    file_text,\n    file_zip,\n    flame,\n    fold,\n    gear,\n    gift,\n    gist_secret,\n    gist,\n    git_branch,\n    git_commit,\n    git_compare,\n    git_merge,\n    git_pull_request,\n    globe,\n    graph,\n    heart,\n    history,\n    home,\n    horizontal_rule,\n    hubot,\n    //    icons,\n    inbox,\n    info,\n    issue_closed,\n    issue_opened,\n    issue_reopened,\n    //    italic,\n    jersey,\n    keyboard,\n    key,\n    law,\n    light_bulb,\n    link_external,\n    link,\n    list_ordered,\n    list_unordered,\n    location,\n    lock,\n    logo_github,\n    mail_read,\n    mail_reply,\n    mail,\n    markdown,\n    mark_github,\n    megaphone,\n    mention,\n    milestone,\n    mirror,\n    mortar_board,\n    primitive_square,\n    pulse,\n    question,\n    quote,\n    radio_tower,\n    repo_clone,\n    repo_force_push,\n    repo_forked,\n    repo_pull,\n    repo_push,\n    repo,\n    rocket,\n    rss,\n    ruby,\n    search,\n    server,\n    settings,\n    shield,\n    sign_in,\n    sign_out,\n    squirrel,\n    star,\n    stop,\n    sync,\n    tag,\n    //    tasklist,\n    telescope,\n    terminal,\n    //text_size,\n    three_bars,\n    thumbsdown,\n    thumbsup,\n    tools,\n    trashcan,\n    triangle_down,\n    triangle_left,\n    triangle_right,\n    triangle_up,\n    unfold,\n    unmute,\n    versions,\n    watch,\n    x\n  )\n}\ncase class PillType private (value: String) extends AnyVal\nobject PillType {\n  val danger           = PillType(\"danger\")\n  val default          = PillType(\"default\")\n  val info             = PillType(\"info\")\n  val primary          = PillType(\"primary\")\n  val success          = PillType(\"success\")\n  val warning          = PillType(\"warning\")\n  val danger_inverted  = PillType(\"danger-inverted\")\n  val default_inverted = PillType(\"default-inverted\")\n  val info_inverted    = PillType(\"info-inverted\")\n  val primary_inverted = PillType(\"primary-inverted\")\n  val success_inverted = PillType(\"success-inverted\")\n  val warning_inverted = PillType(\"warning-inverted\")\n}\ncase class SpinnerSize private (value: String) extends AnyVal\nobject SpinnerSize {\n  val SM = SpinnerSize(\"sm\")\n  val MD = SpinnerSize(\"md\")\n  val LG = SpinnerSize(\"lg\")\n}\ncase class SpinnerType private (value: String) extends AnyVal\nobject SpinnerType {\n  val DEFAULT  = SpinnerType(\"default\")\n  val PRIMARY  = SpinnerType(\"primary\")\n  val INVERTED = SpinnerType(\"inverted\")\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/fascades/GoogleMapFascade.scala",
    "content": "package chandu0101.scalajs.react.components\npackage fascades\n\nimport japgolly.scalajs.react.vdom.TopNode\nimport org.scalajs.dom.Event\n\nimport scala.scalajs.js\nimport scala.scalajs.js.Dynamic.{literal => json}\nimport scala.scalajs.js.JSConverters.genTravConvertible2JSRichGenTrav\nimport scala.scalajs.js.annotation._\n\n@js.native @JSGlobal(\"google.maps.LatLng\")\nclass GLatLng(lat: Double, lng: Double) extends js.Object\n\n@js.native @JSGlobal(\"google.maps.Map\")\nclass GMap(node: TopNode, options: js.Dynamic) extends js.Object {\n  def setCenter(latLng: GLatLng): Unit = js.native\n}\n\n@js.native @JSGlobal(\"google.maps.Point\")\nclass GPoint(x: Int, y: Int) extends js.Object\n\n@js.native @JSGlobal(\"google.maps.Size\")\nclass GSize(width: Int, height: Int) extends js.Object\n\n@js.native @JSGlobal(\"google.maps.Marker\")\nclass GMarker(ops: js.Dynamic) extends js.Object {\n  def setMap(map: GMap): Unit = js.native\n}\n\n@js.native @JSGlobal(\"google.maps.InfoWindow\")\nclass GInfoWindow extends js.Object {\n  def setContent(content: String): Unit = js.native\n\n  def open(map: GMap, marker: GMarker): Unit = js.native\n}\n\n@js.native @JSGlobal(\"google.maps.event\")\nclass GEvent extends js.Object {\n  def addListener(marker: GMarker, tpe: String, callback: js.Function0[Unit]): Unit = js.native\n\n  def addListener(marker: GMarker, tpe: String, callback: js.Function1[Event, Unit]): Unit =\n    js.native\n}\n\n@js.native @JSGlobal(\"google.maps.event.addListener\")\nclass GAddListener(marker: GMarker, tpe: String, callback: js.Function) extends js.Object\n\n@js.native @JSGlobal(\"google.maps.event.clearInstanceListeners\")\nclass GClearInstanceListeners(marker: GMarker) extends js.Object\n\n@js.native @JSGlobal(\"google.maps.event.clearListeners\")\nclass GClearListeners(marker: GMarker, `type`: String) extends js.Object\n\ncase class Point(x: Int, y: Int) {\n  def toGPoint = new GPoint(x, y)\n}\n\ncase class Size(width: Int, height: Int) {\n  def toGSize = new GSize(width, height)\n}\n\n/*\n     url = image location\n     size = This marker is 20 pixels wide by 32 pixels tall.\n     origin = The origin for this image is 0,0.\n     anchor = The anchor for this image is the base of the flagpole at 0,32.\n */\n\ncase class Icon(url: String, size: Size, origin: Point, anchor: Point) {\n  def toGIcon =\n    json(url = url, size = size.toGSize, origin = origin.toGPoint, anchor = anchor.toGPoint)\n}\n\n/*\n    Shapes define the clickable region of the icon.\n    The type defines an HTML &lt;area&gt; element 'poly' which\n    traces out a polygon as a series of X,Y points. The final\n    coordinate closes the poly by connecting to the first\n    coordinate.\n */\ncase class Shape(coords: List[Int], tpe: String) {\n  def toGShape = json(\"coords\" -> coords.toJSArray, \"type\" -> tpe)\n}\n\ncase class LatLng(lat: Double, lng: Double) {\n  def toGlatlng = new GLatLng(lat, lng)\n}\n\ncase class Marker(position: LatLng,\n                  title: String = \"\",\n                  icon: Icon = null,\n                  shape: Shape = null,\n                  zIndex: Int = 0,\n                  draggable: Boolean = false,\n                  content: String = \"\") {\n  def toGMarker(map: GMap) =\n    json(\n      map = map,\n      position = position.toGlatlng,\n      title = title,\n      icon = if (icon != null) icon.toGIcon else null,\n      shape = if (shape != null) shape.toGShape else null,\n      zIndex = zIndex,\n      draggable = draggable\n    )\n}\n\ncase class MapOptions(center: LatLng, zoom: Int = 4) {\n  def toGMapOptions = json(center = center.toGlatlng, zoom = zoom)\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/helpers.scala",
    "content": "package chandu0101.scalajs.react.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom._\n\nimport scala.scalajs.js\n\nobject Events {\n  def register(\n      element: EventTarget,\n      tpe: String,\n      _cb: Event => Callback,\n      capture: Boolean = false\n  ): Callback = {\n    val cb: js.Function1[Event, Unit] = (e: Event) => _cb(e).runNow()\n    element.addEventListener(tpe, cb, capture)\n    Callback(element.removeEventListener(tpe, cb, capture))\n  }\n}\n\nobject RCustomStyles extends RCustomStyles\n\n/**\n  * Eventually these should be copied to scalajs-react core\n  */\ntrait RCustomStyles {\n  val MsFlexAlign          = VdomStyle(\"MsFlexAlign\")\n  val MsFlexDirection      = VdomStyle(\"MsFlexDirection\")\n  val MsFlexWrap           = VdomStyle(\"MsFlexWrap\")\n  val WebkitAlignItems     = VdomStyle(\"WebkitAlignItems\")\n  val WebkitBackgroundClip = VdomStyle(\"WebkitBackgroundClip\")\n  val WebkitBoxAlign       = VdomStyle(\"WebkitBoxAlign\")\n  val WebkitBoxDirection   = VdomStyle(\"WebkitBoxDirection\")\n  val WebkitBoxOrient      = VdomStyle(\"WebkitBoxOrient\")\n  val WebkitBoxShadow      = VdomStyle(\"WebkitBoxShadow\")\n  val WebkitFlexDirection  = VdomStyle(\"WebkitFlexDirection\")\n  val WebkitFlexWrap       = VdomStyle(\"WebkitFlexWrap\")\n  val WebkitTransform      = VdomStyle(\"WebkitTransform\")\n  val mozTransform         = VdomStyle(\"mozTransform\")\n  val msTransform          = VdomStyle(\"msTransform\")\n}"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/hljs/HLJSStatic.scala",
    "content": "package chandu0101.scalajs.react.components.hljs\n\nimport scala.scalajs.js\n\n@js.native\ntrait HLJSStatic extends js.Object {\n  var APOS_STRING_MODE: IMode = js.native\n  // Common modes\n  var BACKSLASH_ESCAPE: IMode     = js.native\n  var BINARY_NUMBER_MODE: IMode   = js.native\n  var BINARY_NUMBER_RE: String    = js.native\n  var CSS_NUMBER_MODE: IMode      = js.native\n  var C_BLOCK_COMMENT_MODE: IMode = js.native\n  var C_LINE_COMMENT_MODE: IMode  = js.native\n  var C_NUMBER_MODE: IMode        = js.native\n  var C_NUMBER_RE: String         = js.native\n  var HASH_COMMENT_MODE: IMode    = js.native\n  // Common regexps\n  var IDENT_RE: String                                      = js.native\n  var NUMBER_MODE: IMode                                    = js.native\n  var NUMBER_RE: String                                     = js.native\n  var PHRASAL_WORDS_MODE: IMode                             = js.native\n  var QUOTE_STRING_MODE: IMode                              = js.native\n  var REGEX_MODE: IMode                                     = js.native\n  var RE_STARTERS_RE: String                                = js.native\n  var TITLE_MODE: IMode                                     = js.native\n  var UNDERSCORE_IDENT_RE: String                           = js.native\n  var UNDERSCORE_TITLE_MODE: IMode                          = js.native\n  def inherit(parent: js.Object, obj: js.Object): js.Object = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/hljs/Hljs.scala",
    "content": "package chandu0101.scalajs.react.components.hljs\n\nimport org.scalajs.dom.Node\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation._\nimport scala.scalajs.js.{RegExp, UndefOr, `|`}\n\nobject Css {\n  @js.native @JSImport(\"highlight.js/styles/github.css\", JSImport.Namespace)\n  object Github extends js.Any\n}\n\nobject Languages {\n  @js.native @JSImport(\"highlight.js/lib/languages/scala\", JSImport.Namespace)\n  object Scala extends js.Function1[ /* hljs */ js.UndefOr[HLJSStatic], IModeBase] {\n    override def apply(arg1: UndefOr[HLJSStatic]): IModeBase = js.native\n  }\n}\n\n@JSImport(\"highlight.js/lib/highlight.js\", JSImport.Default)\n@js.native\nobject Hljs extends js.Any {\n  var APOS_STRING_MODE: IMode                                                           = js.native\n  var BACKSLASH_ESCAPE: IMode                                                           = js.native\n  var BINARY_NUMBER_MODE: IMode                                                         = js.native\n  var BINARY_NUMBER_RE: String                                                          = js.native\n  var CSS_NUMBER_MODE: IMode                                                            = js.native\n  var C_BLOCK_COMMENT_MODE: IMode                                                       = js.native\n  var C_LINE_COMMENT_MODE: IMode                                                        = js.native\n  var C_NUMBER_MODE: IMode                                                              = js.native\n  var C_NUMBER_RE: String                                                               = js.native\n  var HASH_COMMENT_MODE: IMode                                                          = js.native\n  var IDENT_RE: String                                                                  = js.native\n  var NUMBER_MODE: IMode                                                                = js.native\n  var NUMBER_RE: String                                                                 = js.native\n  var PHRASAL_WORDS_MODE: IMode                                                         = js.native\n  var QUOTE_STRING_MODE: IMode                                                          = js.native\n  var REGEX_MODE: IMode                                                                 = js.native\n  var RE_STARTERS_RE: String                                                            = js.native\n  var TITLE_MODE: IMode                                                                 = js.native\n  var UNDERSCORE_IDENT_RE: String                                                       = js.native\n  var UNDERSCORE_TITLE_MODE: IMode                                                      = js.native\n  def COMMENT(begin: String | RegExp, end: String | RegExp, inherits: IModeBase): IMode = js.native\n  def configure(options: IOptions): Unit                                                = js.native\n  def fixMarkup(value: String): String                                                  = js.native\n  def getLanguage(name: String): IMode                                                  = js.native\n  def highlight(name: String, value: String): IHighlightResult                          = js.native\n  def highlight(name: String, value: String, ignore_illegals: Boolean): IHighlightResult =\n    js.native\n  def highlight(name: String,\n                value: String,\n                ignore_illegals: Boolean,\n                continuation: Boolean): IHighlightResult = js.native\n  def highlightAuto(value: String): IAutoHighlightResult = js.native\n  def highlightAuto(value: String, languageSubset: js.Array[String]): IAutoHighlightResult =\n    js.native\n  def highlightBlock(block: Node): Unit                     = js.native\n  def inherit(parent: js.Object, obj: js.Object): js.Object = js.native\n  def initHighlighting(): Unit                              = js.native\n  def initHighlightingOnLoad(): Unit                        = js.native\n  def listLanguages(): js.Array[String]                     = js.native\n  def registerLanguage(\n      name: String,\n      language: js.Function1[ /* hljs */ js.UndefOr[HLJSStatic], IModeBase]): Unit = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/hljs/IAutoHighlightResult.scala",
    "content": "package chandu0101.scalajs.react.components.hljs\n\nimport scala.scalajs.js\n\n@js.native\ntrait IAutoHighlightResult extends IHighlightResultBase {\n  var second_best: js.UndefOr[IAutoHighlightResult] = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/hljs/ICompiledMode.scala",
    "content": "package chandu0101.scalajs.react.components.hljs\n\nimport scala.scalajs.js\nimport scala.scalajs.js.RegExp\n\n@js.native\ntrait ICompiledMode extends IModeBase {\n  var compiled: Boolean                             = js.native\n  var contains: js.UndefOr[js.Array[ICompiledMode]] = js.native\n  var keywords: js.UndefOr[js.Object]               = js.native\n  var terminator_end: js.UndefOr[String]            = js.native\n  var terminators: RegExp                           = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/hljs/IHighlightResult.scala",
    "content": "package chandu0101.scalajs.react.components.hljs\n\nimport scala.scalajs.js\n\n@js.native\ntrait IHighlightResult extends IHighlightResultBase {\n  var top: ICompiledMode = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/hljs/IHighlightResultBase.scala",
    "content": "package chandu0101.scalajs.react.components.hljs\n\nimport scala.scalajs.js\n\n@js.native\ntrait IHighlightResultBase extends js.Object {\n  var language: String  = js.native\n  var relevance: Double = js.native\n  var value: String     = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/hljs/IMode.scala",
    "content": "package chandu0101.scalajs.react.components.hljs\n\nimport scala.scalajs.js\n\n@js.native\ntrait IMode extends IModeBase {\n  var contains: js.UndefOr[js.Array[IMode]] = js.native\n  var keywords: js.UndefOr[Any]             = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/hljs/IModeBase.scala",
    "content": "package chandu0101.scalajs.react.components.hljs\n\nimport scala.scalajs.js\nimport scala.scalajs.js.{RegExp, `|`}\n\n@js.native\ntrait IModeBase extends js.Object {\n  var aliases: js.UndefOr[js.Array[String]] = js.native\n  var begin: js.UndefOr[String | RegExp]    = js.native\n  var beginKeyword: js.UndefOr[String]      = js.native\n  var case_insensitive: js.UndefOr[Boolean] = js.native\n  var className: js.UndefOr[String]         = js.native\n  var end: js.UndefOr[String | RegExp]      = js.native\n  var endsWithParent: js.UndefOr[Boolean]   = js.native\n  var excludeBegin: js.UndefOr[Boolean]     = js.native\n  var excludeEnd: js.UndefOr[Boolean]       = js.native\n  var illegal: js.UndefOr[String]           = js.native\n  var lexems: js.UndefOr[String]            = js.native\n  var relevance: js.UndefOr[Double]         = js.native\n  var returnBegin: js.UndefOr[Boolean]      = js.native\n  var returnEnd: js.UndefOr[Boolean]        = js.native\n  var starts: js.UndefOr[String]            = js.native\n  var subLanguage: js.UndefOr[String]       = js.native\n  var subLanguageMode: js.UndefOr[String]   = js.native\n  var variants: js.UndefOr[js.Array[IMode]] = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/hljs/IOptions.scala",
    "content": "package chandu0101.scalajs.react.components.hljs\n\nimport scala.scalajs.js\n\n@js.native\ntrait IOptions extends js.Object {\n  var classPrefix: js.UndefOr[String]         = js.native\n  var languages: js.UndefOr[js.Array[String]] = js.native\n  var tabReplace: js.UndefOr[String]          = js.native\n  var useBR: js.UndefOr[Boolean]              = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/materialui/Mui.scala",
    "content": "package chandu0101.scalajs.react.components.materialui\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation._\n\nobject Mui {\n  @js.native @JSImport(\"material-ui/AppBar\", JSImport.Default) object AppBar extends js.Any\n  @js.native @JSImport(\"material-ui/AutoComplete\", JSImport.Default) object AutoComplete\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Avatar\", JSImport.Default) object Avatar extends js.Any\n  @js.native @JSImport(\"material-ui/Badge\", JSImport.Default) object Badge   extends js.Any\n  @js.native @JSImport(\"material-ui/BottomNavigation\", JSImport.Default) object BottomNavigation\n      extends js.Any\n  @js.native @JSImport(\"material-ui/BottomNavigation/BottomNavigationItem\", JSImport.Default) object BottomNavigationItem\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Card\", JSImport.Default) object Card extends js.Any\n  @js.native @JSImport(\"material-ui/Card/CardActions\", JSImport.Default) object CardActions\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Card/CardHeader\", JSImport.Default) object CardHeader\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Card/CardMedia\", JSImport.Default) object CardMedia\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Card/CardTitle\", JSImport.Default) object CardTitle\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Card/CardText\", JSImport.Default) object CardText extends js.Any\n  @js.native @JSImport(\"material-ui/Checkbox\", JSImport.Default) object Checkbox      extends js.Any\n  @js.native @JSImport(\"material-ui/Chip\", JSImport.Default) object Chip              extends js.Any\n  @js.native @JSImport(\"material-ui/CircularProgress\", JSImport.Default) object CircularProgress\n      extends js.Any\n  @js.native @JSImport(\"material-ui/DatePicker\", JSImport.Default) object DatePicker extends js.Any\n  @js.native @JSImport(\"material-ui/Dialog\", JSImport.Default) object Dialog         extends js.Any\n  @js.native @JSImport(\"material-ui/Divider\", JSImport.Default) object Divider       extends js.Any\n  @js.native @JSImport(\"material-ui/Drawer\", JSImport.Default) object Drawer         extends js.Any\n  @js.native @JSImport(\"material-ui/DropDownMenu\", JSImport.Default) object DropDownMenu\n      extends js.Any\n  @js.native @JSImport(\"material-ui/FlatButton\", JSImport.Default) object FlatButton extends js.Any\n  @js.native @JSImport(\"material-ui/FloatingActionButton\", JSImport.Default) object FloatingActionButton\n      extends js.Any\n  @js.native @JSImport(\"material-ui/FontIcon\", JSImport.Default) object FontIcon extends js.Any\n  @js.native @JSImport(\"material-ui/GridList\", JSImport.Default) object GridList extends js.Any\n  @js.native @JSImport(\"material-ui/GridList/GridTile\", JSImport.Default) object GridTile\n      extends js.Any\n  @js.native @JSImport(\"material-ui/IconButton\", JSImport.Default) object IconButton extends js.Any\n  @js.native @JSImport(\"material-ui/IconMenu\", JSImport.Default) object IconMenu     extends js.Any\n  @js.native @JSImport(\"material-ui/LinearProgress\", JSImport.Default) object LinearProgress\n      extends js.Any\n  @js.native @JSImport(\"material-ui/List\", JSImport.Default) object List              extends js.Any\n  @js.native @JSImport(\"material-ui/List/ListItem\", JSImport.Default) object ListItem extends js.Any\n  @js.native @JSImport(\"material-ui/List/makeSelectable\", JSImport.Default) object makeSelectable\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Menu\", JSImport.Default) object Menu         extends js.Any\n  @js.native @JSImport(\"material-ui/MenuItem\", JSImport.Default) object MenuItem extends js.Any\n  @js.native @JSImport(\"material-ui/styles/MuiThemeProvider\", JSImport.Default) object MuiThemeProvider\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Paper\", JSImport.Default) object Paper     extends js.Any\n  @js.native @JSImport(\"material-ui/Popover\", JSImport.Default) object Popover extends js.Any\n  @js.native @JSImport(\"material-ui/RadioButton\", JSImport.Default) object RadioButton\n      extends js.Any\n  @js.native @JSImport(\"material-ui/RadioButton/RadioButtonGroup\", JSImport.Default) object RadioButtonGroup\n      extends js.Any\n  @js.native @JSImport(\"material-ui/RaisedButton\", JSImport.Default) object RaisedButton\n      extends js.Any\n  @js.native @JSImport(\"material-ui/RefreshIndicator\", JSImport.Default) object RefreshIndicator\n      extends js.Any\n  @js.native @JSImport(\"material-ui/SelectField\", JSImport.Default) object SelectField\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Slider\", JSImport.Default) object Slider       extends js.Any\n  @js.native @JSImport(\"material-ui/Subheader\", JSImport.Default) object Subheader extends js.Any\n  @js.native @JSImport(\"material-ui/SvgIcon\", JSImport.Default) object SvgIcon     extends js.Any\n  @js.native @JSImport(\"material-ui/Stepper/Step\", JSImport.Default) object Step   extends js.Any\n  @js.native @JSImport(\"material-ui/Stepper/StepButton\", JSImport.Default) object StepButton\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Stepper/StepContent\", JSImport.Default) object StepContent\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Stepper/StepLabel\", JSImport.Default) object StepLabel\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Stepper/Stepper\", JSImport.Default) object Stepper\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Snackbar\", JSImport.Default) object Snackbar extends js.Any\n  @js.native @JSImport(\"material-ui/Tabs\", JSImport.Default) object Tabs         extends js.Any\n  @js.native @JSImport(\"material-ui/Tabs/Tab\", JSImport.Default) object Tab      extends js.Any\n  @js.native @JSImport(\"material-ui/Table\", JSImport.Default) object Table       extends js.Any\n  @js.native @JSImport(\"material-ui/Table/TableBody\", JSImport.Default) object TableBody\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Table/TableFooter\", JSImport.Default) object TableFooter\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Table/TableHeader\", JSImport.Default) object TableHeader\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Table/TableHeaderColumn\", JSImport.Default) object TableHeaderColumn\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Table/TableRow\", JSImport.Default) object TableRow\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Table/TableRowColumn\", JSImport.Default) object TableRowColumn\n      extends js.Any\n  @js.native @JSImport(\"material-ui/TextField\", JSImport.Default) object TextField   extends js.Any\n  @js.native @JSImport(\"material-ui/TimePicker\", JSImport.Default) object TimePicker extends js.Any\n  @js.native @JSImport(\"material-ui/Toggle\", JSImport.Default) object Toggle         extends js.Any\n  @js.native @JSImport(\"material-ui/Toolbar\", JSImport.Default) object Toolbar       extends js.Any\n  @js.native @JSImport(\"material-ui/Toolbar/ToolbarGroup\", JSImport.Default) object ToolbarGroup\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Toolbar/ToolbarSeparator\", JSImport.Default) object ToolbarSeparator\n      extends js.Any\n  @js.native @JSImport(\"material-ui/Toolbar/ToolbarTitle\", JSImport.Default) object ToolbarTitle\n      extends js.Any\n  @js.native @JSImport(\"material-ui/styles\", JSImport.Default) object Styles extends MuiStyles\n  val SvgIcons = MuiSvgIcons\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/materialui/MuiAutoCompleteFilters.scala",
    "content": "package chandu0101.scalajs.react.components.materialui\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.JSImport\n\n@js.native @JSImport(\"material-ui/AutoComplete\", JSImport.Default)\nobject MuiAutoCompleteFilters extends js.Any {\n  val noFilter: js.Function3[String, String, String, Boolean]                  = js.native\n  val defaultFilter: js.Function3[String, String, String, Boolean]             = js.native\n  val caseInsensitiveFilter: js.Function3[String, String, String, Boolean]     = js.native\n  val levenshteinDistanceFilter: js.Function3[String, String, String, Boolean] = js.native\n  val fuzzyFilter: js.Function3[String, String, String, Boolean]               = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/materialui/MuiColors.scala",
    "content": "package chandu0101.scalajs.react.components.materialui\n\nimport scala.scalajs.js\n\n@js.native\ntrait MuiColors extends js.Object {\n  val red50: MuiColor          = js.native\n  val red100: MuiColor         = js.native\n  val red200: MuiColor         = js.native\n  val red300: MuiColor         = js.native\n  val red400: MuiColor         = js.native\n  val red500: MuiColor         = js.native\n  val red600: MuiColor         = js.native\n  val red700: MuiColor         = js.native\n  val red800: MuiColor         = js.native\n  val red900: MuiColor         = js.native\n  val redA100: MuiColor        = js.native\n  val redA200: MuiColor        = js.native\n  val redA400: MuiColor        = js.native\n  val redA700: MuiColor        = js.native\n  val pink50: MuiColor         = js.native\n  val pink100: MuiColor        = js.native\n  val pink200: MuiColor        = js.native\n  val pink300: MuiColor        = js.native\n  val pink400: MuiColor        = js.native\n  val pink500: MuiColor        = js.native\n  val pink600: MuiColor        = js.native\n  val pink700: MuiColor        = js.native\n  val pink800: MuiColor        = js.native\n  val pink900: MuiColor        = js.native\n  val pinkA100: MuiColor       = js.native\n  val pinkA200: MuiColor       = js.native\n  val pinkA400: MuiColor       = js.native\n  val pinkA700: MuiColor       = js.native\n  val purple50: MuiColor       = js.native\n  val purple100: MuiColor      = js.native\n  val purple200: MuiColor      = js.native\n  val purple300: MuiColor      = js.native\n  val purple400: MuiColor      = js.native\n  val purple500: MuiColor      = js.native\n  val purple600: MuiColor      = js.native\n  val purple700: MuiColor      = js.native\n  val purple800: MuiColor      = js.native\n  val purple900: MuiColor      = js.native\n  val purpleA100: MuiColor     = js.native\n  val purpleA200: MuiColor     = js.native\n  val purpleA400: MuiColor     = js.native\n  val purpleA700: MuiColor     = js.native\n  val deepPurple50: MuiColor   = js.native\n  val deepPurple100: MuiColor  = js.native\n  val deepPurple200: MuiColor  = js.native\n  val deepPurple300: MuiColor  = js.native\n  val deepPurple400: MuiColor  = js.native\n  val deepPurple500: MuiColor  = js.native\n  val deepPurple600: MuiColor  = js.native\n  val deepPurple700: MuiColor  = js.native\n  val deepPurple800: MuiColor  = js.native\n  val deepPurple900: MuiColor  = js.native\n  val deepPurpleA100: MuiColor = js.native\n  val deepPurpleA200: MuiColor = js.native\n  val deepPurpleA400: MuiColor = js.native\n  val deepPurpleA700: MuiColor = js.native\n  val indigo50: MuiColor       = js.native\n  val indigo100: MuiColor      = js.native\n  val indigo200: MuiColor      = js.native\n  val indigo300: MuiColor      = js.native\n  val indigo400: MuiColor      = js.native\n  val indigo500: MuiColor      = js.native\n  val indigo600: MuiColor      = js.native\n  val indigo700: MuiColor      = js.native\n  val indigo800: MuiColor      = js.native\n  val indigo900: MuiColor      = js.native\n  val indigoA100: MuiColor     = js.native\n  val indigoA200: MuiColor     = js.native\n  val indigoA400: MuiColor     = js.native\n  val indigoA700: MuiColor     = js.native\n  val blue50: MuiColor         = js.native\n  val blue100: MuiColor        = js.native\n  val blue200: MuiColor        = js.native\n  val blue300: MuiColor        = js.native\n  val blue400: MuiColor        = js.native\n  val blue500: MuiColor        = js.native\n  val blue600: MuiColor        = js.native\n  val blue700: MuiColor        = js.native\n  val blue800: MuiColor        = js.native\n  val blue900: MuiColor        = js.native\n  val blueA100: MuiColor       = js.native\n  val blueA200: MuiColor       = js.native\n  val blueA400: MuiColor       = js.native\n  val blueA700: MuiColor       = js.native\n  val lightBlue50: MuiColor    = js.native\n  val lightBlue100: MuiColor   = js.native\n  val lightBlue200: MuiColor   = js.native\n  val lightBlue300: MuiColor   = js.native\n  val lightBlue400: MuiColor   = js.native\n  val lightBlue500: MuiColor   = js.native\n  val lightBlue600: MuiColor   = js.native\n  val lightBlue700: MuiColor   = js.native\n  val lightBlue800: MuiColor   = js.native\n  val lightBlue900: MuiColor   = js.native\n  val lightBlueA100: MuiColor  = js.native\n  val lightBlueA200: MuiColor  = js.native\n  val lightBlueA400: MuiColor  = js.native\n  val lightBlueA700: MuiColor  = js.native\n  val cyan50: MuiColor         = js.native\n  val cyan100: MuiColor        = js.native\n  val cyan200: MuiColor        = js.native\n  val cyan300: MuiColor        = js.native\n  val cyan400: MuiColor        = js.native\n  val cyan500: MuiColor        = js.native\n  val cyan600: MuiColor        = js.native\n  val cyan700: MuiColor        = js.native\n  val cyan800: MuiColor        = js.native\n  val cyan900: MuiColor        = js.native\n  val cyanA100: MuiColor       = js.native\n  val cyanA200: MuiColor       = js.native\n  val cyanA400: MuiColor       = js.native\n  val cyanA700: MuiColor       = js.native\n  val teal50: MuiColor         = js.native\n  val teal100: MuiColor        = js.native\n  val teal200: MuiColor        = js.native\n  val teal300: MuiColor        = js.native\n  val teal400: MuiColor        = js.native\n  val teal500: MuiColor        = js.native\n  val teal600: MuiColor        = js.native\n  val teal700: MuiColor        = js.native\n  val teal800: MuiColor        = js.native\n  val teal900: MuiColor        = js.native\n  val tealA100: MuiColor       = js.native\n  val tealA200: MuiColor       = js.native\n  val tealA400: MuiColor       = js.native\n  val tealA700: MuiColor       = js.native\n  val green50: MuiColor        = js.native\n  val green100: MuiColor       = js.native\n  val green200: MuiColor       = js.native\n  val green300: MuiColor       = js.native\n  val green400: MuiColor       = js.native\n  val green500: MuiColor       = js.native\n  val green600: MuiColor       = js.native\n  val green700: MuiColor       = js.native\n  val green800: MuiColor       = js.native\n  val green900: MuiColor       = js.native\n  val greenA100: MuiColor      = js.native\n  val greenA200: MuiColor      = js.native\n  val greenA400: MuiColor      = js.native\n  val greenA700: MuiColor      = js.native\n  val lightGreen50: MuiColor   = js.native\n  val lightGreen100: MuiColor  = js.native\n  val lightGreen200: MuiColor  = js.native\n  val lightGreen300: MuiColor  = js.native\n  val lightGreen400: MuiColor  = js.native\n  val lightGreen500: MuiColor  = js.native\n  val lightGreen600: MuiColor  = js.native\n  val lightGreen700: MuiColor  = js.native\n  val lightGreen800: MuiColor  = js.native\n  val lightGreen900: MuiColor  = js.native\n  val lightGreenA100: MuiColor = js.native\n  val lightGreenA200: MuiColor = js.native\n  val lightGreenA400: MuiColor = js.native\n  val lightGreenA700: MuiColor = js.native\n  val lime50: MuiColor         = js.native\n  val lime100: MuiColor        = js.native\n  val lime200: MuiColor        = js.native\n  val lime300: MuiColor        = js.native\n  val lime400: MuiColor        = js.native\n  val lime500: MuiColor        = js.native\n  val lime600: MuiColor        = js.native\n  val lime700: MuiColor        = js.native\n  val lime800: MuiColor        = js.native\n  val lime900: MuiColor        = js.native\n  val limeA100: MuiColor       = js.native\n  val limeA200: MuiColor       = js.native\n  val limeA400: MuiColor       = js.native\n  val limeA700: MuiColor       = js.native\n  val yellow50: MuiColor       = js.native\n  val yellow100: MuiColor      = js.native\n  val yellow200: MuiColor      = js.native\n  val yellow300: MuiColor      = js.native\n  val yellow400: MuiColor      = js.native\n  val yellow500: MuiColor      = js.native\n  val yellow600: MuiColor      = js.native\n  val yellow700: MuiColor      = js.native\n  val yellow800: MuiColor      = js.native\n  val yellow900: MuiColor      = js.native\n  val yellowA100: MuiColor     = js.native\n  val yellowA200: MuiColor     = js.native\n  val yellowA400: MuiColor     = js.native\n  val yellowA700: MuiColor     = js.native\n  val amber50: MuiColor        = js.native\n  val amber100: MuiColor       = js.native\n  val amber200: MuiColor       = js.native\n  val amber300: MuiColor       = js.native\n  val amber400: MuiColor       = js.native\n  val amber500: MuiColor       = js.native\n  val amber600: MuiColor       = js.native\n  val amber700: MuiColor       = js.native\n  val amber800: MuiColor       = js.native\n  val amber900: MuiColor       = js.native\n  val amberA100: MuiColor      = js.native\n  val amberA200: MuiColor      = js.native\n  val amberA400: MuiColor      = js.native\n  val amberA700: MuiColor      = js.native\n  val orange50: MuiColor       = js.native\n  val orange100: MuiColor      = js.native\n  val orange200: MuiColor      = js.native\n  val orange300: MuiColor      = js.native\n  val orange400: MuiColor      = js.native\n  val orange500: MuiColor      = js.native\n  val orange600: MuiColor      = js.native\n  val orange700: MuiColor      = js.native\n  val orange800: MuiColor      = js.native\n  val orange900: MuiColor      = js.native\n  val orangeA100: MuiColor     = js.native\n  val orangeA200: MuiColor     = js.native\n  val orangeA400: MuiColor     = js.native\n  val orangeA700: MuiColor     = js.native\n  val deepOrange50: MuiColor   = js.native\n  val deepOrange100: MuiColor  = js.native\n  val deepOrange200: MuiColor  = js.native\n  val deepOrange300: MuiColor  = js.native\n  val deepOrange400: MuiColor  = js.native\n  val deepOrange500: MuiColor  = js.native\n  val deepOrange600: MuiColor  = js.native\n  val deepOrange700: MuiColor  = js.native\n  val deepOrange800: MuiColor  = js.native\n  val deepOrange900: MuiColor  = js.native\n  val deepOrangeA100: MuiColor = js.native\n  val deepOrangeA200: MuiColor = js.native\n  val deepOrangeA400: MuiColor = js.native\n  val deepOrangeA700: MuiColor = js.native\n  val brown50: MuiColor        = js.native\n  val brown100: MuiColor       = js.native\n  val brown200: MuiColor       = js.native\n  val brown300: MuiColor       = js.native\n  val brown400: MuiColor       = js.native\n  val brown500: MuiColor       = js.native\n  val brown600: MuiColor       = js.native\n  val brown700: MuiColor       = js.native\n  val brown800: MuiColor       = js.native\n  val brown900: MuiColor       = js.native\n  val blueGrey50: MuiColor     = js.native\n  val blueGrey100: MuiColor    = js.native\n  val blueGrey200: MuiColor    = js.native\n  val blueGrey300: MuiColor    = js.native\n  val blueGrey400: MuiColor    = js.native\n  val blueGrey500: MuiColor    = js.native\n  val blueGrey600: MuiColor    = js.native\n  val blueGrey700: MuiColor    = js.native\n  val blueGrey800: MuiColor    = js.native\n  val blueGrey900: MuiColor    = js.native\n  val grey50: MuiColor         = js.native\n  val grey100: MuiColor        = js.native\n  val grey200: MuiColor        = js.native\n  val grey300: MuiColor        = js.native\n  val grey400: MuiColor        = js.native\n  val grey500: MuiColor        = js.native\n  val grey600: MuiColor        = js.native\n  val grey700: MuiColor        = js.native\n  val grey800: MuiColor        = js.native\n  val grey900: MuiColor        = js.native\n  val black: MuiColor          = js.native\n  val white: MuiColor          = js.native\n  val transparent: MuiColor    = js.native\n  val fullBlack: MuiColor      = js.native\n  val darkBlack: MuiColor      = js.native\n  val lightBlack: MuiColor     = js.native\n  val minBlack: MuiColor       = js.native\n  val faintBlack: MuiColor     = js.native\n  val fullWhite: MuiColor      = js.native\n  val darkWhite: MuiColor      = js.native\n  val lightWhite: MuiColor     = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/materialui/MuiStyles.scala",
    "content": "package chandu0101.scalajs.react.components.materialui\n\nimport japgolly.scalajs.react._\n\nimport scala.scalajs.js\n\n@js.native\ntrait MuiColor extends js.Object\n\n@js.native\ntrait MuiStyles extends js.Object {\n  def getMuiTheme(raw: MuiRawTheme): MuiTheme = js.native\n  val AutoPrefix: js.Dynamic                  = js.native\n  val colors: MuiColors                       = js.native\n  val Spacing: MuiSpacings                    = js.native\n  val MuiThemeProvider: js.Dynamic            = js.native\n  val Typography: js.Dynamic                  = js.native\n  val Transitions: js.Dynamic                 = js.native\n  val DarkRawTheme: MuiRawTheme               = js.native\n  val LightRawTheme: MuiRawTheme              = js.native\n}\n\n@js.native\ntrait MuiSpacings extends js.Object {\n  val iconSize: Int                      = js.native\n  val desktopGutter: Int                 = js.native\n  val desktopGutterMore: Int             = js.native\n  val desktopGutterLess: Int             = js.native\n  val desktopGutterMini: Int             = js.native\n  val desktopKeylineIncrement: Int       = js.native\n  val desktopDropDownMenuItemHeight: Int = js.native\n  val desktopDropDownMenuFontSize: Int   = js.native\n  val desktopLeftNavMenuItemHeight: Int  = js.native\n  val desktopSubheaderHeight: Int        = js.native\n  val desktopToolbarHeight: Int          = js.native\n}\n\nobject MuiSpacings {\n  def apply(iconSize: Int,\n            desktopGutter: Int,\n            desktopGutterMore: Int,\n            desktopGutterLess: Int,\n            desktopGutterMini: Int,\n            desktopKeylineIncrement: Int,\n            desktopDropDownMenuItemHeight: Int,\n            desktopDropDownMenuFontSize: Int,\n            desktopLeftNavMenuItemHeight: Int,\n            desktopSubheaderHeight: Int,\n            desktopToolbarHeight: Int): MuiSpacings =\n    js.Dynamic\n      .literal(\n        iconSize = iconSize,\n        desktopGutter = desktopGutter,\n        desktopGutterMore = desktopGutterMore,\n        desktopGutterLess = desktopGutterLess,\n        desktopGutterMini = desktopGutterMini,\n        desktopKeylineIncrement = desktopKeylineIncrement,\n        desktopDropDownMenuItemHeight = desktopDropDownMenuItemHeight,\n        desktopDropDownMenuFontSize = desktopDropDownMenuFontSize,\n        desktopLeftNavMenuItemHeight = desktopLeftNavMenuItemHeight,\n        desktopSubheaderHeight = desktopSubheaderHeight,\n        desktopToolbarHeight = desktopToolbarHeight\n      )\n      .asInstanceOf[MuiSpacings]\n\n  implicit class MuiSpacingOps(s: MuiSpacings) {\n    def copy(iconSize: Int = s.iconSize,\n             desktopGutter: Int = s.desktopGutter,\n             desktopGutterMore: Int = s.desktopGutterMore,\n             desktopGutterLess: Int = s.desktopGutterLess,\n             desktopGutterMini: Int = s.desktopGutterMini,\n             desktopKeylineIncrement: Int = s.desktopKeylineIncrement,\n             desktopDropDownMenuItemHeight: Int = s.desktopDropDownMenuItemHeight,\n             desktopDropDownMenuFontSize: Int = s.desktopDropDownMenuFontSize,\n             desktopLeftNavMenuItemHeight: Int = s.desktopLeftNavMenuItemHeight,\n             desktopSubheaderHeight: Int = s.desktopSubheaderHeight,\n             desktopToolbarHeight: Int = s.desktopToolbarHeight): MuiSpacings =\n      js.Dynamic\n        .literal(\n          iconSize = iconSize,\n          desktopGutter = desktopGutter,\n          desktopGutterMore = desktopGutterMore,\n          desktopGutterLess = desktopGutterLess,\n          desktopGutterMini = desktopGutterMini,\n          desktopKeylineIncrement = desktopKeylineIncrement,\n          desktopDropDownMenuItemHeight = desktopDropDownMenuItemHeight,\n          desktopDropDownMenuFontSize = desktopDropDownMenuFontSize,\n          desktopLeftNavMenuItemHeight = desktopLeftNavMenuItemHeight,\n          desktopSubheaderHeight = desktopSubheaderHeight,\n          desktopToolbarHeight = desktopToolbarHeight\n        )\n        .asInstanceOf[MuiSpacings]\n  }\n}\n\n@js.native\ntrait MuiPalette extends js.Object {\n  val primary1Color: MuiColor      = js.native\n  val primary2Color: MuiColor      = js.native\n  val primary3Color: MuiColor      = js.native\n  val accent1Color: MuiColor       = js.native\n  val accent2Color: MuiColor       = js.native\n  val accent3Color: MuiColor       = js.native\n  val textColor: MuiColor          = js.native\n  val alternateTextColor: MuiColor = js.native\n  val canvasColor: MuiColor        = js.native\n  val borderColor: MuiColor        = js.native\n  val disabledColor: MuiColor      = js.native\n}\n\nobject MuiPalette {\n  def apply(primary1Color: MuiColor,\n            primary2Color: MuiColor,\n            primary3Color: MuiColor,\n            accent1Color: MuiColor,\n            accent2Color: MuiColor,\n            accent3Color: MuiColor,\n            textColor: MuiColor,\n            alternateTextColor: MuiColor,\n            canvasColor: MuiColor,\n            borderColor: MuiColor,\n            disabledColor: MuiColor): MuiPalette = {\n    js.Dynamic\n      .literal(\n        primary1Color = primary1Color,\n        primary2Color = primary2Color,\n        primary3Color = primary3Color,\n        accent1Color = accent1Color,\n        accent2Color = accent2Color,\n        accent3Color = accent3Color,\n        textColor = textColor,\n        alternateTextColor = alternateTextColor,\n        canvasColor = canvasColor,\n        borderColor = borderColor,\n        disabledColor = disabledColor\n      )\n      .asInstanceOf[MuiPalette]\n  }\n\n  implicit class MuiPaletteOps(p: MuiPalette) {\n    def copy(primary1Color: MuiColor = p.primary1Color,\n             primary2Color: MuiColor = p.primary2Color,\n             primary3Color: MuiColor = p.primary3Color,\n             accent1Color: MuiColor = p.accent1Color,\n             accent2Color: MuiColor = p.accent2Color,\n             accent3Color: MuiColor = p.accent3Color,\n             textColor: MuiColor = p.textColor,\n             alternateTextColor: MuiColor = p.alternateTextColor,\n             canvasColor: MuiColor = p.canvasColor,\n             borderColor: MuiColor = p.borderColor,\n             disabledColor: MuiColor = p.disabledColor): MuiPalette =\n      js.Dynamic\n        .literal(\n          primary1Color = primary1Color,\n          primary2Color = primary2Color,\n          primary3Color = primary3Color,\n          accent1Color = accent1Color,\n          accent2Color = accent2Color,\n          accent3Color = accent3Color,\n          textColor = textColor,\n          alternateTextColor = alternateTextColor,\n          canvasColor = canvasColor,\n          borderColor = borderColor,\n          disabledColor = disabledColor\n        )\n        .asInstanceOf[MuiPalette]\n  }\n}\n\n@js.native\ntrait MuiRawTheme extends js.Object {\n  val spacing: MuiSpacings = js.native\n  val fontFamily: String   = js.native\n  val palette: MuiPalette  = js.native\n}\n\nobject MuiRawTheme {\n  def apply(spacing: MuiSpacings, fontFamily: String, palette: MuiPalette): MuiRawTheme = {\n    js.Dynamic\n      .literal(spacing = spacing, fontFamily = fontFamily, palette = palette)\n      .asInstanceOf[MuiRawTheme]\n  }\n\n  implicit class MuiRawThemeOps(t: MuiRawTheme) {\n    def copy(spacing: MuiSpacings = t.spacing,\n             fontFamily: String = t.fontFamily,\n             palette: MuiPalette = t.palette): MuiRawTheme =\n      js.Dynamic\n        .literal(\n          spacing = spacing,\n          fontFamily = fontFamily,\n          palette = palette\n        )\n        .asInstanceOf[MuiRawTheme]\n  }\n}\n\n@js.native\ntrait MuiTheme extends js.Object\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/materialui/MuiSvgIcons.scala",
    "content": "package chandu0101.scalajs.react.components\npackage materialui\n\nimport japgolly.scalajs.react.component.Js.{RawMounted, UnmountedWithRawType}\nimport japgolly.scalajs.react.vdom.VdomNode\nimport japgolly.scalajs.react.{Callback, Children, JsComponent, ReactMouseEventFromHtml}\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.JSImport\n\n@js.native\ntrait MuiSvgIconProps extends js.Object {\n  def key: js.UndefOr[String]\n  def ref: js.UndefOr[String]\n  def color: js.UndefOr[String]\n  def hoverColor: js.UndefOr[String]\n  def onMouseEnter: js.UndefOr[ReactMouseEventFromHtml => Callback]\n  def onMouseLeave: js.UndefOr[ReactMouseEventFromHtml => Callback]\n  def style: js.UndefOr[CssProperties]\n  def viewBox: js.UndefOr[String]\n}\n\nobject MuiSvgIcon {\n  implicit class SvgIconApply(icon: MuiSvgIcon) {\n    def apply(\n        key: js.UndefOr[String] = js.undefined,\n        ref: js.UndefOr[String] = js.undefined,\n        color: js.UndefOr[String] = js.undefined,\n        hoverColor: js.UndefOr[MuiColor] = js.undefined,\n        onMouseEnter: js.UndefOr[ReactMouseEventFromHtml => Callback] = js.undefined,\n        onMouseLeave: js.UndefOr[ReactMouseEventFromHtml => Callback] = js.undefined,\n        style: js.UndefOr[CssProperties] = js.undefined,\n        viewBox: js.UndefOr[String] = js.undefined\n    )(children: VdomNode*): UnmountedWithRawType[MuiSvgIconProps, Null, RawMounted] = {\n\n      val props = js.Dynamic.literal()\n      key.foreach(v => props.updateDynamic(\"key\")(v))\n      ref.foreach(v => props.updateDynamic(\"ref\")(v))\n      color.foreach(v => props.updateDynamic(\"color\")(v))\n      hoverColor.foreach(v => props.updateDynamic(\"hoverColor\")(v))\n      onMouseEnter.foreach(v => props.updateDynamic(\"onMouseEnter\")(v andThen (_.runNow())))\n      onMouseLeave.foreach(v => props.updateDynamic(\"onMouseLeave\")(v andThen (_.runNow())))\n      style.foreach(v => props.updateDynamic(\"style\")(v))\n      viewBox.foreach(v => props.updateDynamic(\"viewBox\")(v))\n\n      val svgProps: MuiSvgIconProps =\n        props.asInstanceOf[MuiSvgIconProps]\n\n      val Component = JsComponent[MuiSvgIconProps, Children.Varargs, Null](icon)\n      Component(svgProps)(children: _*)\n    }\n  }\n}\n\n@js.native\ntrait MuiSvgIcon extends js.Any\n\nobject MuiSvgIcons {\n  @js.native @JSImport(\"material-ui/svg-icons/action/accessibility\", JSImport.Default)\n  object ActionAccessibility extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/accessible\", JSImport.Default)\n  object ActionAccessible extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/account-balance-wallet\", JSImport.Default)\n  object ActionAccountBalanceWallet extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/account-balance\", JSImport.Default)\n  object ActionAccountBalance extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/account-box\", JSImport.Default)\n  object ActionAccountBox extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/account-circle\", JSImport.Default)\n  object ActionAccountCircle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/add-shopping-cart\", JSImport.Default)\n  object ActionAddShoppingCart extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/alarm-add\", JSImport.Default)\n  object ActionAlarmAdd extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/alarm-off\", JSImport.Default)\n  object ActionAlarmOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/alarm-on\", JSImport.Default)\n  object ActionAlarmOn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/alarm\", JSImport.Default)\n  object ActionAlarm extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/all-out\", JSImport.Default)\n  object ActionAllOut extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/android\", JSImport.Default)\n  object ActionAndroid extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/announcement\", JSImport.Default)\n  object ActionAnnouncement extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/aspect-ratio\", JSImport.Default)\n  object ActionAspectRatio extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/assessment\", JSImport.Default)\n  object ActionAssessment extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/assignment-ind\", JSImport.Default)\n  object ActionAssignmentInd extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/assignment-late\", JSImport.Default)\n  object ActionAssignmentLate extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/assignment-return\", JSImport.Default)\n  object ActionAssignmentReturn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/assignment-returned\", JSImport.Default)\n  object ActionAssignmentReturned extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/assignment-turned-in\", JSImport.Default)\n  object ActionAssignmentTurnedIn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/assignment\", JSImport.Default)\n  object ActionAssignment extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/autorenew\", JSImport.Default)\n  object ActionAutorenew extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/backup\", JSImport.Default)\n  object ActionBackup extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/book\", JSImport.Default)\n  object ActionBook extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/bookmark-border\", JSImport.Default)\n  object ActionBookmarkBorder extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/bookmark\", JSImport.Default)\n  object ActionBookmark extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/bug-report\", JSImport.Default)\n  object ActionBugReport extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/build\", JSImport.Default)\n  object ActionBuild extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/cached\", JSImport.Default)\n  object ActionCached extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/camera-enhance\", JSImport.Default)\n  object ActionCameraEnhance extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/card-giftcard\", JSImport.Default)\n  object ActionCardGiftcard extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/card-membership\", JSImport.Default)\n  object ActionCardMembership extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/card-travel\", JSImport.Default)\n  object ActionCardTravel extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/change-history\", JSImport.Default)\n  object ActionChangeHistory extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/check-circle\", JSImport.Default)\n  object ActionCheckCircle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/chrome-reader-mode\", JSImport.Default)\n  object ActionChromeReaderMode extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/class\", JSImport.Default)\n  object ActionClass extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/code\", JSImport.Default)\n  object ActionCode extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/compare-arrows\", JSImport.Default)\n  object ActionCompareArrows extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/copyright\", JSImport.Default)\n  object ActionCopyright extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/credit-card\", JSImport.Default)\n  object ActionCreditCard extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/dashboard\", JSImport.Default)\n  object ActionDashboard extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/date-range\", JSImport.Default)\n  object ActionDateRange extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/delete-forever\", JSImport.Default)\n  object ActionDeleteForever extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/delete\", JSImport.Default)\n  object ActionDelete extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/description\", JSImport.Default)\n  object ActionDescription extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/dns\", JSImport.Default)\n  object ActionDns extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/done-all\", JSImport.Default)\n  object ActionDoneAll extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/done\", JSImport.Default)\n  object ActionDone extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/donut-large\", JSImport.Default)\n  object ActionDonutLarge extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/donut-small\", JSImport.Default)\n  object ActionDonutSmall extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/eject\", JSImport.Default)\n  object ActionEject extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/euro-symbol\", JSImport.Default)\n  object ActionEuroSymbol extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/event-seat\", JSImport.Default)\n  object ActionEventSeat extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/event\", JSImport.Default)\n  object ActionEvent extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/exit-to-app\", JSImport.Default)\n  object ActionExitToApp extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/explore\", JSImport.Default)\n  object ActionExplore extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/extension\", JSImport.Default)\n  object ActionExtension extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/face\", JSImport.Default)\n  object ActionFace extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/favorite-border\", JSImport.Default)\n  object ActionFavoriteBorder extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/favorite\", JSImport.Default)\n  object ActionFavorite extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/feedback\", JSImport.Default)\n  object ActionFeedback extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/find-in-page\", JSImport.Default)\n  object ActionFindInPage extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/find-replace\", JSImport.Default)\n  object ActionFindReplace extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/fingerprint\", JSImport.Default)\n  object ActionFingerprint extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/flight-land\", JSImport.Default)\n  object ActionFlightLand extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/flight-takeoff\", JSImport.Default)\n  object ActionFlightTakeoff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/flip-to-back\", JSImport.Default)\n  object ActionFlipToBack extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/flip-to-front\", JSImport.Default)\n  object ActionFlipToFront extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/g-translate\", JSImport.Default)\n  object ActionGTranslate extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/gavel\", JSImport.Default)\n  object ActionGavel extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/get-app\", JSImport.Default)\n  object ActionGetApp extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/gif\", JSImport.Default)\n  object ActionGif extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/grade\", JSImport.Default)\n  object ActionGrade extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/group-work\", JSImport.Default)\n  object ActionGroupWork extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/help-outline\", JSImport.Default)\n  object ActionHelpOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/help\", JSImport.Default)\n  object ActionHelp extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/highlight-off\", JSImport.Default)\n  object ActionHighlightOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/history\", JSImport.Default)\n  object ActionHistory extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/home\", JSImport.Default)\n  object ActionHome extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/hourglass-empty\", JSImport.Default)\n  object ActionHourglassEmpty extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/hourglass-full\", JSImport.Default)\n  object ActionHourglassFull extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/http\", JSImport.Default)\n  object ActionHttp extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/https\", JSImport.Default)\n  object ActionHttps extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/important-devices\", JSImport.Default)\n  object ActionImportantDevices extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/info-outline\", JSImport.Default)\n  object ActionInfoOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/info\", JSImport.Default)\n  object ActionInfo extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/input\", JSImport.Default)\n  object ActionInput extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/invert-colors\", JSImport.Default)\n  object ActionInvertColors extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/label-outline\", JSImport.Default)\n  object ActionLabelOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/label\", JSImport.Default)\n  object ActionLabel extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/language\", JSImport.Default)\n  object ActionLanguage extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/launch\", JSImport.Default)\n  object ActionLaunch extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/lightbulb-outline\", JSImport.Default)\n  object ActionLightbulbOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/line-style\", JSImport.Default)\n  object ActionLineStyle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/line-weight\", JSImport.Default)\n  object ActionLineWeight extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/list\", JSImport.Default)\n  object ActionList extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/lock-open\", JSImport.Default)\n  object ActionLockOpen extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/lock-outline\", JSImport.Default)\n  object ActionLockOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/lock\", JSImport.Default)\n  object ActionLock extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/loyalty\", JSImport.Default)\n  object ActionLoyalty extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/markunread-mailbox\", JSImport.Default)\n  object ActionMarkunreadMailbox extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/motorcycle\", JSImport.Default)\n  object ActionMotorcycle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/note-add\", JSImport.Default)\n  object ActionNoteAdd extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/offline-pin\", JSImport.Default)\n  object ActionOfflinePin extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/opacity\", JSImport.Default)\n  object ActionOpacity extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/open-in-browser\", JSImport.Default)\n  object ActionOpenInBrowser extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/open-in-new\", JSImport.Default)\n  object ActionOpenInNew extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/open-with\", JSImport.Default)\n  object ActionOpenWith extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/pageview\", JSImport.Default)\n  object ActionPageview extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/pan-tool\", JSImport.Default)\n  object ActionPanTool extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/payment\", JSImport.Default)\n  object ActionPayment extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/perm-camera-mic\", JSImport.Default)\n  object ActionPermCameraMic extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/perm-contact-calendar\", JSImport.Default)\n  object ActionPermContactCalendar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/perm-data-setting\", JSImport.Default)\n  object ActionPermDataSetting extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/perm-device-information\", JSImport.Default)\n  object ActionPermDeviceInformation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/perm-identity\", JSImport.Default)\n  object ActionPermIdentity extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/perm-media\", JSImport.Default)\n  object ActionPermMedia extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/perm-phone-msg\", JSImport.Default)\n  object ActionPermPhoneMsg extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/perm-scan-wifi\", JSImport.Default)\n  object ActionPermScanWifi extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/pets\", JSImport.Default)\n  object ActionPets extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/picture-in-picture-alt\", JSImport.Default)\n  object ActionPictureInPictureAlt extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/picture-in-picture\", JSImport.Default)\n  object ActionPictureInPicture extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/play-for-work\", JSImport.Default)\n  object ActionPlayForWork extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/polymer\", JSImport.Default)\n  object ActionPolymer extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/power-settings-new\", JSImport.Default)\n  object ActionPowerSettingsNew extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/pregnant-woman\", JSImport.Default)\n  object ActionPregnantWoman extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/print\", JSImport.Default)\n  object ActionPrint extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/query-builder\", JSImport.Default)\n  object ActionQueryBuilder extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/question-answer\", JSImport.Default)\n  object ActionQuestionAnswer extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/receipt\", JSImport.Default)\n  object ActionReceipt extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/record-voice-over\", JSImport.Default)\n  object ActionRecordVoiceOver extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/redeem\", JSImport.Default)\n  object ActionRedeem extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/remove-shopping-cart\", JSImport.Default)\n  object ActionRemoveShoppingCart extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/reorder\", JSImport.Default)\n  object ActionReorder extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/report-problem\", JSImport.Default)\n  object ActionReportProblem extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/restore-page\", JSImport.Default)\n  object ActionRestorePage extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/restore\", JSImport.Default)\n  object ActionRestore extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/room\", JSImport.Default)\n  object ActionRoom extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/rounded-corner\", JSImport.Default)\n  object ActionRoundedCorner extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/rowing\", JSImport.Default)\n  object ActionRowing extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/schedule\", JSImport.Default)\n  object ActionSchedule extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/search\", JSImport.Default)\n  object ActionSearch extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-applications\", JSImport.Default)\n  object ActionSettingsApplications extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-backup-restore\", JSImport.Default)\n  object ActionSettingsBackupRestore extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-bluetooth\", JSImport.Default)\n  object ActionSettingsBluetooth extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-brightness\", JSImport.Default)\n  object ActionSettingsBrightness extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-cell\", JSImport.Default)\n  object ActionSettingsCell extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-ethernet\", JSImport.Default)\n  object ActionSettingsEthernet extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-input-antenna\", JSImport.Default)\n  object ActionSettingsInputAntenna extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-input-component\", JSImport.Default)\n  object ActionSettingsInputComponent extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-input-composite\", JSImport.Default)\n  object ActionSettingsInputComposite extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-input-hdmi\", JSImport.Default)\n  object ActionSettingsInputHdmi extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-input-svideo\", JSImport.Default)\n  object ActionSettingsInputSvideo extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-overscan\", JSImport.Default)\n  object ActionSettingsOverscan extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-phone\", JSImport.Default)\n  object ActionSettingsPhone extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-power\", JSImport.Default)\n  object ActionSettingsPower extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-remote\", JSImport.Default)\n  object ActionSettingsRemote extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings-voice\", JSImport.Default)\n  object ActionSettingsVoice extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/settings\", JSImport.Default)\n  object ActionSettings extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/shop-two\", JSImport.Default)\n  object ActionShopTwo extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/shop\", JSImport.Default)\n  object ActionShop extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/shopping-basket\", JSImport.Default)\n  object ActionShoppingBasket extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/shopping-cart\", JSImport.Default)\n  object ActionShoppingCart extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/speaker-notes-off\", JSImport.Default)\n  object ActionSpeakerNotesOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/speaker-notes\", JSImport.Default)\n  object ActionSpeakerNotes extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/spellcheck\", JSImport.Default)\n  object ActionSpellcheck extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/stars\", JSImport.Default)\n  object ActionStars extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/store\", JSImport.Default)\n  object ActionStore extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/subject\", JSImport.Default)\n  object ActionSubject extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/supervisor-account\", JSImport.Default)\n  object ActionSupervisorAccount extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/swap-horiz\", JSImport.Default)\n  object ActionSwapHoriz extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/swap-vert\", JSImport.Default)\n  object ActionSwapVert extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/swap-vertical-circle\", JSImport.Default)\n  object ActionSwapVerticalCircle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/system-update-alt\", JSImport.Default)\n  object ActionSystemUpdateAlt extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/tab-unselected\", JSImport.Default)\n  object ActionTabUnselected extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/tab\", JSImport.Default)\n  object ActionTab extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/theaters\", JSImport.Default)\n  object ActionTheaters extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/three-d-rotation\", JSImport.Default)\n  object ActionThreeDRotation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/thumb-down\", JSImport.Default)\n  object ActionThumbDown extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/thumb-up\", JSImport.Default)\n  object ActionThumbUp extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/thumbs-up-down\", JSImport.Default)\n  object ActionThumbsUpDown extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/timeline\", JSImport.Default)\n  object ActionTimeline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/toc\", JSImport.Default)\n  object ActionToc extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/today\", JSImport.Default)\n  object ActionToday extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/toll\", JSImport.Default)\n  object ActionToll extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/touch-app\", JSImport.Default)\n  object ActionTouchApp extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/track-changes\", JSImport.Default)\n  object ActionTrackChanges extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/translate\", JSImport.Default)\n  object ActionTranslate extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/trending-down\", JSImport.Default)\n  object ActionTrendingDown extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/trending-flat\", JSImport.Default)\n  object ActionTrendingFlat extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/trending-up\", JSImport.Default)\n  object ActionTrendingUp extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/turned-in-not\", JSImport.Default)\n  object ActionTurnedInNot extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/turned-in\", JSImport.Default)\n  object ActionTurnedIn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/update\", JSImport.Default)\n  object ActionUpdate extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/verified-user\", JSImport.Default)\n  object ActionVerifiedUser extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/view-agenda\", JSImport.Default)\n  object ActionViewAgenda extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/view-array\", JSImport.Default)\n  object ActionViewArray extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/view-carousel\", JSImport.Default)\n  object ActionViewCarousel extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/view-column\", JSImport.Default)\n  object ActionViewColumn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/view-day\", JSImport.Default)\n  object ActionViewDay extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/view-headline\", JSImport.Default)\n  object ActionViewHeadline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/view-list\", JSImport.Default)\n  object ActionViewList extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/view-module\", JSImport.Default)\n  object ActionViewModule extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/view-quilt\", JSImport.Default)\n  object ActionViewQuilt extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/view-stream\", JSImport.Default)\n  object ActionViewStream extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/view-week\", JSImport.Default)\n  object ActionViewWeek extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/visibility-off\", JSImport.Default)\n  object ActionVisibilityOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/visibility\", JSImport.Default)\n  object ActionVisibility extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/watch-later\", JSImport.Default)\n  object ActionWatchLater extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/work\", JSImport.Default)\n  object ActionWork extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/youtube-searched-for\", JSImport.Default)\n  object ActionYoutubeSearchedFor extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/zoom-in\", JSImport.Default)\n  object ActionZoomIn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/action/zoom-out\", JSImport.Default)\n  object ActionZoomOut extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/alert/add-alert\", JSImport.Default)\n  object AlertAddAlert extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/alert/error-outline\", JSImport.Default)\n  object AlertErrorOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/alert/error\", JSImport.Default)\n  object AlertError extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/alert/warning\", JSImport.Default)\n  object AlertWarning extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/add-to-queue\", JSImport.Default)\n  object AvAddToQueue extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/airplay\", JSImport.Default)\n  object AvAirplay extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/album\", JSImport.Default)\n  object AvAlbum extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/art-track\", JSImport.Default)\n  object AvArtTrack extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/av-timer\", JSImport.Default)\n  object AvAvTimer extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/branding-watermark\", JSImport.Default)\n  object AvBrandingWatermark extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/call-to-action\", JSImport.Default)\n  object AvCallToAction extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/closed-caption\", JSImport.Default)\n  object AvClosedCaption extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/equalizer\", JSImport.Default)\n  object AvEqualizer extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/explicit\", JSImport.Default)\n  object AvExplicit extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/fast-forward\", JSImport.Default)\n  object AvFastForward extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/fast-rewind\", JSImport.Default)\n  object AvFastRewind extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/featured-play-list\", JSImport.Default)\n  object AvFeaturedPlayList extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/featured-video\", JSImport.Default)\n  object AvFeaturedVideo extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/fiber-dvr\", JSImport.Default)\n  object AvFiberDvr extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/fiber-manual-record\", JSImport.Default)\n  object AvFiberManualRecord extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/fiber-new\", JSImport.Default)\n  object AvFiberNew extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/fiber-pin\", JSImport.Default)\n  object AvFiberPin extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/fiber-smart-record\", JSImport.Default)\n  object AvFiberSmartRecord extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/forward-10\", JSImport.Default)\n  object AvForward10 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/forward-30\", JSImport.Default)\n  object AvForward30 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/forward-5\", JSImport.Default)\n  object AvForward5 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/games\", JSImport.Default)\n  object AvGames extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/hd\", JSImport.Default)\n  object AvHd extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/hearing\", JSImport.Default)\n  object AvHearing extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/high-quality\", JSImport.Default)\n  object AvHighQuality extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/library-add\", JSImport.Default)\n  object AvLibraryAdd extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/library-books\", JSImport.Default)\n  object AvLibraryBooks extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/library-music\", JSImport.Default)\n  object AvLibraryMusic extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/loop\", JSImport.Default)\n  object AvLoop extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/mic-none\", JSImport.Default)\n  object AvMicNone extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/mic-off\", JSImport.Default)\n  object AvMicOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/mic\", JSImport.Default)\n  object AvMic extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/movie\", JSImport.Default)\n  object AvMovie extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/music-video\", JSImport.Default)\n  object AvMusicVideo extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/new-releases\", JSImport.Default)\n  object AvNewReleases extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/not-interested\", JSImport.Default)\n  object AvNotInterested extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/note\", JSImport.Default)\n  object AvNote extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/pause-circle-filled\", JSImport.Default)\n  object AvPauseCircleFilled extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/pause-circle-outline\", JSImport.Default)\n  object AvPauseCircleOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/pause\", JSImport.Default)\n  object AvPause extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/play-arrow\", JSImport.Default)\n  object AvPlayArrow extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/play-circle-filled\", JSImport.Default)\n  object AvPlayCircleFilled extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/play-circle-outline\", JSImport.Default)\n  object AvPlayCircleOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/playlist-add-check\", JSImport.Default)\n  object AvPlaylistAddCheck extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/playlist-add\", JSImport.Default)\n  object AvPlaylistAdd extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/playlist-play\", JSImport.Default)\n  object AvPlaylistPlay extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/queue-music\", JSImport.Default)\n  object AvQueueMusic extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/queue-play-next\", JSImport.Default)\n  object AvQueuePlayNext extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/queue\", JSImport.Default)\n  object AvQueue extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/radio\", JSImport.Default)\n  object AvRadio extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/recent-actors\", JSImport.Default)\n  object AvRecentActors extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/remove-from-queue\", JSImport.Default)\n  object AvRemoveFromQueue extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/repeat-one\", JSImport.Default)\n  object AvRepeatOne extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/repeat\", JSImport.Default)\n  object AvRepeat extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/replay-10\", JSImport.Default)\n  object AvReplay10 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/replay-30\", JSImport.Default)\n  object AvReplay30 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/replay-5\", JSImport.Default)\n  object AvReplay5 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/replay\", JSImport.Default)\n  object AvReplay extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/shuffle\", JSImport.Default)\n  object AvShuffle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/skip-next\", JSImport.Default)\n  object AvSkipNext extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/skip-previous\", JSImport.Default)\n  object AvSkipPrevious extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/slow-motion-video\", JSImport.Default)\n  object AvSlowMotionVideo extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/snooze\", JSImport.Default)\n  object AvSnooze extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/sort-by-alpha\", JSImport.Default)\n  object AvSortByAlpha extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/stop\", JSImport.Default)\n  object AvStop extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/subscriptions\", JSImport.Default)\n  object AvSubscriptions extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/subtitles\", JSImport.Default)\n  object AvSubtitles extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/surround-sound\", JSImport.Default)\n  object AvSurroundSound extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/video-call\", JSImport.Default)\n  object AvVideoCall extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/video-label\", JSImport.Default)\n  object AvVideoLabel extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/video-library\", JSImport.Default)\n  object AvVideoLibrary extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/videocam-off\", JSImport.Default)\n  object AvVideocamOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/videocam\", JSImport.Default)\n  object AvVideocam extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/volume-down\", JSImport.Default)\n  object AvVolumeDown extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/volume-mute\", JSImport.Default)\n  object AvVolumeMute extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/volume-off\", JSImport.Default)\n  object AvVolumeOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/volume-up\", JSImport.Default)\n  object AvVolumeUp extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/web-asset\", JSImport.Default)\n  object AvWebAsset extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/av/web\", JSImport.Default)\n  object AvWeb extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/business\", JSImport.Default)\n  object CommunicationBusiness extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/call-end\", JSImport.Default)\n  object CommunicationCallEnd extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/call-made\", JSImport.Default)\n  object CommunicationCallMade extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/call-merge\", JSImport.Default)\n  object CommunicationCallMerge extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/call-missed-outgoing\", JSImport.Default)\n  object CommunicationCallMissedOutgoing extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/call-missed\", JSImport.Default)\n  object CommunicationCallMissed extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/call-received\", JSImport.Default)\n  object CommunicationCallReceived extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/call-split\", JSImport.Default)\n  object CommunicationCallSplit extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/call\", JSImport.Default)\n  object CommunicationCall extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/chat-bubble-outline\", JSImport.Default)\n  object CommunicationChatBubbleOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/chat-bubble\", JSImport.Default)\n  object CommunicationChatBubble extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/chat\", JSImport.Default)\n  object CommunicationChat extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/clear-all\", JSImport.Default)\n  object CommunicationClearAll extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/comment\", JSImport.Default)\n  object CommunicationComment extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/contact-mail\", JSImport.Default)\n  object CommunicationContactMail extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/contact-phone\", JSImport.Default)\n  object CommunicationContactPhone extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/contacts\", JSImport.Default)\n  object CommunicationContacts extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/dialer-sip\", JSImport.Default)\n  object CommunicationDialerSip extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/dialpad\", JSImport.Default)\n  object CommunicationDialpad extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/email\", JSImport.Default)\n  object CommunicationEmail extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/forum\", JSImport.Default)\n  object CommunicationForum extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/import-contacts\", JSImport.Default)\n  object CommunicationImportContacts extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/import-export\", JSImport.Default)\n  object CommunicationImportExport extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/invert-colors-off\", JSImport.Default)\n  object CommunicationInvertColorsOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/live-help\", JSImport.Default)\n  object CommunicationLiveHelp extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/location-off\", JSImport.Default)\n  object CommunicationLocationOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/location-on\", JSImport.Default)\n  object CommunicationLocationOn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/mail-outline\", JSImport.Default)\n  object CommunicationMailOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/message\", JSImport.Default)\n  object CommunicationMessage extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/no-sim\", JSImport.Default)\n  object CommunicationNoSim extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/phone\", JSImport.Default)\n  object CommunicationPhone extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/phonelink-erase\", JSImport.Default)\n  object CommunicationPhonelinkErase extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/phonelink-lock\", JSImport.Default)\n  object CommunicationPhonelinkLock extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/phonelink-ring\", JSImport.Default)\n  object CommunicationPhonelinkRing extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/phonelink-setup\", JSImport.Default)\n  object CommunicationPhonelinkSetup extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/portable-wifi-off\", JSImport.Default)\n  object CommunicationPortableWifiOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/present-to-all\", JSImport.Default)\n  object CommunicationPresentToAll extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/ring-volume\", JSImport.Default)\n  object CommunicationRingVolume extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/rss-feed\", JSImport.Default)\n  object CommunicationRssFeed extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/screen-share\", JSImport.Default)\n  object CommunicationScreenShare extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/speaker-phone\", JSImport.Default)\n  object CommunicationSpeakerPhone extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/stay-current-landscape\",\n                       JSImport.Default)\n  object CommunicationStayCurrentLandscape extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/stay-current-portrait\",\n                       JSImport.Default)\n  object CommunicationStayCurrentPortrait extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/stay-primary-landscape\",\n                       JSImport.Default)\n  object CommunicationStayPrimaryLandscape extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/stay-primary-portrait\",\n                       JSImport.Default)\n  object CommunicationStayPrimaryPortrait extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/stop-screen-share\", JSImport.Default)\n  object CommunicationStopScreenShare extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/swap-calls\", JSImport.Default)\n  object CommunicationSwapCalls extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/textsms\", JSImport.Default)\n  object CommunicationTextsms extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/voicemail\", JSImport.Default)\n  object CommunicationVoicemail extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/communication/vpn-key\", JSImport.Default)\n  object CommunicationVpnKey extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/add-box\", JSImport.Default)\n  object ContentAddBox extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/add-circle-outline\", JSImport.Default)\n  object ContentAddCircleOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/add-circle\", JSImport.Default)\n  object ContentAddCircle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/add\", JSImport.Default)\n  object ContentAdd extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/archive\", JSImport.Default)\n  object ContentArchive extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/backspace\", JSImport.Default)\n  object ContentBackspace extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/block\", JSImport.Default)\n  object ContentBlock extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/clear\", JSImport.Default)\n  object ContentClear extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/content-copy\", JSImport.Default)\n  object ContentContentCopy extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/content-cut\", JSImport.Default)\n  object ContentContentCut extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/content-paste\", JSImport.Default)\n  object ContentContentPaste extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/create\", JSImport.Default)\n  object ContentCreate extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/delete-sweep\", JSImport.Default)\n  object ContentDeleteSweep extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/drafts\", JSImport.Default)\n  object ContentDrafts extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/filter-list\", JSImport.Default)\n  object ContentFilterList extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/flag\", JSImport.Default)\n  object ContentFlag extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/font-download\", JSImport.Default)\n  object ContentFontDownload extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/forward\", JSImport.Default)\n  object ContentForward extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/gesture\", JSImport.Default)\n  object ContentGesture extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/inbox\", JSImport.Default)\n  object ContentInbox extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/link\", JSImport.Default)\n  object ContentLink extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/low-priority\", JSImport.Default)\n  object ContentLowPriority extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/mail\", JSImport.Default)\n  object ContentMail extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/markunread\", JSImport.Default)\n  object ContentMarkunread extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/move-to-inbox\", JSImport.Default)\n  object ContentMoveToInbox extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/next-week\", JSImport.Default)\n  object ContentNextWeek extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/redo\", JSImport.Default)\n  object ContentRedo extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/remove-circle-outline\", JSImport.Default)\n  object ContentRemoveCircleOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/remove-circle\", JSImport.Default)\n  object ContentRemoveCircle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/remove\", JSImport.Default)\n  object ContentRemove extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/reply-all\", JSImport.Default)\n  object ContentReplyAll extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/reply\", JSImport.Default)\n  object ContentReply extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/report\", JSImport.Default)\n  object ContentReport extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/save\", JSImport.Default)\n  object ContentSave extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/select-all\", JSImport.Default)\n  object ContentSelectAll extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/send\", JSImport.Default)\n  object ContentSend extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/sort\", JSImport.Default)\n  object ContentSort extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/text-format\", JSImport.Default)\n  object ContentTextFormat extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/unarchive\", JSImport.Default)\n  object ContentUnarchive extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/undo\", JSImport.Default)\n  object ContentUndo extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/content/weekend\", JSImport.Default)\n  object ContentWeekend extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/access-alarm\", JSImport.Default)\n  object DeviceAccessAlarm extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/access-alarms\", JSImport.Default)\n  object DeviceAccessAlarms extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/access-time\", JSImport.Default)\n  object DeviceAccessTime extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/add-alarm\", JSImport.Default)\n  object DeviceAddAlarm extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/airplanemode-active\", JSImport.Default)\n  object DeviceAirplanemodeActive extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/airplanemode-inactive\", JSImport.Default)\n  object DeviceAirplanemodeInactive extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-20\", JSImport.Default)\n  object DeviceBattery20 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-30\", JSImport.Default)\n  object DeviceBattery30 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-50\", JSImport.Default)\n  object DeviceBattery50 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-60\", JSImport.Default)\n  object DeviceBattery60 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-80\", JSImport.Default)\n  object DeviceBattery80 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-90\", JSImport.Default)\n  object DeviceBattery90 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-alert\", JSImport.Default)\n  object DeviceBatteryAlert extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-charging-20\", JSImport.Default)\n  object DeviceBatteryCharging20 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-charging-30\", JSImport.Default)\n  object DeviceBatteryCharging30 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-charging-50\", JSImport.Default)\n  object DeviceBatteryCharging50 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-charging-60\", JSImport.Default)\n  object DeviceBatteryCharging60 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-charging-80\", JSImport.Default)\n  object DeviceBatteryCharging80 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-charging-90\", JSImport.Default)\n  object DeviceBatteryCharging90 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-charging-full\", JSImport.Default)\n  object DeviceBatteryChargingFull extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-full\", JSImport.Default)\n  object DeviceBatteryFull extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-std\", JSImport.Default)\n  object DeviceBatteryStd extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/battery-unknown\", JSImport.Default)\n  object DeviceBatteryUnknown extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/bluetooth-connected\", JSImport.Default)\n  object DeviceBluetoothConnected extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/bluetooth-disabled\", JSImport.Default)\n  object DeviceBluetoothDisabled extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/bluetooth-searching\", JSImport.Default)\n  object DeviceBluetoothSearching extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/bluetooth\", JSImport.Default)\n  object DeviceBluetooth extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/brightness-auto\", JSImport.Default)\n  object DeviceBrightnessAuto extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/brightness-high\", JSImport.Default)\n  object DeviceBrightnessHigh extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/brightness-low\", JSImport.Default)\n  object DeviceBrightnessLow extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/brightness-medium\", JSImport.Default)\n  object DeviceBrightnessMedium extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/data-usage\", JSImport.Default)\n  object DeviceDataUsage extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/developer-mode\", JSImport.Default)\n  object DeviceDeveloperMode extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/devices\", JSImport.Default)\n  object DeviceDevices extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/dvr\", JSImport.Default)\n  object DeviceDvr extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/gps-fixed\", JSImport.Default)\n  object DeviceGpsFixed extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/gps-not-fixed\", JSImport.Default)\n  object DeviceGpsNotFixed extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/gps-off\", JSImport.Default)\n  object DeviceGpsOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/graphic-eq\", JSImport.Default)\n  object DeviceGraphicEq extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/location-disabled\", JSImport.Default)\n  object DeviceLocationDisabled extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/location-searching\", JSImport.Default)\n  object DeviceLocationSearching extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/network-cell\", JSImport.Default)\n  object DeviceNetworkCell extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/network-wifi\", JSImport.Default)\n  object DeviceNetworkWifi extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/nfc\", JSImport.Default)\n  object DeviceNfc extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/screen-lock-landscape\", JSImport.Default)\n  object DeviceScreenLockLandscape extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/screen-lock-portrait\", JSImport.Default)\n  object DeviceScreenLockPortrait extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/screen-lock-rotation\", JSImport.Default)\n  object DeviceScreenLockRotation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/screen-rotation\", JSImport.Default)\n  object DeviceScreenRotation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/sd-storage\", JSImport.Default)\n  object DeviceSdStorage extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/settings-system-daydream\", JSImport.Default)\n  object DeviceSettingsSystemDaydream extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-0-bar\", JSImport.Default)\n  object DeviceSignalCellular0Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-1-bar\", JSImport.Default)\n  object DeviceSignalCellular1Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-2-bar\", JSImport.Default)\n  object DeviceSignalCellular2Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-3-bar\", JSImport.Default)\n  object DeviceSignalCellular3Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-4-bar\", JSImport.Default)\n  object DeviceSignalCellular4Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-connected-no-internet-0-bar\",\n                       JSImport.Default)\n  object DeviceSignalCellularConnectedNoInternet0Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-connected-no-internet-1-bar\",\n                       JSImport.Default)\n  object DeviceSignalCellularConnectedNoInternet1Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-connected-no-internet-2-bar\",\n                       JSImport.Default)\n  object DeviceSignalCellularConnectedNoInternet2Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-connected-no-internet-3-bar\",\n                       JSImport.Default)\n  object DeviceSignalCellularConnectedNoInternet3Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-connected-no-internet-4-bar\",\n                       JSImport.Default)\n  object DeviceSignalCellularConnectedNoInternet4Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-no-sim\", JSImport.Default)\n  object DeviceSignalCellularNoSim extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-null\", JSImport.Default)\n  object DeviceSignalCellularNull extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-cellular-off\", JSImport.Default)\n  object DeviceSignalCellularOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-wifi-0-bar\", JSImport.Default)\n  object DeviceSignalWifi0Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-wifi-1-bar-lock\", JSImport.Default)\n  object DeviceSignalWifi1BarLock extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-wifi-1-bar\", JSImport.Default)\n  object DeviceSignalWifi1Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-wifi-2-bar-lock\", JSImport.Default)\n  object DeviceSignalWifi2BarLock extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-wifi-2-bar\", JSImport.Default)\n  object DeviceSignalWifi2Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-wifi-3-bar-lock\", JSImport.Default)\n  object DeviceSignalWifi3BarLock extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-wifi-3-bar\", JSImport.Default)\n  object DeviceSignalWifi3Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-wifi-4-bar-lock\", JSImport.Default)\n  object DeviceSignalWifi4BarLock extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-wifi-4-bar\", JSImport.Default)\n  object DeviceSignalWifi4Bar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/signal-wifi-off\", JSImport.Default)\n  object DeviceSignalWifiOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/storage\", JSImport.Default)\n  object DeviceStorage extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/usb\", JSImport.Default)\n  object DeviceUsb extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/wallpaper\", JSImport.Default)\n  object DeviceWallpaper extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/widgets\", JSImport.Default)\n  object DeviceWidgets extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/wifi-lock\", JSImport.Default)\n  object DeviceWifiLock extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/device/wifi-tethering\", JSImport.Default)\n  object DeviceWifiTethering extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/attach-file\", JSImport.Default)\n  object EditorAttachFile extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/attach-money\", JSImport.Default)\n  object EditorAttachMoney extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/border-all\", JSImport.Default)\n  object EditorBorderAll extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/border-bottom\", JSImport.Default)\n  object EditorBorderBottom extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/border-clear\", JSImport.Default)\n  object EditorBorderClear extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/border-color\", JSImport.Default)\n  object EditorBorderColor extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/border-horizontal\", JSImport.Default)\n  object EditorBorderHorizontal extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/border-inner\", JSImport.Default)\n  object EditorBorderInner extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/border-left\", JSImport.Default)\n  object EditorBorderLeft extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/border-outer\", JSImport.Default)\n  object EditorBorderOuter extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/border-right\", JSImport.Default)\n  object EditorBorderRight extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/border-style\", JSImport.Default)\n  object EditorBorderStyle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/border-top\", JSImport.Default)\n  object EditorBorderTop extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/border-vertical\", JSImport.Default)\n  object EditorBorderVertical extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/bubble-chart\", JSImport.Default)\n  object EditorBubbleChart extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/drag-handle\", JSImport.Default)\n  object EditorDragHandle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-align-center\", JSImport.Default)\n  object EditorFormatAlignCenter extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-align-justify\", JSImport.Default)\n  object EditorFormatAlignJustify extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-align-left\", JSImport.Default)\n  object EditorFormatAlignLeft extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-align-right\", JSImport.Default)\n  object EditorFormatAlignRight extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-bold\", JSImport.Default)\n  object EditorFormatBold extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-clear\", JSImport.Default)\n  object EditorFormatClear extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-color-fill\", JSImport.Default)\n  object EditorFormatColorFill extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-color-reset\", JSImport.Default)\n  object EditorFormatColorReset extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-color-text\", JSImport.Default)\n  object EditorFormatColorText extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-indent-decrease\", JSImport.Default)\n  object EditorFormatIndentDecrease extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-indent-increase\", JSImport.Default)\n  object EditorFormatIndentIncrease extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-italic\", JSImport.Default)\n  object EditorFormatItalic extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-line-spacing\", JSImport.Default)\n  object EditorFormatLineSpacing extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-list-bulleted\", JSImport.Default)\n  object EditorFormatListBulleted extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-list-numbered\", JSImport.Default)\n  object EditorFormatListNumbered extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-paint\", JSImport.Default)\n  object EditorFormatPaint extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-quote\", JSImport.Default)\n  object EditorFormatQuote extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-shapes\", JSImport.Default)\n  object EditorFormatShapes extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-size\", JSImport.Default)\n  object EditorFormatSize extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-strikethrough\", JSImport.Default)\n  object EditorFormatStrikethrough extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-textdirection-l-to-r\", JSImport.Default)\n  object EditorFormatTextdirectionLToR extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-textdirection-r-to-l\", JSImport.Default)\n  object EditorFormatTextdirectionRToL extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/format-underlined\", JSImport.Default)\n  object EditorFormatUnderlined extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/functions\", JSImport.Default)\n  object EditorFunctions extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/highlight\", JSImport.Default)\n  object EditorHighlight extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/insert-chart\", JSImport.Default)\n  object EditorInsertChart extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/insert-comment\", JSImport.Default)\n  object EditorInsertComment extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/insert-drive-file\", JSImport.Default)\n  object EditorInsertDriveFile extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/insert-emoticon\", JSImport.Default)\n  object EditorInsertEmoticon extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/insert-invitation\", JSImport.Default)\n  object EditorInsertInvitation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/insert-link\", JSImport.Default)\n  object EditorInsertLink extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/insert-photo\", JSImport.Default)\n  object EditorInsertPhoto extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/linear-scale\", JSImport.Default)\n  object EditorLinearScale extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/merge-type\", JSImport.Default)\n  object EditorMergeType extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/mode-comment\", JSImport.Default)\n  object EditorModeComment extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/mode-edit\", JSImport.Default)\n  object EditorModeEdit extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/monetization-on\", JSImport.Default)\n  object EditorMonetizationOn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/money-off\", JSImport.Default)\n  object EditorMoneyOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/multiline-chart\", JSImport.Default)\n  object EditorMultilineChart extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/pie-chart-outlined\", JSImport.Default)\n  object EditorPieChartOutlined extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/pie-chart\", JSImport.Default)\n  object EditorPieChart extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/publish\", JSImport.Default)\n  object EditorPublish extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/short-text\", JSImport.Default)\n  object EditorShortText extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/show-chart\", JSImport.Default)\n  object EditorShowChart extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/space-bar\", JSImport.Default)\n  object EditorSpaceBar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/strikethrough-s\", JSImport.Default)\n  object EditorStrikethroughS extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/text-fields\", JSImport.Default)\n  object EditorTextFields extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/title\", JSImport.Default)\n  object EditorTitle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/vertical-align-bottom\", JSImport.Default)\n  object EditorVerticalAlignBottom extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/vertical-align-center\", JSImport.Default)\n  object EditorVerticalAlignCenter extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/vertical-align-top\", JSImport.Default)\n  object EditorVerticalAlignTop extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/editor/wrap-text\", JSImport.Default)\n  object EditorWrapText extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/attachment\", JSImport.Default)\n  object FileAttachment extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/cloud-circle\", JSImport.Default)\n  object FileCloudCircle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/cloud-done\", JSImport.Default)\n  object FileCloudDone extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/cloud-download\", JSImport.Default)\n  object FileCloudDownload extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/cloud-off\", JSImport.Default)\n  object FileCloudOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/cloud-queue\", JSImport.Default)\n  object FileCloudQueue extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/cloud-upload\", JSImport.Default)\n  object FileCloudUpload extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/cloud\", JSImport.Default)\n  object FileCloud extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/create-new-folder\", JSImport.Default)\n  object FileCreateNewFolder extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/file-download\", JSImport.Default)\n  object FileFileDownload extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/file-upload\", JSImport.Default)\n  object FileFileUpload extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/folder-open\", JSImport.Default)\n  object FileFolderOpen extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/folder-shared\", JSImport.Default)\n  object FileFolderShared extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/file/folder\", JSImport.Default)\n  object FileFolder extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/cast-connected\", JSImport.Default)\n  object HardwareCastConnected extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/cast\", JSImport.Default)\n  object HardwareCast extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/computer\", JSImport.Default)\n  object HardwareComputer extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/desktop-mac\", JSImport.Default)\n  object HardwareDesktopMac extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/desktop-windows\", JSImport.Default)\n  object HardwareDesktopWindows extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/developer-board\", JSImport.Default)\n  object HardwareDeveloperBoard extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/device-hub\", JSImport.Default)\n  object HardwareDeviceHub extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/devices-other\", JSImport.Default)\n  object HardwareDevicesOther extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/dock\", JSImport.Default)\n  object HardwareDock extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/gamepad\", JSImport.Default)\n  object HardwareGamepad extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/headset-mic\", JSImport.Default)\n  object HardwareHeadsetMic extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/headset\", JSImport.Default)\n  object HardwareHeadset extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/keyboard-arrow-down\", JSImport.Default)\n  object HardwareKeyboardArrowDown extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/keyboard-arrow-left\", JSImport.Default)\n  object HardwareKeyboardArrowLeft extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/keyboard-arrow-right\", JSImport.Default)\n  object HardwareKeyboardArrowRight extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/keyboard-arrow-up\", JSImport.Default)\n  object HardwareKeyboardArrowUp extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/keyboard-backspace\", JSImport.Default)\n  object HardwareKeyboardBackspace extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/keyboard-capslock\", JSImport.Default)\n  object HardwareKeyboardCapslock extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/keyboard-hide\", JSImport.Default)\n  object HardwareKeyboardHide extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/keyboard-return\", JSImport.Default)\n  object HardwareKeyboardReturn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/keyboard-tab\", JSImport.Default)\n  object HardwareKeyboardTab extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/keyboard-voice\", JSImport.Default)\n  object HardwareKeyboardVoice extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/keyboard\", JSImport.Default)\n  object HardwareKeyboard extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/laptop-chromebook\", JSImport.Default)\n  object HardwareLaptopChromebook extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/laptop-mac\", JSImport.Default)\n  object HardwareLaptopMac extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/laptop-windows\", JSImport.Default)\n  object HardwareLaptopWindows extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/laptop\", JSImport.Default)\n  object HardwareLaptop extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/memory\", JSImport.Default)\n  object HardwareMemory extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/mouse\", JSImport.Default)\n  object HardwareMouse extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/phone-android\", JSImport.Default)\n  object HardwarePhoneAndroid extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/phone-iphone\", JSImport.Default)\n  object HardwarePhoneIphone extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/phonelink-off\", JSImport.Default)\n  object HardwarePhonelinkOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/phonelink\", JSImport.Default)\n  object HardwarePhonelink extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/power-input\", JSImport.Default)\n  object HardwarePowerInput extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/router\", JSImport.Default)\n  object HardwareRouter extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/scanner\", JSImport.Default)\n  object HardwareScanner extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/security\", JSImport.Default)\n  object HardwareSecurity extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/sim-card\", JSImport.Default)\n  object HardwareSimCard extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/smartphone\", JSImport.Default)\n  object HardwareSmartphone extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/speaker-group\", JSImport.Default)\n  object HardwareSpeakerGroup extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/speaker\", JSImport.Default)\n  object HardwareSpeaker extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/tablet-android\", JSImport.Default)\n  object HardwareTabletAndroid extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/tablet-mac\", JSImport.Default)\n  object HardwareTabletMac extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/tablet\", JSImport.Default)\n  object HardwareTablet extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/toys\", JSImport.Default)\n  object HardwareToys extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/tv\", JSImport.Default)\n  object HardwareTv extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/videogame-asset\", JSImport.Default)\n  object HardwareVideogameAsset extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/hardware/watch\", JSImport.Default)\n  object HardwareWatch extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/add-a-photo\", JSImport.Default)\n  object ImageAddAPhoto extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/add-to-photos\", JSImport.Default)\n  object ImageAddToPhotos extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/adjust\", JSImport.Default)\n  object ImageAdjust extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/assistant-photo\", JSImport.Default)\n  object ImageAssistantPhoto extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/assistant\", JSImport.Default)\n  object ImageAssistant extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/audiotrack\", JSImport.Default)\n  object ImageAudiotrack extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/blur-circular\", JSImport.Default)\n  object ImageBlurCircular extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/blur-linear\", JSImport.Default)\n  object ImageBlurLinear extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/blur-off\", JSImport.Default)\n  object ImageBlurOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/blur-on\", JSImport.Default)\n  object ImageBlurOn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/brightness-1\", JSImport.Default)\n  object ImageBrightness1 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/brightness-2\", JSImport.Default)\n  object ImageBrightness2 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/brightness-3\", JSImport.Default)\n  object ImageBrightness3 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/brightness-4\", JSImport.Default)\n  object ImageBrightness4 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/brightness-5\", JSImport.Default)\n  object ImageBrightness5 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/brightness-6\", JSImport.Default)\n  object ImageBrightness6 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/brightness-7\", JSImport.Default)\n  object ImageBrightness7 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/broken-image\", JSImport.Default)\n  object ImageBrokenImage extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/brush\", JSImport.Default)\n  object ImageBrush extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/burst-mode\", JSImport.Default)\n  object ImageBurstMode extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/camera-alt\", JSImport.Default)\n  object ImageCameraAlt extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/camera-front\", JSImport.Default)\n  object ImageCameraFront extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/camera-rear\", JSImport.Default)\n  object ImageCameraRear extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/camera-roll\", JSImport.Default)\n  object ImageCameraRoll extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/camera\", JSImport.Default)\n  object ImageCamera extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/center-focus-strong\", JSImport.Default)\n  object ImageCenterFocusStrong extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/center-focus-weak\", JSImport.Default)\n  object ImageCenterFocusWeak extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/collections-bookmark\", JSImport.Default)\n  object ImageCollectionsBookmark extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/collections\", JSImport.Default)\n  object ImageCollections extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/color-lens\", JSImport.Default)\n  object ImageColorLens extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/colorize\", JSImport.Default)\n  object ImageColorize extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/compare\", JSImport.Default)\n  object ImageCompare extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/control-point-duplicate\", JSImport.Default)\n  object ImageControlPointDuplicate extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/control-point\", JSImport.Default)\n  object ImageControlPoint extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/crop-16-9\", JSImport.Default)\n  object ImageCrop169 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/crop-3-2\", JSImport.Default)\n  object ImageCrop32 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/crop-5-4\", JSImport.Default)\n  object ImageCrop54 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/crop-7-5\", JSImport.Default)\n  object ImageCrop75 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/crop-din\", JSImport.Default)\n  object ImageCropDin extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/crop-free\", JSImport.Default)\n  object ImageCropFree extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/crop-landscape\", JSImport.Default)\n  object ImageCropLandscape extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/crop-original\", JSImport.Default)\n  object ImageCropOriginal extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/crop-portrait\", JSImport.Default)\n  object ImageCropPortrait extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/crop-rotate\", JSImport.Default)\n  object ImageCropRotate extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/crop-square\", JSImport.Default)\n  object ImageCropSquare extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/crop\", JSImport.Default)\n  object ImageCrop extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/dehaze\", JSImport.Default)\n  object ImageDehaze extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/details\", JSImport.Default)\n  object ImageDetails extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/edit\", JSImport.Default)\n  object ImageEdit extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/exposure-neg-1\", JSImport.Default)\n  object ImageExposureNeg1 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/exposure-neg-2\", JSImport.Default)\n  object ImageExposureNeg2 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/exposure-plus-1\", JSImport.Default)\n  object ImageExposurePlus1 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/exposure-plus-2\", JSImport.Default)\n  object ImageExposurePlus2 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/exposure-zero\", JSImport.Default)\n  object ImageExposureZero extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/exposure\", JSImport.Default)\n  object ImageExposure extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-1\", JSImport.Default)\n  object ImageFilter1 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-2\", JSImport.Default)\n  object ImageFilter2 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-3\", JSImport.Default)\n  object ImageFilter3 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-4\", JSImport.Default)\n  object ImageFilter4 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-5\", JSImport.Default)\n  object ImageFilter5 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-6\", JSImport.Default)\n  object ImageFilter6 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-7\", JSImport.Default)\n  object ImageFilter7 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-8\", JSImport.Default)\n  object ImageFilter8 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-9-plus\", JSImport.Default)\n  object ImageFilter9Plus extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-9\", JSImport.Default)\n  object ImageFilter9 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-b-and-w\", JSImport.Default)\n  object ImageFilterBAndW extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-center-focus\", JSImport.Default)\n  object ImageFilterCenterFocus extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-drama\", JSImport.Default)\n  object ImageFilterDrama extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-frames\", JSImport.Default)\n  object ImageFilterFrames extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-hdr\", JSImport.Default)\n  object ImageFilterHdr extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-none\", JSImport.Default)\n  object ImageFilterNone extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-tilt-shift\", JSImport.Default)\n  object ImageFilterTiltShift extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter-vintage\", JSImport.Default)\n  object ImageFilterVintage extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/filter\", JSImport.Default)\n  object ImageFilter extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/flare\", JSImport.Default)\n  object ImageFlare extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/flash-auto\", JSImport.Default)\n  object ImageFlashAuto extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/flash-off\", JSImport.Default)\n  object ImageFlashOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/flash-on\", JSImport.Default)\n  object ImageFlashOn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/flip\", JSImport.Default)\n  object ImageFlip extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/gradient\", JSImport.Default)\n  object ImageGradient extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/grain\", JSImport.Default)\n  object ImageGrain extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/grid-off\", JSImport.Default)\n  object ImageGridOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/grid-on\", JSImport.Default)\n  object ImageGridOn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/hdr-off\", JSImport.Default)\n  object ImageHdrOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/hdr-on\", JSImport.Default)\n  object ImageHdrOn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/hdr-strong\", JSImport.Default)\n  object ImageHdrStrong extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/hdr-weak\", JSImport.Default)\n  object ImageHdrWeak extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/healing\", JSImport.Default)\n  object ImageHealing extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/image-aspect-ratio\", JSImport.Default)\n  object ImageImageAspectRatio extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/image\", JSImport.Default)\n  object ImageImage extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/iso\", JSImport.Default)\n  object ImageIso extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/landscape\", JSImport.Default)\n  object ImageLandscape extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/leak-add\", JSImport.Default)\n  object ImageLeakAdd extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/leak-remove\", JSImport.Default)\n  object ImageLeakRemove extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/lens\", JSImport.Default)\n  object ImageLens extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/linked-camera\", JSImport.Default)\n  object ImageLinkedCamera extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/looks-3\", JSImport.Default)\n  object ImageLooks3 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/looks-4\", JSImport.Default)\n  object ImageLooks4 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/looks-5\", JSImport.Default)\n  object ImageLooks5 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/looks-6\", JSImport.Default)\n  object ImageLooks6 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/looks-one\", JSImport.Default)\n  object ImageLooksOne extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/looks-two\", JSImport.Default)\n  object ImageLooksTwo extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/looks\", JSImport.Default)\n  object ImageLooks extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/loupe\", JSImport.Default)\n  object ImageLoupe extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/monochrome-photos\", JSImport.Default)\n  object ImageMonochromePhotos extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/movie-creation\", JSImport.Default)\n  object ImageMovieCreation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/movie-filter\", JSImport.Default)\n  object ImageMovieFilter extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/music-note\", JSImport.Default)\n  object ImageMusicNote extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/nature-people\", JSImport.Default)\n  object ImageNaturePeople extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/nature\", JSImport.Default)\n  object ImageNature extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/navigate-before\", JSImport.Default)\n  object ImageNavigateBefore extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/navigate-next\", JSImport.Default)\n  object ImageNavigateNext extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/palette\", JSImport.Default)\n  object ImagePalette extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/panorama-fish-eye\", JSImport.Default)\n  object ImagePanoramaFishEye extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/panorama-horizontal\", JSImport.Default)\n  object ImagePanoramaHorizontal extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/panorama-vertical\", JSImport.Default)\n  object ImagePanoramaVertical extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/panorama-wide-angle\", JSImport.Default)\n  object ImagePanoramaWideAngle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/panorama\", JSImport.Default)\n  object ImagePanorama extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/photo-album\", JSImport.Default)\n  object ImagePhotoAlbum extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/photo-camera\", JSImport.Default)\n  object ImagePhotoCamera extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/photo-filter\", JSImport.Default)\n  object ImagePhotoFilter extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/photo-library\", JSImport.Default)\n  object ImagePhotoLibrary extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/photo-size-select-actual\", JSImport.Default)\n  object ImagePhotoSizeSelectActual extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/photo-size-select-large\", JSImport.Default)\n  object ImagePhotoSizeSelectLarge extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/photo-size-select-small\", JSImport.Default)\n  object ImagePhotoSizeSelectSmall extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/photo\", JSImport.Default)\n  object ImagePhoto extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/picture-as-pdf\", JSImport.Default)\n  object ImagePictureAsPdf extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/portrait\", JSImport.Default)\n  object ImagePortrait extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/remove-red-eye\", JSImport.Default)\n  object ImageRemoveRedEye extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/rotate-90-degrees-ccw\", JSImport.Default)\n  object ImageRotate90DegreesCcw extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/rotate-left\", JSImport.Default)\n  object ImageRotateLeft extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/rotate-right\", JSImport.Default)\n  object ImageRotateRight extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/slideshow\", JSImport.Default)\n  object ImageSlideshow extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/straighten\", JSImport.Default)\n  object ImageStraighten extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/style\", JSImport.Default)\n  object ImageStyle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/switch-camera\", JSImport.Default)\n  object ImageSwitchCamera extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/switch-video\", JSImport.Default)\n  object ImageSwitchVideo extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/tag-faces\", JSImport.Default)\n  object ImageTagFaces extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/texture\", JSImport.Default)\n  object ImageTexture extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/timelapse\", JSImport.Default)\n  object ImageTimelapse extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/timer-10\", JSImport.Default)\n  object ImageTimer10 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/timer-3\", JSImport.Default)\n  object ImageTimer3 extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/timer-off\", JSImport.Default)\n  object ImageTimerOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/timer\", JSImport.Default)\n  object ImageTimer extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/tonality\", JSImport.Default)\n  object ImageTonality extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/transform\", JSImport.Default)\n  object ImageTransform extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/tune\", JSImport.Default)\n  object ImageTune extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/view-comfy\", JSImport.Default)\n  object ImageViewComfy extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/view-compact\", JSImport.Default)\n  object ImageViewCompact extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/vignette\", JSImport.Default)\n  object ImageVignette extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/wb-auto\", JSImport.Default)\n  object ImageWbAuto extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/wb-cloudy\", JSImport.Default)\n  object ImageWbCloudy extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/wb-incandescent\", JSImport.Default)\n  object ImageWbIncandescent extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/wb-iridescent\", JSImport.Default)\n  object ImageWbIridescent extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/image/wb-sunny\", JSImport.Default)\n  object ImageWbSunny extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/add-location\", JSImport.Default)\n  object MapsAddLocation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/beenhere\", JSImport.Default)\n  object MapsBeenhere extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/directions-bike\", JSImport.Default)\n  object MapsDirectionsBike extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/directions-boat\", JSImport.Default)\n  object MapsDirectionsBoat extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/directions-bus\", JSImport.Default)\n  object MapsDirectionsBus extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/directions-car\", JSImport.Default)\n  object MapsDirectionsCar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/directions-railway\", JSImport.Default)\n  object MapsDirectionsRailway extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/directions-run\", JSImport.Default)\n  object MapsDirectionsRun extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/directions-subway\", JSImport.Default)\n  object MapsDirectionsSubway extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/directions-transit\", JSImport.Default)\n  object MapsDirectionsTransit extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/directions-walk\", JSImport.Default)\n  object MapsDirectionsWalk extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/directions\", JSImport.Default)\n  object MapsDirections extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/edit-location\", JSImport.Default)\n  object MapsEditLocation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/ev-station\", JSImport.Default)\n  object MapsEvStation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/flight\", JSImport.Default)\n  object MapsFlight extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/hotel\", JSImport.Default)\n  object MapsHotel extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/layers-clear\", JSImport.Default)\n  object MapsLayersClear extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/layers\", JSImport.Default)\n  object MapsLayers extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-activity\", JSImport.Default)\n  object MapsLocalActivity extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-airport\", JSImport.Default)\n  object MapsLocalAirport extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-atm\", JSImport.Default)\n  object MapsLocalAtm extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-bar\", JSImport.Default)\n  object MapsLocalBar extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-cafe\", JSImport.Default)\n  object MapsLocalCafe extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-car-wash\", JSImport.Default)\n  object MapsLocalCarWash extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-convenience-store\", JSImport.Default)\n  object MapsLocalConvenienceStore extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-dining\", JSImport.Default)\n  object MapsLocalDining extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-drink\", JSImport.Default)\n  object MapsLocalDrink extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-florist\", JSImport.Default)\n  object MapsLocalFlorist extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-gas-station\", JSImport.Default)\n  object MapsLocalGasStation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-grocery-store\", JSImport.Default)\n  object MapsLocalGroceryStore extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-hospital\", JSImport.Default)\n  object MapsLocalHospital extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-hotel\", JSImport.Default)\n  object MapsLocalHotel extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-laundry-service\", JSImport.Default)\n  object MapsLocalLaundryService extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-library\", JSImport.Default)\n  object MapsLocalLibrary extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-mall\", JSImport.Default)\n  object MapsLocalMall extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-movies\", JSImport.Default)\n  object MapsLocalMovies extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-offer\", JSImport.Default)\n  object MapsLocalOffer extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-parking\", JSImport.Default)\n  object MapsLocalParking extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-pharmacy\", JSImport.Default)\n  object MapsLocalPharmacy extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-phone\", JSImport.Default)\n  object MapsLocalPhone extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-pizza\", JSImport.Default)\n  object MapsLocalPizza extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-play\", JSImport.Default)\n  object MapsLocalPlay extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-post-office\", JSImport.Default)\n  object MapsLocalPostOffice extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-printshop\", JSImport.Default)\n  object MapsLocalPrintshop extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-see\", JSImport.Default)\n  object MapsLocalSee extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-shipping\", JSImport.Default)\n  object MapsLocalShipping extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/local-taxi\", JSImport.Default)\n  object MapsLocalTaxi extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/map\", JSImport.Default)\n  object MapsMap extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/my-location\", JSImport.Default)\n  object MapsMyLocation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/navigation\", JSImport.Default)\n  object MapsNavigation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/near-me\", JSImport.Default)\n  object MapsNearMe extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/person-pin-circle\", JSImport.Default)\n  object MapsPersonPinCircle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/person-pin\", JSImport.Default)\n  object MapsPersonPin extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/pin-drop\", JSImport.Default)\n  object MapsPinDrop extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/place\", JSImport.Default)\n  object MapsPlace extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/rate-review\", JSImport.Default)\n  object MapsRateReview extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/restaurant-menu\", JSImport.Default)\n  object MapsRestaurantMenu extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/restaurant\", JSImport.Default)\n  object MapsRestaurant extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/satellite\", JSImport.Default)\n  object MapsSatellite extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/store-mall-directory\", JSImport.Default)\n  object MapsStoreMallDirectory extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/streetview\", JSImport.Default)\n  object MapsStreetview extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/subway\", JSImport.Default)\n  object MapsSubway extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/terrain\", JSImport.Default)\n  object MapsTerrain extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/traffic\", JSImport.Default)\n  object MapsTraffic extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/train\", JSImport.Default)\n  object MapsTrain extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/tram\", JSImport.Default)\n  object MapsTram extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/transfer-within-a-station\", JSImport.Default)\n  object MapsTransferWithinAStation extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/maps/zoom-out-map\", JSImport.Default)\n  object MapsZoomOutMap extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/apps\", JSImport.Default)\n  object NavigationApps extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/arrow-back\", JSImport.Default)\n  object NavigationArrowBack extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/arrow-downward\", JSImport.Default)\n  object NavigationArrowDownward extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/arrow-drop-down-circle\", JSImport.Default)\n  object NavigationArrowDropDownCircle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/arrow-drop-down\", JSImport.Default)\n  object NavigationArrowDropDown extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/arrow-drop-up\", JSImport.Default)\n  object NavigationArrowDropUp extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/arrow-forward\", JSImport.Default)\n  object NavigationArrowForward extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/arrow-upward\", JSImport.Default)\n  object NavigationArrowUpward extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/cancel\", JSImport.Default)\n  object NavigationCancel extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/check\", JSImport.Default)\n  object NavigationCheck extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/chevron-left\", JSImport.Default)\n  object NavigationChevronLeft extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/chevron-right\", JSImport.Default)\n  object NavigationChevronRight extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/close\", JSImport.Default)\n  object NavigationClose extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/expand-less\", JSImport.Default)\n  object NavigationExpandLess extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/expand-more\", JSImport.Default)\n  object NavigationExpandMore extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/first-page\", JSImport.Default)\n  object NavigationFirstPage extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/fullscreen-exit\", JSImport.Default)\n  object NavigationFullscreenExit extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/fullscreen\", JSImport.Default)\n  object NavigationFullscreen extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/last-page\", JSImport.Default)\n  object NavigationLastPage extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/menu\", JSImport.Default)\n  object NavigationMenu extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/more-horiz\", JSImport.Default)\n  object NavigationMoreHoriz extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/more-vert\", JSImport.Default)\n  object NavigationMoreVert extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/refresh\", JSImport.Default)\n  object NavigationRefresh extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/subdirectory-arrow-left\", JSImport.Default)\n  object NavigationSubdirectoryArrowLeft extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/subdirectory-arrow-right\",\n                       JSImport.Default)\n  object NavigationSubdirectoryArrowRight extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/unfold-less\", JSImport.Default)\n  object NavigationUnfoldLess extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation/unfold-more\", JSImport.Default)\n  object NavigationUnfoldMore extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/navigation-arrow-drop-right\", JSImport.Default)\n  object NavigationArrowDropRight extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/adb\", JSImport.Default)\n  object NotificationAdb extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/airline-seat-flat-angled\",\n                       JSImport.Default)\n  object NotificationAirlineSeatFlatAngled extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/airline-seat-flat\", JSImport.Default)\n  object NotificationAirlineSeatFlat extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/airline-seat-individual-suite\",\n                       JSImport.Default)\n  object NotificationAirlineSeatIndividualSuite extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/airline-seat-legroom-extra\",\n                       JSImport.Default)\n  object NotificationAirlineSeatLegroomExtra extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/airline-seat-legroom-normal\",\n                       JSImport.Default)\n  object NotificationAirlineSeatLegroomNormal extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/airline-seat-legroom-reduced\",\n                       JSImport.Default)\n  object NotificationAirlineSeatLegroomReduced extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/airline-seat-recline-extra\",\n                       JSImport.Default)\n  object NotificationAirlineSeatReclineExtra extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/airline-seat-recline-normal\",\n                       JSImport.Default)\n  object NotificationAirlineSeatReclineNormal extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/bluetooth-audio\", JSImport.Default)\n  object NotificationBluetoothAudio extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/confirmation-number\", JSImport.Default)\n  object NotificationConfirmationNumber extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/disc-full\", JSImport.Default)\n  object NotificationDiscFull extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/do-not-disturb-alt\", JSImport.Default)\n  object NotificationDoNotDisturbAlt extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/do-not-disturb-off\", JSImport.Default)\n  object NotificationDoNotDisturbOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/do-not-disturb-on\", JSImport.Default)\n  object NotificationDoNotDisturbOn extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/do-not-disturb\", JSImport.Default)\n  object NotificationDoNotDisturb extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/drive-eta\", JSImport.Default)\n  object NotificationDriveEta extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/enhanced-encryption\", JSImport.Default)\n  object NotificationEnhancedEncryption extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/event-available\", JSImport.Default)\n  object NotificationEventAvailable extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/event-busy\", JSImport.Default)\n  object NotificationEventBusy extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/event-note\", JSImport.Default)\n  object NotificationEventNote extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/folder-special\", JSImport.Default)\n  object NotificationFolderSpecial extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/live-tv\", JSImport.Default)\n  object NotificationLiveTv extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/mms\", JSImport.Default)\n  object NotificationMms extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/more\", JSImport.Default)\n  object NotificationMore extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/network-check\", JSImport.Default)\n  object NotificationNetworkCheck extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/network-locked\", JSImport.Default)\n  object NotificationNetworkLocked extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/no-encryption\", JSImport.Default)\n  object NotificationNoEncryption extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/ondemand-video\", JSImport.Default)\n  object NotificationOndemandVideo extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/personal-video\", JSImport.Default)\n  object NotificationPersonalVideo extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/phone-bluetooth-speaker\",\n                       JSImport.Default)\n  object NotificationPhoneBluetoothSpeaker extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/phone-forwarded\", JSImport.Default)\n  object NotificationPhoneForwarded extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/phone-in-talk\", JSImport.Default)\n  object NotificationPhoneInTalk extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/phone-locked\", JSImport.Default)\n  object NotificationPhoneLocked extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/phone-missed\", JSImport.Default)\n  object NotificationPhoneMissed extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/phone-paused\", JSImport.Default)\n  object NotificationPhonePaused extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/power\", JSImport.Default)\n  object NotificationPower extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/priority-high\", JSImport.Default)\n  object NotificationPriorityHigh extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/rv-hookup\", JSImport.Default)\n  object NotificationRvHookup extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/sd-card\", JSImport.Default)\n  object NotificationSdCard extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/sim-card-alert\", JSImport.Default)\n  object NotificationSimCardAlert extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/sms-failed\", JSImport.Default)\n  object NotificationSmsFailed extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/sms\", JSImport.Default)\n  object NotificationSms extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/sync-disabled\", JSImport.Default)\n  object NotificationSyncDisabled extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/sync-problem\", JSImport.Default)\n  object NotificationSyncProblem extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/sync\", JSImport.Default)\n  object NotificationSync extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/system-update\", JSImport.Default)\n  object NotificationSystemUpdate extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/tap-and-play\", JSImport.Default)\n  object NotificationTapAndPlay extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/time-to-leave\", JSImport.Default)\n  object NotificationTimeToLeave extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/vibration\", JSImport.Default)\n  object NotificationVibration extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/voice-chat\", JSImport.Default)\n  object NotificationVoiceChat extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/vpn-lock\", JSImport.Default)\n  object NotificationVpnLock extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/wc\", JSImport.Default)\n  object NotificationWc extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/notification/wifi\", JSImport.Default)\n  object NotificationWifi extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/ac-unit\", JSImport.Default)\n  object PlacesAcUnit extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/airport-shuttle\", JSImport.Default)\n  object PlacesAirportShuttle extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/all-inclusive\", JSImport.Default)\n  object PlacesAllInclusive extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/beach-access\", JSImport.Default)\n  object PlacesBeachAccess extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/business-center\", JSImport.Default)\n  object PlacesBusinessCenter extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/casino\", JSImport.Default)\n  object PlacesCasino extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/child-care\", JSImport.Default)\n  object PlacesChildCare extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/child-friendly\", JSImport.Default)\n  object PlacesChildFriendly extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/fitness-center\", JSImport.Default)\n  object PlacesFitnessCenter extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/free-breakfast\", JSImport.Default)\n  object PlacesFreeBreakfast extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/golf-course\", JSImport.Default)\n  object PlacesGolfCourse extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/hot-tub\", JSImport.Default)\n  object PlacesHotTub extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/kitchen\", JSImport.Default)\n  object PlacesKitchen extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/pool\", JSImport.Default)\n  object PlacesPool extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/room-service\", JSImport.Default)\n  object PlacesRoomService extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/rv-hookup\", JSImport.Default)\n  object PlacesRvHookup extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/smoke-free\", JSImport.Default)\n  object PlacesSmokeFree extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/smoking-rooms\", JSImport.Default)\n  object PlacesSmokingRooms extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/places/spa\", JSImport.Default)\n  object PlacesSpa extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/cake\", JSImport.Default)\n  object SocialCake extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/domain\", JSImport.Default)\n  object SocialDomain extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/group-add\", JSImport.Default)\n  object SocialGroupAdd extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/group\", JSImport.Default)\n  object SocialGroup extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/location-city\", JSImport.Default)\n  object SocialLocationCity extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/mood-bad\", JSImport.Default)\n  object SocialMoodBad extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/mood\", JSImport.Default)\n  object SocialMood extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/notifications-active\", JSImport.Default)\n  object SocialNotificationsActive extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/notifications-none\", JSImport.Default)\n  object SocialNotificationsNone extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/notifications-off\", JSImport.Default)\n  object SocialNotificationsOff extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/notifications-paused\", JSImport.Default)\n  object SocialNotificationsPaused extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/notifications\", JSImport.Default)\n  object SocialNotifications extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/pages\", JSImport.Default)\n  object SocialPages extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/party-mode\", JSImport.Default)\n  object SocialPartyMode extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/people-outline\", JSImport.Default)\n  object SocialPeopleOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/people\", JSImport.Default)\n  object SocialPeople extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/person-add\", JSImport.Default)\n  object SocialPersonAdd extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/person-outline\", JSImport.Default)\n  object SocialPersonOutline extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/person\", JSImport.Default)\n  object SocialPerson extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/plus-one\", JSImport.Default)\n  object SocialPlusOne extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/poll\", JSImport.Default)\n  object SocialPoll extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/public\", JSImport.Default)\n  object SocialPublic extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/school\", JSImport.Default)\n  object SocialSchool extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/sentiment-dissatisfied\", JSImport.Default)\n  object SocialSentimentDissatisfied extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/sentiment-neutral\", JSImport.Default)\n  object SocialSentimentNeutral extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/sentiment-satisfied\", JSImport.Default)\n  object SocialSentimentSatisfied extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/sentiment-very-dissatisfied\", JSImport.Default)\n  object SocialSentimentVeryDissatisfied extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/sentiment-very-satisfied\", JSImport.Default)\n  object SocialSentimentVerySatisfied extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/share\", JSImport.Default)\n  object SocialShare extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/social/whatshot\", JSImport.Default)\n  object SocialWhatshot extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/toggle/check-box-outline-blank\", JSImport.Default)\n  object ToggleCheckBoxOutlineBlank extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/toggle/check-box\", JSImport.Default)\n  object ToggleCheckBox extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/toggle/indeterminate-check-box\", JSImport.Default)\n  object ToggleIndeterminateCheckBox extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/toggle/radio-button-checked\", JSImport.Default)\n  object ToggleRadioButtonChecked extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/toggle/radio-button-unchecked\", JSImport.Default)\n  object ToggleRadioButtonUnchecked extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/toggle/star-border\", JSImport.Default)\n  object ToggleStarBorder extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/toggle/star-half\", JSImport.Default)\n  object ToggleStarHalf extends MuiSvgIcon\n  @js.native @JSImport(\"material-ui/svg-icons/toggle/star\", JSImport.Default)\n  object ToggleStar extends MuiSvgIcon\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/materialui/MuiUtil.scala",
    "content": "package chandu0101.scalajs.react.components.materialui\n\nimport scala.scalajs.js\n\n@js.native\ntrait MuiUtil extends js.Object {\n  val CssEvent: js.Dynamic               = js.native\n  val Dom: js.Dynamic                    = js.native\n  val Events: js.Dynamic                 = js.native\n  val KeyCode: js.Dynamic                = js.native\n  val KeyLine: js.Dynamic                = js.native\n  val ColorManipulator: ColorManipulator = js.native\n  val Extend: js.Dynamic                 = js.native\n  val UniqueId: js.Dynamic               = js.native\n}\n\n@js.native\ntrait ColorManipulator extends js.Object {\n  def fade(color: MuiColor, amount: Double): MuiColor                        = js.native\n  def lighten(color: MuiColor, amount: Double): MuiColor                     = js.native\n  def darken(color: MuiColor, amount: Double): MuiColor                      = js.native\n  def contrastRatio(background: MuiColor, foreground: MuiColor): Double      = js.native\n  def contrastRatioLevel(background: MuiColor, foreground: MuiColor): String = js.native\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/materialui/package.scala",
    "content": "package chandu0101.scalajs.react.components\n\npackage object materialui {\n  type RowId    = Int\n  type ColumnId = Int\n\n  /* todo: need generate script to become more clever */\n  private[materialui] implicit class A(m: Mui.type) {\n    def MuiThemeProvider = m.Styles.MuiThemeProvider\n  }\n\n  type TouchTapEvent   = raw.TouchTapEvent[org.scalajs.dom.Node]\n  type TouchTapEventH  = raw.TouchTapEvent[org.scalajs.dom.html.Element]\n  type TouchTapEventI  = raw.TouchTapEvent[org.scalajs.dom.html.Input]\n  type TouchTapEventTA = raw.TouchTapEvent[org.scalajs.dom.html.TextArea]\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/materialui/raw/TouchTapEvent.scala",
    "content": "package chandu0101.scalajs.react.components.materialui.raw\n\nimport japgolly.scalajs.react.ReactEventFrom\nimport org.scalajs.dom\n\nimport scala.scalajs.js\n\n@js.native\ntrait TouchTapEvent[+DOMEventTarget <: dom.Node] extends ReactEventFrom[DOMEventTarget] {\n  def altKey: Boolean\n  def ctrlKey: Boolean\n  def getModifierState(key: String): Boolean\n  def metaKey: Boolean\n  def shiftKey: Boolean\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/materialui/types.scala",
    "content": "package chandu0101.scalajs.react.components.materialui\n\nimport chandu0101.macros.tojs.JSMacro\n\nimport scala.scalajs.js\n\nclass Vertical(val value: String) extends AnyVal\nobject Vertical {\n  val top    = new Vertical(\"top\")\n  val center = new Vertical(\"center\")\n  val bottom = new Vertical(\"bottom\")\n  val values = List(top, center, bottom)\n}\n\nclass Horizontal(val value: String) extends AnyVal\nobject Horizontal {\n  val left   = new Horizontal(\"left\")\n  val middle = new Horizontal(\"middle\")\n  val right  = new Horizontal(\"right\")\n  val values = List(left, middle, right)\n}\n\ncase class Origin(vertical: Vertical, horizontal: Horizontal) {\n  val toJS = JSMacro[Origin](this)\n}\n\nclass ZDepth(val value: Int) extends AnyVal\nobject ZDepth {\n  val _0 = new ZDepth(0)\n  val _1 = new ZDepth(1)\n  val _2 = new ZDepth(2)\n  val _3 = new ZDepth(3)\n  val _4 = new ZDepth(4)\n  val _5 = new ZDepth(5)\n}\n\nclass Corners(val value: String) extends AnyVal\nobject Corners {\n  val bottom_left  = new Corners(\"bottom-left\")\n  val bottom_right = new Corners(\"bottom-right\")\n  val top_left     = new Corners(\"top-left\")\n  val top_right    = new Corners(\"top-right\")\n  val values       = List(bottom_left, bottom_right, top_left, top_right)\n}\n\nclass CornersAndCenter(val value: String) extends AnyVal\nobject CornersAndCenter {\n  val bottom_center = new CornersAndCenter(\"bottom-center\")\n  val bottom_left   = new CornersAndCenter(\"bottom-left\")\n  val bottom_right  = new CornersAndCenter(\"bottom-right\")\n  val top_center    = new CornersAndCenter(\"top-center\")\n  val top_left      = new CornersAndCenter(\"top-left\")\n  val top_right     = new CornersAndCenter(\"top-right\")\n  val values        = List(bottom_center, bottom_left, bottom_right, top_center, top_left, top_right)\n}\n\nclass MuiFocusedState(val value: String) extends AnyVal\nobject MuiFocusedState {\n  val none            = new MuiFocusedState(\"none\")\n  val focused         = new MuiFocusedState(\"focused\")\n  val keyboardfocused = new MuiFocusedState(\"keyboardfocused\")\n  val value           = List(none, focused, keyboardfocused)\n}\n\n@js.native\ntrait HasValue[T] extends js.Object {\n  def value: js.UndefOr[T] = js.native\n}\n\n@js.native\ntrait DropDownMenuProps extends js.Object {\n  //TODO\n}\n@js.native\ntrait Wrapper extends js.Object {\n  //TODO\n}\n@js.native\ntrait CircularProgressPath extends js.Object {\n  //TODO\n}\n@js.native\ntrait Position extends js.Object {\n  //TODO\n}\n@js.native\ntrait DatePickerUtils extends js.Object {\n  //TODO\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/package.scala",
    "content": "package chandu0101.scalajs.react\n\nimport scala.scalajs.js\n\npackage object components {\n  type CssProperties = js.Any\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/reactsplitpane/ReactSplitPane.scala",
    "content": "package chandu0101.scalajs.react.components.reactsplitpane\n\nimport chandu0101.macros.tojs.JSMacro\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.VdomElement\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.JSImport\nimport scalacss.internal.mutable.StyleSheet\nimport scalacss.DevDefaults._\n\nobject ReactSplitPane {\n  @js.native\n  @JSImport(\"react-split-pane\", JSImport.Default)\n  object Component extends js.Any\n\n  class Style extends StyleSheet.Inline {\n\n    import dsl._\n\n    val Resizer = style(\"Resizer\")(\n      backgroundColor(black),\n      opacity(0.2),\n      zIndex(1),\n      boxSizing.borderBox,\n      backgroundClip.paddingBox,\n      &.hover(\n        transition := \"all 2s ease\"\n      )\n    )\n\n    val ResizerVertical = style(\"Resizer.vertical\")(\n      width(11.px),\n      marginTop(0.px),\n      marginBottom(0.px),\n      marginLeft(-5.px),\n      marginRight(-5.px),\n      borderLeft(5.px, solid, c\"rgba(0,0,0,0)\"),\n      borderRight(5.px, solid, transparent),\n      cursor.colResize,\n      &.hover(\n        borderLeft(5.px, solid, c\"rgba(0, 0, 0, 0.5)\"),\n        borderRight(5.px, solid, c\"rgba(0, 0, 0, 0.5)\")\n      )\n    )\n\n    val ResizerHorizontal = style(\"Resizer.horizontal\")(\n      height(11.px),\n      marginTop(-5.px),\n      marginBottom(-5.px),\n      marginLeft(0.px),\n      marginRight(0.px),\n      borderTop(5.px, solid, c\"rgba(0,0,0,0)\"),\n      borderBottom(5.px, solid, transparent),\n      cursor.rowResize,\n      &.hover(\n        borderTop(5.px, solid, c\"rgba(0, 0, 0, 0.5)\"),\n        borderBottom(5.px, solid, c\"rgba(0, 0, 0, 0.5)\")\n      )\n    )\n\n    val ResizerDisabled = style(\"Resizer.disabled\")(\n      cursor.notAllowed,\n      &.hover(\n        border.transparent\n      )\n    )\n\n    val SplitPaneContent = style(\"splitPaneContent\")(\n      width(100.%%),\n      height(100.%%),\n      position.absolute,\n      left(0.px),\n      top(0.px)\n    )\n  }\n\n  object DefaultStyle extends Style\n}\n\ncase class ReactSplitPane(\n    // Specify whether resizing is allowed\n    allowResize: js.UndefOr[Boolean] = true,\n    className: js.UndefOr[String] = js.undefined,\n    primary: js.UndefOr[String] = js.undefined,\n    minSize: js.UndefOr[Double] = js.undefined,\n    maxSize: js.UndefOr[Double] = js.undefined,\n    defaultSize: js.UndefOr[Double] = js.undefined,\n    size: js.UndefOr[Double] = js.undefined,\n    split: js.UndefOr[String] = js.undefined,\n    onDragStarted: js.UndefOr[Callback] = js.undefined,\n    onDragFinished: js.UndefOr[Callback] = js.undefined,\n    onChange: js.UndefOr[Double => Callback] = js.undefined,\n    onResizerClick: js.UndefOr[Callback] = js.undefined,\n    onResizerDoubleClick: js.UndefOr[Callback] = js.undefined,\n    style: js.UndefOr[js.Object] = js.undefined,\n    resizerStyle: js.UndefOr[js.Object] = js.undefined,\n    paneStyle: js.UndefOr[js.Object] = js.undefined,\n    pane1Style: js.UndefOr[js.Object] = js.undefined,\n    pane2Style: js.UndefOr[js.Object] = js.undefined,\n    resizerClassName: js.UndefOr[String] = ReactSplitPane.DefaultStyle.Resizer.htmlClass,\n    step: js.UndefOr[Double] = js.undefined\n) {\n  def apply(first: VdomElement, second: VdomElement): JsComponent.Unmounted[_, _] = {\n\n    val props     = JSMacro[ReactSplitPane](this)\n    val component = JsComponent[js.Object, Children.Varargs, Null](ReactSplitPane.Component)\n\n    component(props)(\n      <.div(\n        ^.cls := \"splitPaneContent\",\n        first\n      ),\n      <.div(\n        ^.cls := \"splitPaneContent\",\n        second\n      )\n    )\n  }\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/semanticui/Sui.scala",
    "content": "package chandu0101.scalajs.react.components\npackage semanticui\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.JSImport\n\nobject Sui {\n  // Addons\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/addons/Confirm\", JSImport.Default)\n  object Confirm extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/addons/Portal\", JSImport.Default)\n  object Portal extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/addons/Radio\", JSImport.Default)\n  object Radio extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/addons/Select\", JSImport.Default)\n  object Select extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/addons/TextArea\", JSImport.Default)\n  object TextArea extends js.Any\n\n  // Behaviors\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/behaviors/Visibility\", JSImport.Default)\n  object Visibility extends js.Any\n\n  // Collections\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Breadcrumb\", JSImport.Default)\n  object Breadcrumb extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Breadcrumb/BreadcrumbDivider\",\n                       JSImport.Default)\n  object BreadcrumbDivider extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Breadcrumb/BreadcrumbSection\",\n                       JSImport.Default)\n  object BreadcrumbSection extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Form\", JSImport.Default)\n  object Form extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Form/FormButton\",\n                       JSImport.Default)\n  object FormButton extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Form/FormCheckbox\",\n                       JSImport.Default)\n  object FormCheckbox extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Form/FormDropdown\",\n                       JSImport.Default)\n  object FormDropdown extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Form/FormField\",\n                       JSImport.Default)\n  object FormField extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Form/FormGroup\",\n                       JSImport.Default)\n  object FormGroup extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Form/FormInput\",\n                       JSImport.Default)\n  object FormInput extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Form/FormRadio\",\n                       JSImport.Default)\n  object FormRadio extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Form/FormSelect\",\n                       JSImport.Default)\n  object FormSelect extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Form/FormTextArea\",\n                       JSImport.Default)\n  object FormTextArea extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Grid\", JSImport.Default)\n  object Grid extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Grid/GridColumn\",\n                       JSImport.Default)\n  object GridColumn extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Grid/GridRow\", JSImport.Default)\n  object GridRow extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Menu\", JSImport.Default)\n  object Menu extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Menu/MenuHeader\",\n                       JSImport.Default)\n  object MenuHeader extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Menu/MenuItem\",\n                       JSImport.Default)\n  object MenuItem extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Menu/MenuMenu\",\n                       JSImport.Default)\n  object MenuMenu extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Message\", JSImport.Default)\n  object Message extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Message/MessageContent\",\n                       JSImport.Default)\n  object MessageContent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Message/MessageHeader\",\n                       JSImport.Default)\n  object MessageHeader extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Message/MessageItem\",\n                       JSImport.Default)\n  object MessageItem extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Message/MessageList\",\n                       JSImport.Default)\n  object MessageList extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Table\", JSImport.Default)\n  object Table extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Table/TableBody\",\n                       JSImport.Default)\n  object TableBody extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Table/TableCell\",\n                       JSImport.Default)\n  object TableCell extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Table/TableFooter\",\n                       JSImport.Default)\n  object TableFooter extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Table/TableHeader\",\n                       JSImport.Default)\n  object TableHeader extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Table/TableHeaderCell\",\n                       JSImport.Default)\n  object TableHeaderCell extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/collections/Table/TableRow\",\n                       JSImport.Default)\n  object TableRow extends js.Any\n\n  // Elements\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Button/Button\", JSImport.Default)\n  object Button extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Button/ButtonContent\",\n                       JSImport.Default)\n  object ButtonContent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Button/ButtonGroup\",\n                       JSImport.Default)\n  object ButtonGroup extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Button/ButtonOr\", JSImport.Default)\n  object ButtonOr extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Container\", JSImport.Default)\n  object Container extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Divider\", JSImport.Default)\n  object Divider extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Flag\", JSImport.Default)\n  object Flag extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Header\", JSImport.Default)\n  object Header extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Header/HeaderContent\",\n                       JSImport.Default)\n  object HeaderContent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Header/HeaderSubheader\",\n                       JSImport.Default)\n  object HeaderSubheader extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Icon\", JSImport.Default)\n  object Icon extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Icon/IconGroup\", JSImport.Default)\n  object IconGroup extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Image\", JSImport.Default)\n  object Image extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Image/ImageGroup\",\n                       JSImport.Default)\n  object ImageGroup extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Input\", JSImport.Default)\n  object Input extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Label\", JSImport.Default)\n  object Label extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Label/LabelDetail\",\n                       JSImport.Default)\n  object LabelDetail extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Label/LabelGroup\",\n                       JSImport.Default)\n  object LabelGroup extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/List\", JSImport.Default)\n  object List extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/List/ListContent\",\n                       JSImport.Default)\n  object ListContent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/List/ListDescription\",\n                       JSImport.Default)\n  object ListDescription extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/List/ListHeader\", JSImport.Default)\n  object ListHeader extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/List/ListIcon\", JSImport.Default)\n  object ListIcon extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/List/ListItem\", JSImport.Default)\n  object ListItem extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/List/ListList\", JSImport.Default)\n  object ListList extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Loader\", JSImport.Default)\n  object Loader extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Rail\", JSImport.Default)\n  object Rail extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Reveal\", JSImport.Default)\n  object Reveal extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Reveal/RevealContent\",\n                       JSImport.Default)\n  object RevealContent extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Segment\", JSImport.Default)\n  object Segment extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Segment/SegmentGroup\",\n                       JSImport.Default)\n  object SegmentGroup extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Step\", JSImport.Default)\n  object Step extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Step/StepContent\",\n                       JSImport.Default)\n  object StepContent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Step/StepDescription\",\n                       JSImport.Default)\n  object StepDescription extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Step/StepGroup\", JSImport.Default)\n  object StepGroup extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/elements/Step/StepTitle\", JSImport.Default)\n  object StepTitle extends js.Any\n\n  // Modules\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Accordion/Accordion\",\n                       JSImport.Default)\n  object Accordion extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Accordion/AccordionContent\",\n                       JSImport.Default)\n  object AccordionContent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Accordion/AccordionTitle\",\n                       JSImport.Default)\n  object AccordionTitle extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Checkbox\", JSImport.Default)\n  object Checkbox extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Dimmer\", JSImport.Default)\n  object Dimmer extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Dimmer/DimmerDimmable\",\n                       JSImport.Default)\n  object DimmerDimmable extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Dropdown\", JSImport.Default)\n  object Dropdown extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Dropdown/DropdownDivider\",\n                       JSImport.Default)\n  object DropdownDivider extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Dropdown/DropdownHeader\",\n                       JSImport.Default)\n  object DropdownHeader extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Dropdown/DropdownItem\",\n                       JSImport.Default)\n  object DropdownItem extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Dropdown/DropdownMenu\",\n                       JSImport.Default)\n  object DropdownMenu extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Embed\", JSImport.Default)\n  object Embed extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Modal\", JSImport.Default)\n  object Modal extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Modal/ModalActions\",\n                       JSImport.Default)\n  object ModalActions extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Modal/ModalContent\",\n                       JSImport.Default)\n  object ModalContent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Modal/ModalDescription\",\n                       JSImport.Default)\n  object ModalDescription extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Modal/ModalHeader\",\n                       JSImport.Default)\n  object ModalHeader extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Popup\", JSImport.Default)\n  object Popup extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Popup/PopupContent\",\n                       JSImport.Default)\n  object PopupContent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Popup/PopupHeader\",\n                       JSImport.Default)\n  object PopupHeader extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Progress\", JSImport.Default)\n  object Progress extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Rating\", JSImport.Default)\n  object Rating extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Rating/RatingIcon\",\n                       JSImport.Default)\n  object RatingIcon extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Search\", JSImport.Default)\n  object Search extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Search/SearchCategory\",\n                       JSImport.Default)\n  object SearchCategory extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Search/SearchResult\",\n                       JSImport.Default)\n  object SearchResult extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Search/SearchResults\",\n                       JSImport.Default)\n  object SearchResults extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Sidebar\", JSImport.Default)\n  object Sidebar extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Sidebar/SidebarPushable\",\n                       JSImport.Default)\n  object SidebarPushable extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/modules/Sidebar/SidebarPusher\",\n                       JSImport.Default)\n  object SidebarPusher extends js.Any\n\n  // Views\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Advertisement\", JSImport.Default)\n  object Advertisement extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Card/Card\", JSImport.Default)\n  object Card extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Card/CardContent\", JSImport.Default)\n  object CardContent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Card/CardDescription\",\n                       JSImport.Default)\n  object CardDescription extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Card/CardGroup\", JSImport.Default)\n  object CardGroup extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Card/CardHeader\", JSImport.Default)\n  object CardHeader extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Card/CardMeta\", JSImport.Default)\n  object CardMeta extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Comment\", JSImport.Default)\n  object Comment extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Comment/CommentAction\",\n                       JSImport.Default)\n  object CommentAction extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Comment/CommentActions\",\n                       JSImport.Default)\n  object CommentActions extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Comment/CommentAuthor\",\n                       JSImport.Default)\n  object CommentAuthor extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Comment/CommentAvatar\",\n                       JSImport.Default)\n  object CommentAvatar extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Comment/CommentContent\",\n                       JSImport.Default)\n  object CommentContent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Comment/CommentGroup\",\n                       JSImport.Default)\n  object CommentGroup extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Comment/CommentMetadata\",\n                       JSImport.Default)\n  object CommentMetadata extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Comment/CommentText\",\n                       JSImport.Default)\n  object CommentText extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Feed\", JSImport.Default)\n  object Feed extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Feed/FeedContent\", JSImport.Default)\n  object FeedContent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Feed/FeedDate\", JSImport.Default)\n  object FeedDate extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Feed/FeedEvent\", JSImport.Default)\n  object FeedEvent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Feed/FeedExtra\", JSImport.Default)\n  object FeedExtra extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Feed/FeedLabel\", JSImport.Default)\n  object FeedLabel extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Feed/FeedLike\", JSImport.Default)\n  object FeedLike extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Feed/FeedMeta\", JSImport.Default)\n  object FeedMeta extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Feed/FeedSummary\", JSImport.Default)\n  object FeedSummary extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Feed/FeedUser\", JSImport.Default)\n  object FeedUser extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Item\", JSImport.Default)\n  object Item extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Item/ItemContent\", JSImport.Default)\n  object ItemContent extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Item/ItemDescription\",\n                       JSImport.Default)\n  object ItemDescription extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Item/ItemExtra\", JSImport.Default)\n  object ItemExtra extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Item/ItemGroup\", JSImport.Default)\n  object ItemGroup extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Item/ItemHeader\", JSImport.Default)\n  object ItemHeader extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Item/ItemImage\", JSImport.Default)\n  object ItemImage extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Item/ItemMeta\", JSImport.Default)\n  object ItemMeta extends js.Any\n\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Statistic\", JSImport.Default)\n  object Statistic extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Statistic/StatisticGroup\",\n                       JSImport.Default)\n  object StatisticGroup extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Statistic/StatisticLabel\",\n                       JSImport.Default)\n  object StatisticLabel extends js.Any\n  @js.native @JSImport(\"semantic-ui-react/dist/commonjs/views/Statistic/StatisticValue\",\n                       JSImport.Default)\n  object StatisticValue extends js.Any\n}\n"
  },
  {
    "path": "core/src/main/scala/chandu0101/scalajs/react/components/semanticui/types.scala",
    "content": "package chandu0101.scalajs.react.components.semanticui\n\ncase class ButtonAnimatedType private (value: String) extends AnyVal\nobject ButtonAnimatedType {\n  val fade     = ButtonAnimatedType(\"fade\")\n  val vertical = ButtonAnimatedType(\"vertical\")\n  val values   = List(fade, vertical)\n}\n\ncase class SuiIconType(value: String) extends AnyVal\n\ncase class SuiCountry(value: String) extends AnyVal\n"
  },
  {
    "path": "demo/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>scalajs-react components demo</title>\n<style>\nhtml {\n\tfont-family: sans-serif;\n\t/* 1 */\n\t-ms-text-size-adjust: 100%;\n\t/* 2 */\n\t-webkit-text-size-adjust: 100%;\n\t/* 2 */\n}\n\nbody {\n\tmargin: 0;\n\tfont-size: 13px;\n\tline-height: 20px;\n}\n\na {\n\tcolor: red;\n\tbackground: transparent;\n\ttext-decoration: none;\n}\n/*body.pg-loading {*/\n/*overflow: hidden;*/\n/*}*/\n.pg-loading-screen {\n\tposition: fixed;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\ttop: 0;\n\tz-index: 1000000;\n\topacity: 1;\n\t/*background-color: #d35400;*/\n\tbackground-color: #F76350;\n\t-webkit-transition: background-color 0.4s ease-in-out 0s;\n\t-moz-transition: background-color 0.4s ease-in-out 0s;\n\t-ms-transition: background-color 0.4s ease-in-out 0s;\n\t-o-transition: background-color 0.4s ease-in-out 0s;\n\ttransition: background-color 0.4s ease-in-out 0s;\n}\n\n.spinner {\n\tmargin: 50px auto 0;\n\twidth: 70px;\n\ttext-align: center;\n}\n\n.spinner>div {\n\twidth: 18px;\n\theight: 18px;\n\tbackground-color: white;\n\tborder-radius: 100%;\n\tdisplay: inline-block;\n\t-webkit-animation: bouncedelay 1.4s infinite ease-in-out;\n\tanimation: bouncedelay 1.4s infinite ease-in-out;\n\t/* Prevent first frame from flickering when animation starts */\n\t-webkit-animation-fill-mode: both;\n\tanimation-fill-mode: both;\n}\n\n.spinner .bounce1 {\n\t-webkit-animation-delay: -0.32s;\n\tanimation-delay: -0.32s;\n}\n\n.spinner .bounce2 {\n\t-webkit-animation-delay: -0.16s;\n\tanimation-delay: -0.16s;\n}\n\n@\n-webkit-keyframes bouncedelay { 0%, 80%, 100% {\n\t-webkit-transform: scale(0.0)\n}\n\n40%\n{\n-webkit-transform\n:\n \nscale\n(1\n.0\n)\n \n}\n}\n@\nkeyframes bouncedelay { 0%, 80%, 100% {\n\ttransform: scale(0.0);\n\t-webkit-transform: scale(0.0);\n}\n\n40%\n{\ntransform\n:\n \nscale\n(1\n.0\n);\n\n                  \n-webkit-transform\n:\n \nscale\n(1\n.0\n);\n\n              \n}\n}\n.message {\n\ttext-align: center;\n\tmargin: 100px auto;\n\tcolor: #ffffff;\n\tfont-size: 18px;\n\tfont-weight: 500;\n}\n\nbody>#container {\n\tdisplay: none;\n}\n\nbody.pg-loaded>#container {\n\tdisplay: block;\n}\n\nhr {\n\tborder: none;\n\tborder-bottom: solid 1px #e0e0e0;\n\tmargin-top: 0;\n\tmargin-bottom: 18px;\t\n\tbox-sizing: content-box;\n\theight: 0;\n}\n</style>\n<link rel=\"stylesheet\" type=\"text/css\"\n\thref=\"https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.4/semantic.css\" />\n<link rel=\"stylesheet\" type=\"text/css\"\n\thref=\"http://elemental-ui.com/site.css\" />\n\n </head>\n<body>\n\n\t<div id=\"container\"></div>\n\n\t<script type=\"text/javascript\">\n\t\tloadingElement = document.createElement(\"div\");\n\t\tloadingElement.className = \"pg-loading-screen\";\n\t\tloadingElement.innerHTML = \"<div class=\\\"message\\\">\"\n\t\t\t\t+ \"<blockquote>\\\"Why join the navy when you can be a pirate\\\" - Steve Jobs</blockquote>\"\n\t\t\t\t+ \"<div class=\\\"spinner\\\">\" + \"<div class=\\\"bounce1\\\"></div>\"\n\t\t\t\t+ \"<div class=\\\"bounce2\\\"></div>\"\n\t\t\t\t+ \"<div class=\\\"bounce3\\\"></div>\" + \"</div>\" + \"</div>\";\n\t\tdocument.body.appendChild(loadingElement);\n\t\tdocument.body.className += \" pg-loading\"\n\n\t</script>\n\t<script type=\"text/javascript\" src=\"scalajs-react-components-demo-opt-library.js\"></script>\n\t<script type=\"text/javascript\" src=\"scalajs-react-components-demo-opt-loader.js\"></script>\n\t<script type=\"text/javascript\" src=\"scalajs-react-components-demo-opt.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "demo/src/main/scala/demo/AppCSS.scala",
    "content": "package demo\n\nimport chandu0101.scalajs.react.components.reactsplitpane.ReactSplitPane\nimport chandu0101.scalajs.react.components.{\n  Pager,\n  ReactDraggable,\n  ReactListView,\n  ReactSearchBox,\n  ReactTable,\n  ReactTagsInputCss,\n  SpinnerCss,\n  hljs\n}\nimport demo.components._\nimport demo.components.materialui._\n\nimport scalacss.ProdDefaults._\nimport scalacss.ScalaCssReact._\nimport scalacss.internal.mutable.GlobalRegistry\n\nobject AppCSS {\n  def load(): Unit = {\n    GlobalRegistry.register(\n      LeftNav.Style,\n      LeftNavPage.Style,\n      MuiButtonsDemo.Style,\n      MuiPaperDemo.Style,\n      MuiSwitchesDemo.Style,\n      MuiTabsDemo.Style,\n      MobileTearSheet.Style,\n      ReactTable.DefaultStyle,\n      ReactListView.DefaultStyle,\n      ReactSearchBox.DefaultStyle,\n      Pager.DefaultStyle,\n      ScalaCSSTutorial.Style,\n      InfoTemplate.Style,\n      ReactInfiniteDemo.styles,\n      ReactDraggable.Style,\n      MuiTabsDemo.Style,\n      ReactSplitPane.DefaultStyle,\n      ReactDraggable.Style,\n    )\n\n    /* touch objects to force namespace import */\n    hljs.Css.Github\n    ReactTagsInputCss\n    SpinnerCss\n\n    GlobalRegistry.addToDocumentOnRegistration()\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/CallbackDebug.scala",
    "content": "package demo\n\nimport japgolly.scalajs.react._\n\nimport scala.scalajs.js\n\nobject CallbackDebug {\n  trait Print[T] {\n    def print(t: T): String\n  }\n  trait PrintLower {\n    final implicit def PrintAny[T]: Print[T] =\n      new Print[T] {\n        override def print(t: T): String =\n          if (t == js.undefined) \"undefined\"\n          else if (t == null) \"null\"\n          else t.toString\n      }\n  }\n\n  object Print extends PrintLower {\n    def apply[T: Print](t: T): String =\n      implicitly[Print[T]].print(t)\n\n    implicit def PrintEvent[E <: ReactEvent]: Print[E] =\n      new Print[E] {\n        override def print(e: E): String = {\n          val d = e.asInstanceOf[js.Dynamic]\n          val u = js.undefined.asInstanceOf[js.Dynamic]\n          val event =\n            if (d.clipboardData != u) \"ReactClipboardEvent\"\n            else if (d.data != u) \"ReactCompositionEvent\"\n            else if (d.dataTransfer != u) \"ReactDragEvent\"\n            else if (d.relatedTarget != u) \"ReactFocusEvent\"\n            else if (d.locale != u) \"ReactKeyboardEvent\"\n            else if (d.buttons != u) \"ReactMouseEvent\"\n            else if (d.touches != u) \"ReactTouchEvent\"\n            else if (d.detail != u) \"ReactUIEvent\"\n            else if (d.deltaZ != u) \"ReactWheelEvent\"\n            else \"ReactEvent\"\n\n          val t = e.target.asInstanceOf[js.Dynamic]\n          val target =\n            if (t.value != u) \"I\"\n            else if (t.offsetTop != u) \"H\"\n            else \"\"\n          s\"$event$target: t.value: ${t.value}, t.offsetTop: ${t.offsetTop}\"\n        }\n      }\n  }\n\n  private def base(name: String, params: String*): Callback =\n    Callback.info(s\"Event handler: $name(${params.mkString(\", \")})\")\n\n  def f0(name: String): Callback =\n    base(name)\n  def f1[T1: Print](name: String): js.UndefOr[T1 => Callback] =\n    (_1: T1) => base(name, Print(_1))\n  def f2[T1: Print, T2: Print](name: String): js.UndefOr[(T1, T2) => Callback] =\n    (_1: T1, _2: T2) => base(name, Print(_1), Print(_2))\n  def f3[T1: Print, T2: Print, T3: Print](name: String): js.UndefOr[(T1, T2, T3) => Callback] =\n    (_1: T1, _2: T2, _3: T3) => base(name, Print(_1), Print(_2), Print(_3))\n}"
  },
  {
    "path": "demo/src/main/scala/demo/ReactApp.scala",
    "content": "package demo\n\nimport chandu0101.scalajs.react.components.ReactTapEventPlugin\nimport chandu0101.scalajs.react.components.hljs\nimport demo.routes.AppRouter\nimport org.scalajs.dom\n\nimport scala.scalajs.js\nimport scala.scalajs.js.Dynamic.{global => g}\nimport scala.scalajs.js.JSApp\n\nobject ReactApp extends JSApp {\n\n  override def main(): Unit = {\n    // remove waiting page stuff\n    if (!js.isUndefined(g.loadingElement)) {\n      g.document.body.removeChild(g.loadingElement)\n      g.loadingElement = js.undefined\n      dom.document.body.className.replace(\"pg-loading\", \"\")\n      dom.document.body.className += \" pg-loaded\"\n    }\n\n    //TODO: dev-server complains that we load several times?\n    ReactTapEventPlugin(js.undefined)\n    hljs.Hljs.registerLanguage(\"scala\", hljs.Languages.Scala)\n    AppCSS.load()\n    val router = AppRouter.router()\n    router.renderIntoDOM(dom.document.getElementById(\"container\"))\n    ()\n  }\n}"
  },
  {
    "path": "demo/src/main/scala/demo/components/AppHeader.scala",
    "content": "package demo\npackage components\n\nimport chandu0101.scalajs.react.components._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.component.Generic.toComponentCtor\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject AppHeader {\n  import RCustomStyles._\n\n  object Style {\n\n    val headerStyle = TagMod(\n      ^.background := \"#F2706D\",\n      ^.fontSize := \"1.5em\",\n      ^.padding := \"0px\",\n      ^.margin := \"0px\",\n      ^.position := \"fixed\",\n      ^.width := \"100%\",\n      ^.zIndex := \"5\"\n    )\n\n    val menuNav = TagMod(\n      MsFlexAlign := \"center\",\n      WebkitAlignItems := \"center\",\n      WebkitBoxAlign := \"center\",\n      ^.alignItems := \"center\",\n      ^.display := \"-ms-flexbox\",\n      ^.display := \"-webkit-box\",\n      ^.display := \"-webkit-flex\",\n      ^.display := \"flex\",\n      ^.height := \"64px\",\n      ^.lineHeight := \"64px\",\n      ^.margin := \"0 3rem\"\n    )\n\n    val logo = TagMod(\n      ^.color := \"rgb(244, 233, 233)\",\n      ^.textDecoration := \"none\",\n      ^.width := \"150px\"\n    )\n\n    val menuItem = TagMod(\n      ^.padding := \"20px\",\n      ^.color := \"rgb(244, 233, 233)\",\n      ^.textDecoration := \"none\"\n    )\n\n    val menuItemHover = TagMod(^.background := \"#f1453e\")\n\n  }\n\n  case class State(menuHover: String = \"\")\n\n  class Backend(t: BackendScope[_, State]) {\n\n    def onMouseEnter(menu: String) = t.modState(_.copy(menuHover = menu))\n\n    val onMouseLeave = t.modState(_.copy(menuHover = \"\"))\n\n    def render(S: State) = {\n      val github: String = \"Github\"\n      <.header(Style.headerStyle)(\n        <.nav(Style.menuNav)(\n          <.a(Style.logo, ^.href := \"#\")(\"S J R C\"),\n          <.div(^.marginLeft := \"auto\")(\n            <.a(\n              ^.target := \"_blank\",\n              Style.menuItemHover.when(S.menuHover == github),\n              Style.menuItem,\n              ^.href := \"https://github.com/chandu0101/scalajs-react-components\",\n              ^.onMouseEnter --> onMouseEnter(github),\n              ^.onMouseLeave --> onMouseLeave\n            )(github)\n          )\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"AppHeader\")\n    .initialState(State())\n    .renderBackend[Backend]\n    .build\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/CallbackDebug.scala",
    "content": "package demo.components\n\nimport japgolly.scalajs.react._\n\nimport scala.scalajs.js\n\nobject CallbackDebug {\n  trait Print[T] {\n    def print(t: T): String\n  }\n  trait PrintLower {\n    final implicit def PrintAny[T]: Print[T] =\n      new Print[T] {\n        override def print(t: T): String =\n          if (t == js.undefined) \"undefined\"\n          else if (t == null) \"null\"\n          else t.toString\n      }\n  }\n\n  object Print extends PrintLower {\n    def apply[T: Print](t: T): String =\n      implicitly[Print[T]].print(t)\n\n    implicit def PrintEvent[E <: ReactEvent]: Print[E] =\n      new Print[E] {\n        override def print(e: E): String = {\n          val d = e.asInstanceOf[js.Dynamic]\n          val u = js.undefined.asInstanceOf[js.Dynamic]\n          val event =\n            if (d.clipboardData != u) \"ReactClipboardEvent\"\n            else if (d.data != u) \"ReactCompositionEvent\"\n            else if (d.dataTransfer != u) \"ReactDragEvent\"\n            else if (d.relatedTarget != u) \"ReactFocusEvent\"\n            else if (d.locale != u) \"ReactKeyboardEvent\"\n            else if (d.buttons != u) \"ReactMouseEvent\"\n            else if (d.touches != u) \"ReactTouchEvent\"\n            else if (d.detail != u) \"ReactUIEvent\"\n            else if (d.deltaZ != u) \"ReactWheelEvent\"\n            else \"ReactEvent\"\n\n          val t = e.target.asInstanceOf[js.Dynamic]\n          val target =\n            if (t.value != u) \"I\"\n            else if (t.offsetTop != u) \"H\"\n            else \"\"\n\n          val values = js.Object.keys(e).map{\n            key =>\n              val valueU: js.Any = e.asInstanceOf[js.Dictionary[js.Any]](key)\n\n              val valueS = if (js.isUndefined(valueU)) \"empty\"\n              else if (js.typeOf(valueU) == \"function\") \"function\"\n              else util.Try(js.JSON.stringify(valueU)).getOrElse(\"circular\")\n\n              s\"$key: $valueS\"\n          }\n\n          s\"$event$target: ${values.mkString(\"{\", \", \", \"}\")}\"\n        }\n      }\n  }\n\n  private def base(name: String, params: String*): Callback =\n    Callback.warn(s\"Event handler: $name(${params.mkString(\", \")})\")\n\n  def f0(name: String): Callback =\n    base(name)\n  def f1[T1: Print](name: String): js.UndefOr[T1 => Callback] =\n    (_1: T1) => base(name, Print(_1))\n  def f2[T1: Print, T2: Print](name: String): js.UndefOr[(T1, T2) => Callback] =\n    (_1: T1, _2: T2) => base(name, Print(_1), Print(_2))\n  def f3[T1: Print, T2: Print, T3: Print](name: String): js.UndefOr[(T1, T2, T3) => Callback] =\n    (_1: T1, _2: T2, _3: T3) => base(name, Print(_1), Print(_2), Print(_3))\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/CodeExample.scala",
    "content": "package demo\npackage components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject CodeExample {\n\n  object Style {\n\n    val pageBodyContent = TagMod(\n      ^.borderRadius := \"2px\",\n      ^.boxShadow := \"0 1px 4px rgba(223, 228, 228, 0.79)\",\n      ^.maxWidth := \"1024px\"\n    )\n\n    val contentDemo = TagMod(^.padding := \"30px\")\n\n    val contentCode = TagMod(^.borderTop := \"solid 1px #e0e0e0\")\n\n    val title = TagMod(\n      ^.paddingBottom := \"15px\"\n    )\n\n  }\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props, C: PropsChildren) = {\n      <.div(\n        (<.h3(P.title, Style.title)).when(P.title.nonEmpty),\n        <.div(Style.pageBodyContent)(\n          <.div(Style.contentDemo, ^.key := \"dan\")(\n            C\n          ),\n          <.pre(Style.contentCode, ^.key := \"code\")(\n            CodeHighlight(P.code)\n          )\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"codeexample\")\n    .renderBackendWithChildren[Backend]\n    .build\n\n  case class Props(code: String, title: String)\n\n  def apply(\n      code: String,\n      title: String\n  )(children: VdomNode*) = {\n    //    component.set(key, ref)(Props(code, title), children: _*)\n    component(Props(code, title))(children: _*)\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/CodeHighlight.scala",
    "content": "package demo\npackage components\n\nimport chandu0101.scalajs.react.components.hljs.Hljs\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.component.Generic.toComponentCtor\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom\nimport org.scalajs.dom.ext.PimpedNodeList\n\nobject CodeHighlight {\n  val applySyntaxHighlight = Callback(\n    dom.document.querySelectorAll(\"code\").foreach(Hljs.highlightBlock)\n  )\n\n  private val component = ScalaComponent\n    .builder[String](\"CodeHighLighter\")\n    .render_P(str => <.code(^.`class` := \"scala\", ^.padding := \"20px\", str))\n    .configure(\n      _.componentDidMountConst(applySyntaxHighlight).componentDidUpdateConst(applySyntaxHighlight))\n    .build\n\n  def apply(code: String) = component(code)\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ComponentCredits.scala",
    "content": "package demo\npackage components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom.ext.Ajax\n\nimport scala.scalajs.concurrent.JSExecutionContext.Implicits.queue\nimport scala.scalajs.js\nimport scala.scalajs.js.{Date, JSON}\n\nobject ComponentCredits {\n\n  case class State(users: List[Github])\n\n  class Backend(t: BackendScope[Props, State]) {\n    assert(t != null)\n    def render(S: State) = {\n      if (S.users.isEmpty) <.div(\"Loading Credits ...\")\n      else\n        <.div(\n          <.h4(\"Contributors: \"),\n          <.div(^.marginRight := \"10px\")(\n            S.users.map(u => GithubUser(user = u, key = u.login)).toTagMod)\n        )\n\n    }\n  }\n\n  val component =\n    ScalaComponent\n      .builder[Props](\"ComponentCredits\")\n      .initialState(State(List()))\n      .renderBackend[Backend]\n      .componentDidMount(\n        $ =>\n          Callback {\n            val url =\n              s\"https://api.github.com/repos/chandu0101/scalajs-react-components/commits?path=${$.props.filePath}\"\n            Ajax.get(url).foreach {\n              case xhr =>\n                if (xhr.status == 200) {\n                  val rawUsers = JSON.parse(xhr.responseText).asInstanceOf[js.Array[js.Dynamic]]\n                  val users = rawUsers\n                    .map(\n                      u =>\n                        Github(\n                          login = u.author.login.toString,\n                          html_url = u.author.html_url.toString,\n                          avatar_url = u.author.avatar_url.toString,\n                          time = new Date(u.commit.author.date.toString).getTime()\n                      )\n                    )\n                    .toList\n                    .groupBy(_.login)\n                    .map {\n                      case (_, objlist) => objlist.minBy(_.time)\n                    }\n                    .toSet\n                    .toList\n\n                  $.modState(_.copy(users = users.sortBy(_.time)))\n                    .when(true) //TODO ($.isMounted)\n                    .runNow()\n                }\n            }\n        }\n      )\n      .build\n\n  case class Props(filePath: String)\n\n  def apply(filePath: String) = {\n    //    component.set(key, ref)(Props(filePath))\n    component(Props(filePath))\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ComponentGridItem.scala",
    "content": "package demo\npackage components\n\nimport demo.routes.AppRouter._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject ComponentGridItem {\n\n  object Style {\n\n    val item = TagMod(\n      ^.margin := \"30px\",\n      ^.maxWidth := \"250px\",\n      ^.cursor := \"pointer\",\n      ^.boxShadow := \"0 1px 3px rgba(85, 89, 88, 0.24)\"\n    )\n\n    val itemTitle = TagMod(\n      ^.backgroundColor := \"#eeeeee\",\n      ^.color := \"rgba(0, 0, 0, 0.87)\",\n      ^.fontSize := \"18px\",\n      ^.fontWeight := \"500\",\n      ^.letterSpacing := \"0px\",\n      ^.lineHeight := \"54px\",\n      ^.margin := \"0px\",\n      ^.padding := \"0px\",\n      ^.textAlign := \"center\"\n    )\n\n    val itemImage = TagMod(\n      ^.maxHeight := \"250 px\",\n      ^.maxWidth := \"250 px\",\n      ^.minHeight := \"100 px\",\n      ^.minWidth := \"120 px\"\n    )\n\n    val itemHover = TagMod(^.boxShadow := \"0 10px 18px rgba(16, 208, 194, 0.24)\")\n\n  }\n\n  case class State(itemHover: Boolean = false)\n\n  class Backend(t: BackendScope[Props, State]) {\n\n    val onMouseOver = t.modState(_.copy(itemHover = true))\n\n    val onMouseOut = t.modState(_.copy(itemHover = false))\n\n    def render(P: Props, S: State) =\n      <.div(\n        Style.item,\n        Style.itemHover.when(S.itemHover),\n        P.ctrl setOnClick P.route,\n        ^.onMouseEnter --> onMouseOver,\n        ^.onMouseLeave --> onMouseOut,\n        <.h3(\n          Style.itemTitle,\n          ^.key := P.heading,\n          P.heading\n        ),\n        <.img(\n          ^.src := P.img.asInstanceOf[String],\n          Style.itemImage,\n          ^.key := \"alink\",\n          ^.width := 250.px\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"ComponentGridElement\")\n    .initialState(State())\n    .renderBackend[Backend]\n    .build\n\n  case class Props(heading: String, route: Page, img: js.Any, ctrl: RouterCtl[Page])\n\n  def apply(heading: String, route: Page, img: js.Any, ctrl: RouterCtl[Page]) = {\n    component(Props(heading, route, img, ctrl))\n    //    component.set(key, ref)(Props(heading, route, img, ctrl))\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/GithubUser.scala",
    "content": "package demo\npackage components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\ncase class Github(login: String = \"\",\n                  html_url: String = \"\",\n                  avatar_url: String = \"\",\n                  time: Double = 0) {\n  override def equals(obj: Any): Boolean = obj match {\n    case that: Github => that.login.equalsIgnoreCase(this.login)\n    case _            => false\n  }\n}\n\nobject GithubUser {\n\n  object Styles {\n    val userGroup = TagMod(^.display := \"inline-block\",\n                           ^.textAlign := \"center\",\n                           ^.textDecoration := \"none\",\n                           ^.color := \"black\")\n\n    val userIcon = TagMod(^.margin := \"10px\",\n                          ^.display := \"block\",\n                          ^.width := \"100px\",\n                          ^.height := \"100px\",\n                          ^.borderRadius := \"50%\")\n\n    val userName = TagMod(^.fontSize := \"18px\", ^.fontWeight := \"500\")\n  }\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props) = {\n      <.a(Styles.userGroup, ^.href := P.user.html_url)(\n        <.img(Styles.userIcon, ^.src := P.user.avatar_url),\n        <.span(Styles.userName)(P.user.login)\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"GithubUser\")\n    .renderBackend[Backend]\n    .build\n\n  case class Props(user: Github)\n\n  def apply(user: Github, key: Key) = {\n    //    component.set(key, ref)(Props(user))}\n    component.withKey(key)(Props(user))\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/Images.scala",
    "content": "package demo.components\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.JSImport\n\nobject Images {\n\n  @js.native @JSImport(\"./googleMap.png\", JSImport.Default)\n  object googleMapImage extends js.Any\n  @js.native @JSImport(\"./reactListView.png\", JSImport.Default)\n  object reactListViewImage extends js.Any\n  @js.native @JSImport(\"./reactTreeView.png\", JSImport.Default)\n  object reactTreeViewImage extends js.Any\n  @js.native @JSImport(\"./elementalui.png\", JSImport.Default)\n  object elementaluiImage extends js.Any\n  @js.native @JSImport(\"./mui.png\", JSImport.Default)\n  object materialuiImage extends js.Any\n  @js.native @JSImport(\"./semanticui.png\", JSImport.Default)\n  object semanticuiImage extends js.Any\n  @js.native @JSImport(\"./reactTable.png\", JSImport.Default)\n  object reactTableImage extends js.Any\n  @js.native @JSImport(\"./reactSplitPane.png\", JSImport.Default)\n  object reactSplitPaneImage extends js.Any\n  @js.native @JSImport(\"./bottom-tear.svg\", JSImport.Default)\n  object bottomTearImage extends js.Any\n  @js.native @JSImport(\"./reactTagsInput.png\", JSImport.Default)\n  object reactTagsInputImage extends js.Any\n  @js.native @JSImport(\"./reactInfinite.png\", JSImport.Default)\n  object reactInfiniteImage extends js.Any\n  @js.native @JSImport(\"./reactGeomIcon.png\", JSImport.Default)\n  object reactGeomIconImage extends js.Any\n  @js.native @JSImport(\"./spinner.png\", JSImport.Default)\n  object spinnerImage extends js.Any\n  @js.native @JSImport(\"./reactPopover.png\", JSImport.Default)\n  object reactPopoverImage extends js.Any\n  @js.native @JSImport(\"./reactDraggable.png\", JSImport.Default)\n  object reactDraggableImage extends js.Any\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/InfoTemplate.scala",
    "content": "package demo\npackage components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ProdDefaults._\n\nobject InfoTemplate {\n\n  case class Props(\n      browsersTested: List[String],\n      componentFilePath: String,\n      scalacss: Boolean\n  )\n\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props, C: PropsChildren) = {\n      <.div(^.cls := \"info-template\")(\n        <.div(^.cls := \"component-info\")(C),\n        (<.div(\n          <.h4(\"Style :\"),\n          <.a(^.href := \"#scalacss\", \"scalacss\")\n        )).when(P.scalacss),\n        (<.div(^.marginTop := \"10px\")(\n          <.h4(\"Tested Browsers List :\"),\n          <.ul(^.marginLeft := \"50px\")(P.browsersTested.map(s => <.li(s)).toTagMod)\n        )).when(P.browsersTested.nonEmpty),\n        <.div(^.marginTop := \"10px\")(\n          ComponentCredits(\n            filePath =\n              s\"core/src/main/scala/chandu0101/scalajs/react/components/${P.componentFilePath}\")\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"InfoTemplate\")\n    .renderBackendWithChildren[Backend]\n    .build\n\n  object Style extends StyleSheet.Inline {\n    import dsl._\n    val content = style(\n      textAlign.center,\n      fontSize(30.px),\n      paddingTop(40.px)\n    )\n  }\n\n  def apply(\n      componentFilePath: String,\n      scalacss: Boolean = false,\n      browsersTested: List[String] = List()\n  )(children: VdomNode*) =\n    //    component.set(key, ref)(\n    //      Props(browsersTested, componentFilePath, scalacss),\n    //      children: _*\n    //    )\n    component(Props(browsersTested, componentFilePath, scalacss))(children: _*)\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/LeftNav.scala",
    "content": "package demo\npackage components\n\nimport demo.routes.LeftRoute\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.component.Generic.toComponentCtor\nimport japgolly.scalajs.react.extra.router.RouterCtl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ProdDefaults._\nimport scalacss.ScalaCssReact._\n\nobject LeftNav {\n  object Style extends StyleSheet.Inline {\n\n    import dsl._\n\n    val container = style(\n      display.flex,\n      flexDirection.column,\n      listStyle := \"none\",\n      padding.`0`\n    )\n\n    val menuItem = styleF.bool(\n      selected =>\n        styleS(\n          lineHeight(48.px),\n          padding :=! \"0 25px\",\n          cursor.pointer,\n          textDecoration := \"none\",\n          mixinIfElse(selected)(\n            color.red,\n            fontWeight._500\n          )(\n            color.black,\n            &.hover(\n              color(c\"#555555\"),\n              backgroundColor(c\"#ecf0f1\")\n            )\n          )\n      ))\n  }\n\n  case class Props(menus: List[LeftRoute], selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props) = {\n      <.ul(Style.container)(\n        P.menus\n          .map(\n            item =>\n              <.li(\n                ^.key := item.name,\n                Style.menuItem(item == P.selectedPage),\n                item.name,\n                P.ctrl setOnClick item\n            ))\n          .toTagMod\n      )\n    }\n  }\n  val component = ScalaComponent\n    .builder[Props](\"LeftNav\")\n    .renderBackend[Backend]\n    .build\n  def apply(menus: List[LeftRoute], selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) = {\n    component(Props(menus, selectedPage, ctrl))\n    //    component.set(key, ref)(Props(menus, selectedPage, ctrl))\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/LeftNavPage.scala",
    "content": "package demo\npackage components\n\nimport demo.routes.LeftRoute\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ProdDefaults._\nimport scalacss.ScalaCssReact._\n\nobject LeftNavPage {\n\n  object Style extends StyleSheet.Inline {\n    import dsl._\n\n    val container = style(\n      display.flex,\n      minHeight(600.px),\n      paddingTop(64.px)\n    )\n\n    val nav = style(width(190.px))\n\n    val content = style(\n      padding(30.px),\n      borderLeft :=! \"1px solid rgb(223, 220, 220)\",\n      flex := \"1\"\n    )\n  }\n\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props) = {\n      <.div(\n        Style.container,\n        <.div(Style.nav, LeftNav(P.menu, P.selectedPage, P.ctrl)),\n        <.div(Style.content, P.selectedPage.render())\n      )\n    }\n  }\n  val component = ScalaComponent\n    .builder[Props](\"LeftNavPage\")\n    .renderBackend[Backend]\n    .build\n\n  case class Props(menu: List[LeftRoute], selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(menu: List[LeftRoute],\n            selectedPage: LeftRoute,\n            ctrl: RouterCtl[LeftRoute]): VdomElement = {\n    component(Props(menu, selectedPage, ctrl))\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/LocalDemoButton.scala",
    "content": "package demo.components\n\nimport chandu0101.scalajs.react.components._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject LocalDemoButton {\n\n  import RCustomStyles._\n\n  trait Style {\n\n    val button = TagMod(\n      ^.backgroundColor := \"#F2706D\",\n      ^.border := \"1px solid transparent\",\n      ^.boxShadow := \"0 1px 3px 0 rgba(0, 0, 0, 0.12), 0 1px 2px 0 rgba(0, 0, 0, 0.24)\",\n      ^.color := \"#F5F4F4\",\n      ^.cursor := \"pointer\",\n      ^.display := \"inline-block\",\n      ^.fontSize := \"15px\",\n      ^.textDecoration := \"none\",\n      ^.padding := \"5px 7px\",\n      WebkitBoxShadow := \"0 1px 3px 0 rgba(0, 0, 0, 0.12), 0 1px 2px 0 rgba(0, 0, 0, 0.24)\"\n    )\n\n    val buttonHover = TagMod(\n      ^.backgroundColor := \"#DA423E\",\n      ^.textDecoration := \"none\"\n    )\n\n  }\n\n  case class State(buttonHover: Boolean = false)\n\n  class Backend(t: BackendScope[Props, State]) {\n\n    def onButtonClick(P: Props)(e: ReactMouseEvent): Callback =\n      (CallbackOption.liftOptionLike(P.onButtonClick).flatMap(f => f(e)) >>\n        e.preventDefaultCB)\n\n    val onMouseEnter: Callback =\n      t.modState(_.copy(buttonHover = true))\n\n    val onMouseLeave: Callback =\n      t.modState(_.copy(buttonHover = false))\n\n    def styleSet1(st1: TagMod, more: (TagMod, Boolean)*): TagMod = {\n      TagMod(st1, more.filter(_._2).map(_._1).toTagMod)\n    }\n\n    def render(P: Props, S: State) = {\n      val buttonStyle = styleSet1(\n        P.style.button,\n        P.style.buttonHover -> S.buttonHover\n      )\n      if (P.linkButton)\n        <.a(\n          buttonStyle,\n          ^.href := P.href,\n          ^.target := \"_blank\",\n          ^.onMouseEnter --> onMouseEnter,\n          ^.onMouseLeave --> onMouseLeave,\n          P.name\n        )\n      else\n        <.a(\n          buttonStyle,\n          ^.onClick ==> onButtonClick(P),\n          ^.onMouseEnter --> onMouseEnter,\n          ^.onMouseLeave --> onMouseLeave,\n          P.name\n        )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"LocalDemoButton\")\n    .initialState(State())\n    .renderBackend[Backend]\n    .build\n\n  case class Props(\n      name: String,\n      onButtonClick: js.UndefOr[ReactMouseEvent => Callback],\n      linkButton: Boolean,\n      href: String,\n      style: Style\n  )\n\n  def apply(\n      name: String,\n      onButtonClick: js.UndefOr[ReactMouseEvent => Callback] = js.undefined,\n      linkButton: Boolean = false,\n      href: String = \"\",\n      style: Style = new Style {}\n  ) = {\n    component(Props(name, onButtonClick, linkButton, href, style))\n  }\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactDraggableDemo.scala",
    "content": "package demo.components\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.{RElementPosition, ReactDraggable}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom.raw.Event\n\nobject ReactDraggableDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n\n    def render =\n      <.div(\n        ^.cls := \"react-draggable-demo\",\n        <.h2(^.cls := \"mui-font-style-headline\", \"Demo\"),\n        CodeExample(code, \"ReactDraggable\")(\n          ReactDraggable(\n            zIndex = 100,\n            onStop = (e: Event, pos: RElementPosition) => Callback.info(s\"stopped at $pos\")\n          )(\n            <.div(\n              <.h2(\"Drag me\"),\n              ^.backgroundColor := \"#F2706D\",\n              ^.padding := \"20px\",\n              ^.width := \"200px\"\n            )\n          )\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactDraggableDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactDraggableInfo.scala",
    "content": "package demo.components\n\nimport japgolly.scalajs.react.ScalaComponent\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactDraggableInfo {\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactDraggableInfo\")\n    .render(\n      P =>\n        InfoTemplate(componentFilePath = \"ReactDraggable.scala\")(\n          <.div(^.cls := \"full-width-section\")(\n            <.h3(\"React Draggable :\"),\n            <.p(\n              \"Port of \",\n              <.a(^.href := \"https://github.com/STRML/react-draggable\")(\n                \"react-draggable\"\n              )\n            )\n          )\n      ))\n    .build\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactGeomIconDemo.scala",
    "content": "package demo.components\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.{IconName, ReactGeomIcon}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactGeomIconDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class State(value: String = \"\", multiValue: String = \"\")\n\n  class Backend(t: BackendScope[Unit, State]) {\n    def render(S: State) = {\n      <.div(\n        CodeExample(code, \"Demo\")(\n          <.div(\n            ReactGeomIcon(name = IconName.CAMERA, width = \"2em\", height = \"2em\", fill = \"red\")(),\n            ReactGeomIcon(name = IconName.CALENDAR, width = \"2em\", height = \"2em\", fill = \"blue\")(),\n            ReactGeomIcon(name = IconName.CHAT, width = \"2em\", height = \"2em\", fill = \"black\")(),\n            ReactGeomIcon(name = IconName.CHEVRONDOWN,\n                          width = \"2em\",\n                          height = \"2em\",\n                          fill = \"orange\")()\n          )\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactGeomIconDemo\")\n    .initialState(State())\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactGeomIconInfo.scala",
    "content": "package demo.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ProdDefaults._\n\nobject ReactGeomIconInfo {\n\n  object Style extends StyleSheet.Inline {\n\n    import dsl._\n\n    val content = style(\n      textAlign.center,\n      fontSize(30.px),\n      paddingTop(40.px)\n    )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactGeomIconInfo\")\n    .render(P => {\n      InfoTemplate(componentFilePath = \"icons/ReactGeomIcon.scala\")(\n        <.div(\n          <.h3(\"React GeomIcon \"),\n          <.p(\n            \"scalajs-react wrapper for \",\n            RedLink(\"react geom icons\", \"https://github.com/jxnblk/react-geomicons\")\n          ),\n          <.div(\n            <.h4(\"Supported Version :\"),\n            <.span(\"2.0.4\")\n          ),\n          <.div(\n            <.h4(\"How To Use :\"),\n            <.p(\"Follow the installation guide from :\",\n                RedLink(\"here\", \"https://github.com/jxnblk/react-geomicons#getting-started\"))\n          )\n        )\n      )\n\n    })\n    .build\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactInfiniteDemo.scala",
    "content": "package demo.components\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.ReactInfinite\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ProdDefaults._\nimport scalacss.ScalaCssReact._\n\nobject ReactInfiniteDemo {\n\n  object styles extends StyleSheet.Inline {\n\n    import dsl._\n\n    val container = style(\n      display.flex,\n      justifyContent.center,\n      alignItems.center,\n      width(65 %%)\n    )\n\n    val item = style(\n      width(300 px),\n      textAlign.center,\n      height(70 px),\n      padding(20 px)\n    )\n    val border = style(\n      borderBottom :=! \"2px solid rgba(0, 0, 0, 0.1)\",\n      marginLeft(4 px)\n    )\n  }\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class State(isLoading: Boolean = true, data: Vector[String] = Vector())\n\n  class Backend(t: BackendScope[_, State]) {\n\n    def renderRow(s: String): VdomElement = {\n      <.div(styles.item, s, ^.key := s, <.div(styles.border))\n    }\n\n    def loadData() = {\n      val data = (1 to 500).toVector.map(i => s\"List Item $i\")\n      t.modState(_.copy(isLoading = false, data = data))\n    }\n    def render(S: State) = {\n      <.div(\n        CodeExample(code, \"Demo\")(\n          <.div(\n            styles.container,\n            if (S.isLoading) <.div(\"Loading ..\")\n            else\n              ReactInfinite(\n                elementHeight = 70,\n                containerHeight = 400\n              )(S.data.map(renderRow))\n          )\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactSelectDemo\")\n    .initialState(State())\n    .renderBackend[Backend]\n    .componentDidMount(scope => scope.backend.loadData())\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactInfiniteInfo.scala",
    "content": "package demo.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ProdDefaults._\n\nobject ReactInfiniteInfo {\n\n  object Style extends StyleSheet.Inline {\n\n    import dsl._\n\n    val content = style(\n      textAlign.center,\n      fontSize(30.px),\n      paddingTop(40.px)\n    )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactInfiniteInfo\")\n    .render(P => {\n      InfoTemplate(componentFilePath = \"listviews/ReactInfinite.scala\")(\n        <.div(\n          <.h3(\"React Infinite \"),\n          <.p(\n            \"scalajs-react wrapper for \",\n            RedLink(\"react infinite\", \"https://github.com/seatgeek/react-infinite\")\n          ),\n          <.div(\n            <.h4(\"Supported Version :\"),\n            <.span(\"0.7.1\")\n          ),\n          <.div(\n            <.h4(\"How To Use :\"),\n            <.p(\"Follow the installation guide from :\",\n                RedLink(\"here\", \"https://github.com/seatgeek/react-infinite#installation\"))\n          )\n        )\n      )\n\n    })\n    .build\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactListViewDemo.scala",
    "content": "package demo.components\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.ReactListView\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom\n\nobject ReactListViewDemo {\n\n  object Style {\n\n    def listViewComponent = TagMod(^.float := \"left\", ^.marginBottom := \"2em\")\n\n    def selectedContent = TagMod(^.alignSelf := \"center\", ^.margin := \"0 40px\")\n\n    def listViewDemo = TagMod(^.display := \"flex\")\n  }\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val data = List(\"ScalaJS\", \"JavasScript\", \"ReactJS\", \"Html\", \"Css\", \"Software\", \"Browser\")\n\n  case class State(content: String = \"\")\n\n  class Backend(t: BackendScope[Unit, State]) {\n\n    def onItemSelect(item: String) = Callback {\n      val content = s\"Selected Item: $item <br>\"\n      dom.document.getElementById(\"listviewcontent\").innerHTML = content\n    }\n\n    def render =\n      <.div(\n        <.h3(\"Demo\"),\n        CodeExample(code, \"ReactListView\")(\n          <.div(Style.listViewDemo)(\n            ReactListView(\n              items = data,\n              showSearchBox = true,\n              onItemSelect = onItemSelect _\n            ),\n            <.strong(\n              ^.id := \"listviewcontent\",\n              Style.selectedContent,\n              \"Selected Content Here\"\n            )\n          )\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactListViewDemo\")\n    .initialState(State())\n    .renderBackend[Backend]\n    .build\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactListViewInfo.scala",
    "content": "package demo.components\n\nimport japgolly.scalajs.react.ScalaComponent\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactListViewInfo {\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactListViewInfo\")\n    .render(P => {\n      InfoTemplate(componentFilePath = \"listviews/ReactListView.scala\")(\n        <.h3(\"React ListView :\"),\n        <.p(\"List View Component with search feature\")\n      )\n    })\n    .build\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactPopoverDemo.scala",
    "content": "package demo.components\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.ReactPopOver\nimport chandu0101.scalajs.react.components.ReactPopOver.{Props, State}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactPopoverDemo {\n\n  object Style {\n    val popoverExample =\n      TagMod(^.display := \"flex\", ^.flexDirection := \"column\", ^.alignItems := \"center\")\n  }\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  class Backend(t: BackendScope[Unit, Unit]) {\n    private val topRef    = ScalaComponent.mutableRefTo(ReactPopOver.component)\n    private val rightRef  = ScalaComponent.mutableRefTo(ReactPopOver.component)\n    private val leftRef   = ScalaComponent.mutableRefTo(ReactPopOver.component)\n    private val bottomRef = ScalaComponent.mutableRefTo(ReactPopOver.component)\n\n    def toggleCB(refComp: => ScalaComponent.MountedImpure[Props, State, ReactPopOver.Backend])\n      : ReactMouseEvent => Callback = { e =>\n      CallbackTo(e.currentTarget.domAsHtml) flatMap refComp.backend.toggle\n    }\n\n    def render = {\n      <.div(\n        <.h3(\"Demo\"),\n        CodeExample(code, \"ReactPopover\")(\n          <.div(Style.popoverExample)(\n            <.div(^.padding := \"20px\")(\n              topRef.component(Props(\"Top Title\", \"top\"))(\"I am Top Pop over\"),\n              LocalDemoButton(name = \"Top Button\", onButtonClick = toggleCB(topRef.value))\n            ),\n            <.div(^.padding := \"20px\")(\n              leftRef.component(Props(\"Left Title\", \"left\"))(\"I am left Popover\"),\n              LocalDemoButton(name = \"Left Button\", onButtonClick = toggleCB(leftRef.value))\n            ),\n            <.div(^.padding := \"20px\")(\n              rightRef.component(Props(\"Right Title\", \"right\"))(\"I am Right Popover\"),\n              LocalDemoButton(name = \"Right Button\", onButtonClick = toggleCB(rightRef.value))\n            ),\n            <.div(^.padding := \"20px\")(\n              bottomRef.component(Props(\"Bottom Title\", \"bottom\"))(\"I am bottom Popover\"),\n              LocalDemoButton(name = \"Bottom Button\", onButtonClick = toggleCB(bottomRef.value))\n            )\n          )\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactPopoverDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactPopoverInfo.scala",
    "content": "package demo.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactPopoverInfo {\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactPopoverInfo\")\n    .render(P => {\n      InfoTemplate(componentFilePath = \"popovers/ReactPopOver.scala\")(\n        <.h3(\"React Popover :\"),\n        <.p(\" Simple popover component with following options: \"),\n        <.ul(^.paddingLeft := \"15px\")(\n          <.li(\"left\"),\n          <.li(\"right\"),\n          <.li(\"top\"),\n          <.li(\"bottom\")\n        )\n      )\n    })\n    .build\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactTagsInputDemo.scala",
    "content": "package demo.components\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.{ReactTagsInput, ReactTagsInputM}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject ReactTagsInputDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class State(tags: js.Array[String] = js.Array(\"scala\", \"scalajs\"))\n\n  class Backend(t: BackendScope[_, State]) {\n    val onChange: (js.Array[String]) => Callback =\n      tags => t.modState(_.copy(tags = tags)) >> Callback.info(s\"New state: $tags\")\n\n    def render(S: State) =\n      <.div(\n        CodeExample(code, \"Demo\")(\n          <.div(\n            ReactTagsInput(\n              value = S.tags,\n              onChange = onChange,\n              onBlur = demo.CallbackDebug.f0(\"onBlur\"),\n              onKeyDown = demo.CallbackDebug.f1(\"onKeyDown\"),\n              onKeyUp = demo.CallbackDebug.f1(\"onKeyUp\")\n            )()\n          )\n        )\n      )\n\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactTagsInputDemo\")\n    .initialState(State())\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactTagsInputInfo.scala",
    "content": "package demo.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ProdDefaults._\n\nobject ReactTagsInputInfo {\n\n  object Style extends StyleSheet.Inline {\n    import dsl._\n    val content = style(\n      textAlign.center,\n      fontSize(30.px),\n      paddingTop(40.px)\n    )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactTagsInputInfo\")\n    .render(P => {\n      InfoTemplate(componentFilePath = \"textfields/ReactTagsInput.scala\")(\n        <.div(\n          <.h3(\"React Tags Input \"),\n          <.p(\n            \"scalajs-react wrapper for \",\n            RedLink(\"tags input\", \"https://github.com/olahol/react-tagsinput\")\n          ),\n          <.div(\n            <.h4(\"Supported Version :\"),\n            <.span(\"3.0.3\")\n          ),\n          <.div(\n            <.h4(\"How To Use :\"),\n            <.p(\"Follow the installation guide from :\",\n                RedLink(\"here\", \"https://github.com/olahol/react-tagsinput#install\"))\n          )\n        )\n      )\n\n    })\n    .build\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactTreeViewDemo.scala",
    "content": "package demo.components\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.{ReactTreeView, TreeItem}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom\n\nobject ReactTreeViewDemo {\n\n  object Style {\n    def treeViewDemo = TagMod(^.display := \"flex\")\n\n    def selectedContent = TagMod(^.alignSelf := \"center\", ^.margin := \"0 40px\")\n  }\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val data = TreeItem(\n    \"root\",\n    TreeItem(\n      \"dude1\",\n      TreeItem(\"dude1c\")\n    ),\n    TreeItem(\"dude2\"),\n    TreeItem(\"dude3\"),\n    TreeItem(\n      \"dude4\",\n      TreeItem(\n        \"dude4c\",\n        TreeItem(\"dude4cc\")\n      )\n    )\n  )\n\n  case class State(content: String = \"\")\n\n  class Backend(t: BackendScope[Unit, State]) {\n\n    def onItemSelect(item: String, parent: String, depth: Int): Callback = {\n      val content =\n        s\"\"\"Selected Item: $item <br>\n            |Its Parent : $parent <br>\n            |Its depth:  $depth <br>\n          \"\"\".stripMargin\n      Callback(dom.document.getElementById(\"treeviewcontent\").innerHTML = content)\n    }\n\n    def render = {\n      <.div(\n        <.h3(\"Demo\"),\n        CodeExample(code, \"ReactTreeView\")(\n          <.div(Style.treeViewDemo)(\n            ReactTreeView(\n              root = data,\n              openByDefault = true,\n              onItemSelect = onItemSelect _,\n              showSearchBox = true\n            ),\n            <.strong(^.id := \"treeviewcontent\", Style.selectedContent)\n          )\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactTreeViewDemo\")\n    .initialState(State())\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ReactTreeViewInfo.scala",
    "content": "package demo.components\n\nimport japgolly.scalajs.react.ScalaComponent\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactTreeViewInfo {\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactTreeViewInfo\")\n    .render(P => {\n      InfoTemplate(componentFilePath = \"treeviews/ReactTreeView.scala\")(\n        <.h3(\"React TreeView :\"),\n        <.p(\"Tree View Component with search feature\")\n      )\n    })\n    .build\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/RedLink.scala",
    "content": "package demo\npackage components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject RedLink {\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props) = {\n      <.a(\n        ^.href := P.url,\n        P.name,\n        ^.textDecoration.none,\n        ^.color.red,\n        ^.margin := \"0 5px\",\n        ^.target := \"_blank\"\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"RedLink\")\n    .renderBackend[Backend]\n    .build\n\n  case class Props(name: String, url: String)\n\n  def apply(name: String, url: String) = component(Props(name, url))\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/ScalaCSSTutorial.scala",
    "content": "package demo\npackage components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ProdDefaults._\nimport scalacss.ScalaCssReact._\n\nobject ScalaCSSTutorial {\n\n  object Style extends StyleSheet.Inline {\n\n    import dsl._\n    val content = style(\n      padding(80.px),\n      unsafeChild(\"a\")(\n        color.red,\n        margin(20.px),\n        textDecoration := \"none\"\n      )\n    )\n  }\n\n  val basicCode =\n    \"\"\"\n      |\n      | //place this code at starting point of u r app / page where u using this component\n      |\n      | GlobalRegistry.register(ReactTable.DefaultStyle) // register style\n      |\n      | GlobalRegistry.addToDocumentOnRegistration() // add to html in runtime\n      |\n      |\n    \"\"\".stripMargin\n\n  val customCode =\n    \"\"\"\n      |\n      | object CustomTableStyle extends ReactTable.Style {\n      |\n      |  val original = new ReactTable.Style or  ReactTable.DefaultStyle // we need this hack as scala doesn't allow super.val :(\n      |\n      |  import dsl._\n      |\n      |  override val tableRow = style(original.tableRow.style,\n      |     &.hover(\n      |      backGroundColor.red\n      |     )\n      |   )\n      | }\n      |\n      |// make sure you register ur new style\n      | GlobalRegistry.register(CustomTableStyle)\n      |\n      |\n      |\n    \"\"\".stripMargin\n\n  val component = ScalaComponent\n    .builder[Unit](\"ScalaCSSTutorial\")\n    .renderStatic(\n      <.div(\n        Style.content,\n        <.div(\n          <.h4(\"Basic Usage :\"),\n          <.p(\n            \"To use scalacss based components, u just need to register component style\",\n            <.br(),\n            \"For example if you want to use ReactTable component in ur project \"\n          ),\n          <.pre(\n            CodeHighlight(basicCode)\n          ),\n          <.a(\n            ^.href := \"https://github.com/chandu0101/scalajs-react-components/blob/master/demo/src/main/scala/chandu0101/scalajs/react/components/demo/css/AppCSS.scala\",\n            \"real world example\",\n            ^.target := \"_blank\"\n          )\n        ),\n        <.div(\n          <.h4(\"Custom Styles:\"),\n          <.p(\n            \"If you want to customize style of a component then define a new style by extending base style class of component \",\n            <.br(),\n            \"For example we want to add custom hover color for ReactTable component\"\n          ),\n          <.pre(\n            CodeHighlight(customCode)\n          )\n        )\n      )\n    )\n    .build\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/SpinnerDemo.scala",
    "content": "package demo.components\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.Spinner\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js.{Array => JArray}\n\nobject SpinnerDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val component = ScalaComponent\n    .builder[Unit](\"SpinnerDemo\")\n    .render(\n      P =>\n        <.div(\n          CodeExample(code, \"Demo\")(\n            <.div(^.width := \"100px\", ^.height := \"100px\", ^.backgroundColor := \"grey\", Spinner()())\n          )\n      ))\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/SpinnerInfo.scala",
    "content": "package demo.components\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ProdDefaults._\n\nobject SpinnerInfo {\n\n  object Style extends StyleSheet.Inline {\n    import dsl._\n    val content = style(\n      textAlign.center,\n      fontSize(30.px),\n      paddingTop(40.px)\n    )\n  }\n\n  val component = ScalaComponent\n    .static(\"SpinnerInfo\")(\n      InfoTemplate(componentFilePath = \"spinners/Spinner.scala\")(\n        <.div(\n          <.h3(\"Spinner \"),\n          <.p(\n            \"scalajs-react wrapper for \",\n            RedLink(\"react-spinner\", \"https://github.com/chenglou/react-spinner\")\n          ),\n          <.div(\n            <.h4(\"Supported Version :\"),\n            <.span(\"0.2.2\")\n          ),\n          <.div(\n            <.h4(\"How To Use :\"),\n            <.p(\"Follow the installation guide from :\",\n                RedLink(\"here\", \"https://github.com/chenglou/react-spinner#install\"))\n          )\n        )\n      )\n    )\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/elementalui/EuiButtonsDemo.scala",
    "content": "package demo\npackage components\npackage elementalui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.elementalui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject EuiButtonsDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n    val renderButtonSizes =\n      <.div(\n        EuiButton(size = ButtonSize.lg)(\"Large\"),\n        EuiButton()(\"Default\"),\n        EuiButton(size = ButtonSize.sm)(\"Small\"),\n        EuiButton(size = ButtonSize.xs)(\"Extra Small\")\n      )\n\n    def renderButtonVariants(list: (ButtonType, String)*) =\n      <.div(\n        list.map(t => EuiButton(`type` = t._1)(t._2)).toTagMod\n      )\n\n    def render =\n      CodeExample(code, \"EuiButtons\")(\n        <.div(\n          <.h1(\"Buttons\"),\n          <.h2(\"Sizes\"),\n          renderButtonSizes,\n          <.h2(\"Fill Buttons\"),\n          renderButtonVariants(\n            (ButtonType.primary, \"Primary\"),\n            (ButtonType.success, \"Success\"),\n            (ButtonType.warning, \"Warning\"),\n            (ButtonType.danger, \"Danger\")\n          ),\n          <.h2(\"Default Button Alternatives\"),\n          renderButtonVariants(\n            (ButtonType.default_primary, \"Primary\"),\n            (ButtonType.default_success, \"Success\"),\n            (ButtonType.default_warning, \"Warning\"),\n            (ButtonType.default_danger, \"Danger\")\n          ),\n          <.h2(\"Hollow Button Alternatives\"),\n          renderButtonVariants(\n            (ButtonType.hollow_primary, \"Primary\"),\n            (ButtonType.hollow_success, \"Success\"),\n            (ButtonType.hollow_warning, \"Warning\"),\n            (ButtonType.hollow_danger, \"Danger\")\n          ),\n          <.h2(\"Link Style Buttons\"),\n          renderButtonVariants(\n            (ButtonType.link, \"Link\"),\n            (ButtonType.link_cancel, \"Cancel\"),\n            (ButtonType.link_delete, \"Delete\"),\n            (ButtonType.link_text, \"Text\")\n          ),\n          <.h2(\"Button Groups\"),\n          EuiButtonGroup()(\n            EuiButton()(\"Left\"),\n            EuiButton()(\"Middle\"),\n            EuiButton()(\"Right\")\n          ),\n          <.h2(\"Dropdown\"),\n          EuiDropdown(\n            buttonLabel = \"Default Trigger\",\n            items = js.Array(\n              EuiDropdownMenuItem(label = \"Action\"),\n              EuiDropdownMenuItem(label = \"Another Action\"),\n              EuiDropdownMenuItem(`type` = EuiDropdownMenuItemType.DIVIDER),\n              EuiDropdownMenuItem(label = \"Header\", `type` = EuiDropdownMenuItemType.HEADER),\n              EuiDropdownMenuItem(label = \"Action\")\n            )\n          )(),\n          <.h3(\"Custom Trigger\"),\n          EuiDropdown(\n            items = js.Array(\n              EuiDropdownMenuItem(label = \"Action\"),\n              EuiDropdownMenuItem(label = \"Another Action\"),\n              EuiDropdownMenuItem(`type` = EuiDropdownMenuItemType.DIVIDER),\n              EuiDropdownMenuItem(label = \"Header\", `type` = EuiDropdownMenuItemType.HEADER),\n              EuiDropdownMenuItem(label = \"Action\")\n            )\n          )(<.h3(\"I am an H3!!!\"))\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"EuiButtonsDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/elementalui/EuiFormsDemo.scala",
    "content": "package demo.components.elementalui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.elementalui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.concurrent.duration._\nimport scala.scalajs.js\n\nobject EuiFormsDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val flavors = js.Array(\n    FormSelectOption(\"Caramel\", \"caramel\"),\n    FormSelectOption(\"Chocolate\", \"chocolate\"),\n    FormSelectOption(\"Vanilla\", \"vanilla\"),\n    FormSelectOption(\"Strawberry\", \"strawberry\")\n  )\n\n  case class State(\n      searching: Boolean = false,\n      inputSelect: String = \"\",\n      inlineRadioGroup: String = \"\",\n      inputEmail: String = \"\",\n      inputPassword: String = \"\",\n      inputConfirmPassword: String = \"\",\n      files: scala.scalajs.js.Array[File] = scala.scalajs.js.Array()\n  )\n\n  val renderBasicExample =\n    <.div(\n      ^.className := \"code-example__example\",\n      EuiForm()(\n        EuiFormField(label = \"Email address\", htmlFor = \"basic-form-input-email\")(\n          EuiFormInput(`type` = \"email\", name = \"basic-form-input-email\")()\n        ),\n        EuiFormField(label = \"Password\", htmlFor = \"basic-form-input-password\")(\n          EuiFormInput(`type` = \"password\", name = \"basic-form-input-password\")()\n        ),\n        EuiFormField()(\n          EuiCheckbox(label = \"Check It\")()\n        ),\n        EuiButton()(\"Submit\")\n      )\n    )\n\n  val renderBasicExampleHorizontal =\n    <.div(\n      ^.className := \"code-example__example\",\n      EuiForm(`type` = FormType.horizontal)(\n        EuiFormField(label = \"Email address\", htmlFor = \"horizontal-input-email\")(\n          EuiFormInput(`type` = \"email\", name = \"horizontal-input-email\")()\n        ),\n        EuiFormField(label = \"Password\", htmlFor = \"horizontal-input-password\")(\n          EuiFormInput(`type` = \"password\", name = \"horizontal-input-password\")()\n        ),\n        EuiFormField(offsetAbsentLabel = true)(\n          EuiCheckbox(label = \"Check It\")()\n        ),\n        EuiFormField(offsetAbsentLabel = true)(\n          EuiButton()(\"Submit\")\n        )\n      )\n    )\n\n  val renderBasicExampleInline =\n    <.div(\n      ^.className := \"code-example__example\",\n      EuiForm(`type` = FormType.inline)(\n        EuiFormField(label = \"Email address\", htmlFor = \"inline-input-email\")(\n          EuiFormInput(`type` = \"email\", name = \"inline-input-email\")()\n        ),\n        EuiFormField(label = \"Password\", htmlFor = \"inline-input-password\")(\n          EuiFormInput(`type` = \"password\", name = \"inline-input-password\")()\n        ),\n        EuiFormField()(\n          EuiCheckbox(label = \"Check It\")()\n        ),\n        EuiFormField()(\n          EuiButton()(\"Submit\")\n        )\n      )\n    )\n\n  val renderInputGroupsContiguous =\n    <.div(\n      EuiInputGroup(contiguous = true)(\n        EuiInputGroupSection(grow = true)(\n          EuiFormInput(`type` = \"text\")()\n        ),\n        EuiInputGroupSection()(\n          EuiButton()(\"Button\")\n        )\n      ),\n      EuiInputGroup(contiguous = true)(\n        EuiInputGroupSection()(\n          EuiButton()(EuiGlyph(icon = Octicons.pencil)())\n        ),\n        EuiInputGroupSection()(\n          EuiFormInput(`type` = \"text\")()\n        )\n      )\n    )\n\n  val renderInputGroupsSeparate =\n    <.div(\n      EuiInputGroup()(\n        EuiInputGroupSection(grow = true)(\n          EuiFormInput(`type` = \"text\")()\n        ),\n        EuiInputGroupSection()(\n          EuiButton()(\"Button\")\n        )\n      ),\n      EuiInputGroup()(\n        EuiInputGroupSection()(\n          EuiButton()(EuiGlyph(icon = Octicons.pencil)())\n        ),\n        EuiInputGroupSection()(\n          EuiFormInput(`type` = \"text\")()\n        )\n      )\n    )\n\n  val renderSizes =\n    <.div(\n      EuiFormField(label = \"Input\", htmlFor = \"supported-controls-input\")(\n        EuiFormInput(name = \"supported-controls-input\")()\n      ),\n      EuiFormField(label = \"Large Input\", htmlFor = \"supported-controls-input-lg\")(\n        EuiFormInput(name = \"supported-controls-input-lg\", size = LgSmXs.lg)()\n      ),\n      EuiFormField(label = \"Small Input\", htmlFor = \"supported-controls-input-sm\")(\n        EuiFormInput(name = \"supported-controls-input-sm\", size = LgSmXs.sm)()\n      )\n    )\n\n  val renderNotes =\n    EuiFormField(label = \"Input with Notes\")(\n      EuiFormInput()(),\n      EuiFormNote()(\n        \"A note to help the user understand it's associated field, may extend beyond one line\"\n      ),\n      EuiFormNote(`type` = NoteType.warning)(\n        \"A warning to help the user understand it's associated field, may extend beyond one line\"\n      )\n    )\n\n  case class Backend($ : BackendScope[Unit, State]) {\n    def onDrop(files: scala.scalajs.js.Array[File]) = {\n      scala.scalajs.js.Dynamic.global.alert(files)\n      $.modState(_.copy(files = files))\n    }\n\n    def updateInlineRadios(value: String) =\n      $.modState(_.copy(inlineRadioGroup = value))\n\n    def updateSelect(value: String) =\n      $.modState(_.copy(inputSelect = value))\n\n    def updateEmail(e: ReactEventFromInput) = {\n      val value = e.target.value\n      $.modState(_.copy(inputEmail = value))\n    }\n\n    def updatePassword(e: ReactEventFromInput) = {\n      val value = e.target.value\n      $.modState(_.copy(inputPassword = value))\n    }\n\n    def updateConfirmPassword(e: ReactEventFromInput) = {\n      val value = e.target.value\n      $.modState(_.copy(inputConfirmPassword = value))\n    }\n\n    def validateConfirm(password: String) = {\n      $.state.map(_.inputPassword == password)\n    }\n\n    def handleSearch(e: ReactEventFromHtml) = {\n      val result = $.modState(_.copy(searching = true))\n      scala.scalajs.js.timers.setTimeout(2 seconds) {\n        $.modState(_.copy(searching = false)).runNow()\n      }\n      result\n    }\n\n    val renderSupportedControls =\n      <.div(\n        EuiFormInput()(),\n        EuiFormInput(multiline = true)(),\n        EuiFormSelect(\n          options = flavors,\n          firstOption = \"Select\",\n          onChange = updateSelect _\n        )(),\n        EuiFormField(label = \"Checkboxes\")(\n          EuiCheckbox(label = \"Check me out\")(),\n          EuiCheckbox(label = \"I'm disabled\", disabled = true)()\n        ),\n        EuiFormField(label = \"Radios\")(\n          EuiRadio(label = \"Pick Me\")(),\n          EuiRadio(label = \"No, pick me!\")()\n        ),\n        EuiFormField(label = \"Inline Checkboxes\", className = \"inline-controls\")(\n          EuiCheckbox(label = \"Check me out\")(),\n          EuiCheckbox(label = \"I'm disabled\", disabled = true)()\n        ),\n        EuiFormField(label = \"Inline Radios\", className = \"inline-controls\")(\n          EuiRadio(label = \"Pick Me\")(),\n          EuiRadio(label = \"No, pick me!\")()\n        )\n      )\n\n    val renderComplexForms =\n      <.div(\n        EuiFormRow()(\n          EuiFormField(\n            width = FormFieldWidth.one_half,\n            label = \"Credit Card Number\",\n            htmlFor = \"credit-card-number\"\n          )(\n            EuiFormInput(\n              pattern = \"[0-9]\",\n              name = \"credit-card-number\"\n            )()\n          ),\n          EuiFormField(\n            width = FormFieldWidth.one_quarter,\n            label = \"Expiration\",\n            htmlFor = \"credit-card-expiration\"\n          )(\n            EuiFormInput(\n              name = \"credit-card-expiration\"\n            )()\n          ),\n          EuiFormField(\n            width = FormFieldWidth.one_quarter,\n            label = \"Security Code (CCV)\",\n            htmlFor = \"credit-card-security\"\n          )(\n            EuiFormInput(\n              pattern = \"[0-9]\",\n              name = \"credit-card-security\"\n            )()\n          )\n        ),\n        EuiFormRow()(\n          EuiFormField(\n            width = FormFieldWidth.one_half,\n            label = \"First Name\",\n            htmlFor = \"first-name\"\n          )(\n            EuiFormInput(\n              name = \"first-name\"\n            )()\n          ),\n          EuiFormField(\n            width = FormFieldWidth.one_half,\n            label = \"Last Name\",\n            htmlFor = \"last-name\"\n          )(\n            EuiFormInput(\n              name = \"last-name\"\n            )()\n          )\n        ),\n        EuiFormField(\n          label = \"Billing Address\",\n          htmlFor = \"billing-address\"\n        )(\n          EuiFormInput(\n            name = \"address-street1\"\n          )()\n        ),\n        EuiFormField()(\n          EuiFormInput(\n            name = \"address-street2\"\n          )()\n        ),\n        EuiFormRow()(\n          EuiFormField(width = FormFieldWidth.two_thirds)(\n            EuiFormInput(name = \"city\")()\n          ),\n          EuiFormField(width = FormFieldWidth.one_third)(\n            EuiFormInput(name = \"state\")()\n          ),\n          EuiFormField(width = FormFieldWidth.one_third)(\n            EuiFormInput(name = \"postal-code\")()\n          ),\n          EuiFormField(width = FormFieldWidth.two_thirds)(\n            EuiFormSelect(\n              options = js.Array(\n                FormSelectOption(\"Esperantujo\", \"esperantujo\"),\n                FormSelectOption(\"Volapuko\", \"volapuko\"),\n                FormSelectOption(\"Usono\", \"usono\")\n              ),\n              firstOption = \"Country\",\n              onChange = updateSelect _\n            )()\n          )\n        )\n      )\n\n    def renderValidation(S: State) =\n      EuiForm()(\n        EuiRadioGroup(\n          label = \"Radios\",\n          value = S.inlineRadioGroup,\n          onChange = updateInlineRadios _,\n          options = flavors.map(_.asInstanceOf[js.Object]),\n          required = true\n        )(),\n        EuiFormSelect(\n          label = \"Select\",\n          value = S.inputSelect,\n          onChange = updateSelect _,\n          options = flavors,\n          required = true,\n          prependEmptyOption = true\n        )(),\n        EuiEmailInputGroup(\n          label = \"Email\",\n          value = S.inputEmail,\n          onChange = js.defined(updateEmail _),\n          required = true\n        )(),\n        EuiPasswordInputGroup(\n          label = \"Password\",\n          value = S.inputPassword,\n          onChange = js.defined(updatePassword _),\n          required = true\n        )(),\n        EuiPasswordInputGroup(\n          label = \"Confirm\",\n          value = S.inputConfirmPassword,\n          onChange = js.defined(updateConfirmPassword _),\n          required = true,\n          validatePassword = js.defined(validateConfirm _),\n          invalidMessage = \"Password validation doesn't match password\"\n        )()\n      )\n\n    def renderIcons(S: State) =\n      <.div(\n        <.h3(\"Alignment\"),\n        EuiFormRow()(\n          EuiFormIconField(width = FormFieldWidth.one_half,\n                           iconPosition = LeftRight.left,\n                           iconColor = ColorVariant.default,\n                           iconKey = Octicons.star)(\n            EuiFormInput(name = \"icon-alignment-left\")()\n          ),\n          EuiFormIconField(width = FormFieldWidth.one_half,\n                           iconPosition = LeftRight.right,\n                           iconColor = ColorVariant.default,\n                           iconKey = Octicons.star)(\n            EuiFormInput(name = \"icon-alignment-right\")()\n          )\n        ),\n        <.h3(\"Context Variants Color\"),\n        EuiFormRow()(\n          EuiFormIconField(width = FormFieldWidth.one_fifth,\n                           iconColor = ColorVariant.default,\n                           iconKey = Octicons.star)(EuiFormInput()()),\n          EuiFormIconField(width = FormFieldWidth.one_fifth,\n                           iconColor = ColorVariant.primary,\n                           iconKey = Octicons.star)(EuiFormInput()()),\n          EuiFormIconField(width = FormFieldWidth.one_fifth,\n                           iconColor = ColorVariant.success,\n                           iconKey = Octicons.star)(EuiFormInput()()),\n          EuiFormIconField(width = FormFieldWidth.one_fifth,\n                           iconColor = ColorVariant.warning,\n                           iconKey = Octicons.star)(EuiFormInput()()),\n          EuiFormIconField(width = FormFieldWidth.one_fifth,\n                           iconColor = ColorVariant.danger,\n                           iconKey = Octicons.star)(EuiFormInput()())\n        ),\n        <.h3(\"Context Variants Fill\"),\n        EuiFormRow()(\n          EuiFormIconField(width = FormFieldWidth.one_fifth,\n                           iconFill = ColorVariant.default,\n                           iconKey = Octicons.star)(EuiFormInput()()),\n          EuiFormIconField(width = FormFieldWidth.one_fifth,\n                           iconFill = ColorVariant.primary,\n                           iconKey = Octicons.star)(EuiFormInput()()),\n          EuiFormIconField(width = FormFieldWidth.one_fifth,\n                           iconFill = ColorVariant.success,\n                           iconKey = Octicons.star)(EuiFormInput()()),\n          EuiFormIconField(width = FormFieldWidth.one_fifth,\n                           iconFill = ColorVariant.warning,\n                           iconKey = Octicons.star)(EuiFormInput()()),\n          EuiFormIconField(width = FormFieldWidth.one_fifth,\n                           iconFill = ColorVariant.danger,\n                           iconKey = Octicons.star)(EuiFormInput()())\n        ),\n        <.h3(\"Loading Indicator\"),\n        EuiFormIconField(iconPosition = LeftRight.right,\n                         iconKey = Octicons.search,\n                         iconColor = ColorVariant.default,\n                         iconIsLoading = S.searching)(\n          EuiFormInput(\n            onChange = js.defined(handleSearch _),\n            `type` = \"search\",\n            name = \"icon-form-search\"\n          )()\n        )\n      )\n\n    def renderFileUpload(S: State) =\n      EuiForm(`type` = FormType.horizontal)(\n        EuiFormField(label = \"Image\")(\n          EuiFileUpload(\n            buttonLabelInitial = \"Upload Image\",\n            buttonLabelChange = \"Change Image\",\n            accept = \"image/jpg, image/gif, image/png\"\n          )()\n        ),\n        EuiFormField()(\n          EuiDropzone( /*files = S.files, */ onDrop = onDrop _)()\n        )\n      )\n\n    def render(S: State) =\n      CodeExample(code, \"EuiForms\")(\n        <.div(\n          <.h1(\"Forms\"),\n          <.h2(\"Basic Example\"),\n          renderBasicExample,\n          <.h2(\"Horizontal Form\"),\n          renderBasicExampleHorizontal,\n          <.h2(\"Inline Form\"),\n          renderBasicExampleInline,\n          <.h2(\"Input Groups\"),\n          <.h3(\"Contiguous Form Elements\"),\n          renderInputGroupsContiguous,\n          <.h3(\"Separate When Required\"),\n          renderInputGroupsSeparate,\n          <.h2(\"Sizes\"),\n          renderSizes,\n          <.h2(\"Supported Controls\"),\n          renderSupportedControls,\n          <.h2(\"Notes\"),\n          renderNotes,\n          <.h2(\"ComplexForms\"),\n          renderComplexForms,\n          <.h2(\"Icons\"),\n          renderIcons(S),\n          <.h2(\"Validation\"),\n          renderValidation(S),\n          <.h2(\"File Upload\"),\n          renderFileUpload(S)\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"EuiFormsDemo\")\n    .initialState(State())\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/elementalui/EuiGlyphsDemo.scala",
    "content": "package demo.components.elementalui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.elementalui.{EuiGlyph, Octicons, _}\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.TagOf\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom.html.Div\n\nobject EuiGlyphsDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n    val renderButtons: TagOf[Div] =\n      <.div(\n        EuiButton(`type` = ButtonType.primary)(EuiGlyph(icon = Octicons.beaker)()),\n        EuiButton(`type` = ButtonType.danger)(EuiGlyph(icon = Octicons.flame)()),\n        EuiButton(`type` = ButtonType.success)(EuiGlyph(icon = Octicons.squirrel)()),\n        EuiButton(`type` = ButtonType.warning)(EuiGlyph(icon = Octicons.bug)())\n      )\n\n    val renderLinkButtons: TagOf[Div] =\n      <.div(\n        EuiButton(`type` = ButtonType.link)(EuiGlyph(icon = Octicons.beaker)()),\n        EuiButton(`type` = ButtonType.link_cancel)(EuiGlyph(icon = Octicons.flame)()),\n        EuiButton(`type` = ButtonType.link_delete)(EuiGlyph(icon = Octicons.squirrel)()),\n        EuiButton(`type` = ButtonType.link_text)(EuiGlyph(icon = Octicons.bug)())\n      )\n\n    val renderGlyphGrid: VdomNode =\n      Octicons.values\n        .grouped(10)\n        .zipWithIndex\n        .map {\n          case (list, index) =>\n            EuiRow(key = s\"row_$index\") {\n              list.map { icon =>\n                EuiCol(key = s\"col_${icon.value}\", sm = \"1/10\")(\n                  EuiCard(className = \"code-example--glyph__icon\")(\n                    EuiGlyph(key = icon.value, icon = icon)(),\n                    <.div(\n                      ^.className := \"code-example--glyph__icon-name\",\n                      icon.value\n                    )\n                  )\n                )\n              }.toVdomArray\n            }\n        }\n        .toVdomArray\n\n    def renderGlyphColors(icon: Octicons): VdomNode =\n      GlyphType.values\n        .map(\n          glyphType =>\n            <.div(\n              ^.key := s\"${glyphType.value}-${icon.value}\",\n              ^.className := \"code-example__example-element--inline\",\n              EuiGlyph(icon = icon, `type` = glyphType)(),\n              glyphType.value\n          ))\n        .toVdomArray\n\n    def render =\n      CodeExample(code, \"EuiGlyphs\")(\n        <.div(\n          <.h1(\"Glyphs\"),\n          <.h2(\"Basic Example\"),\n          EuiGlyph(icon = Octicons.thumbsup)(),\n          <.h2(\"Icons\"),\n          renderGlyphGrid,\n          <.h2(\"Colors\"),\n          renderGlyphColors(Octicons.heart),\n          <.h2(\"Buttons\"),\n          renderButtons,\n          <.h2(\"Link Buttons\"),\n          renderLinkButtons\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"EuiGlyphsDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/elementalui/EuiInfo.scala",
    "content": "package demo\npackage components\npackage elementalui\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ProdDefaults._\n\nobject EuiInfo {\n\n  object Style extends StyleSheet.Inline {\n    import dsl._\n    val content = style(\n      textAlign.center,\n      fontSize(30.px),\n      paddingTop(40.px)\n    )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"EuiInfo\")\n    .render(P => {\n      InfoTemplate(componentFilePath = \"elementalui/\")(\n        <.div(\n          <.h3(\"elemental-ui \"),\n          <.p(\n            \"scalajs-react wrapper for \",\n            RedLink(\"elemental-ui\", \"http://elemental-ui.com\")\n          ),\n          <.div(\n            <.h4(\"Supported Version :\"),\n            <.span(\"0.5.4\")\n          ),\n          <.div(\n            <.h4(\"How To Use :\"),\n            <.p(\n              \"Follow the installation guide from :\",\n              RedLink(\"here\", \"https://github.com/elementalui/elemental\"),\n              <.br(),\n              <.br(),\n              \"Configure elemental-ui context in your top level component :\",\n              RedLink(\n                \"example\",\n                \"https://github.com/chandu0101/scalajs-react-components/blob/master/demo/src/main/scala/demo/pages/EuiPage.scala\")\n            )\n          )\n        )\n      )\n\n    })\n    .build\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/elementalui/EuiMiscDemo.scala",
    "content": "package demo.components.elementalui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.elementalui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js.`|`\n\nobject EuiMiscDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class State(\n      currentPage: Int = 1,\n      pageSize: Int = 25,\n      plural: String = \"Potatoes\",\n      singular: String = \"Potato\",\n      total: Int = 123,\n      limit: Int = 5\n  )\n\n  case class Backend($ : BackendScope[Unit, State]) {\n    def handleClear(event: ReactEvent) =\n      $.modState(identity)\n\n    def handlePageSelect(page: Int) =\n      $.modState(_.copy(currentPage = page))\n\n    def handleCurrentPageChange(event: ReactEventFromInput) = {\n      val value = event.target.value.toInt match {\n        case x if x < 0 => 0\n        case x          => x\n      }\n      $.modState(_.copy(currentPage = value))\n    }\n\n    def handlePageSizeChange(event: ReactEventFromInput) = {\n      val value = event.target.value.toInt match {\n        case x if x > 100 => 100\n        case x if x < 1   => 1\n        case x            => x\n      }\n      $.modState(_.copy(pageSize = value))\n    }\n\n    def handleTotalChange(event: ReactEventFromInput) = {\n      val value = event.target.value.toInt match {\n        case x if x > 1000 => 1000\n        case x if x < 1    => 1\n        case x             => x\n      }\n      $.modState(_.copy(total = value))\n    }\n\n    def handleLimitChange(event: ReactEventFromInput) = {\n      val value = event.target.value.toInt match {\n        case x if x < 1 => 1\n        case x          => x\n      }\n      $.modState(_.copy(limit = value))\n    }\n\n    def handlePluralChange(event: ReactEventFromInput) = {\n      $.modState(_.copy(plural = event.target.value))\n    }\n\n    def handleSingularChange(event: ReactEventFromInput) =\n      $.modState(_.copy(singular = event.target.value))\n\n    def renderAlerts =\n      <.div(\n        EuiElementalAlert(`type` = AlertType.info)(\n          <.strong(\"Info\"),\n          \"Blah Blah Blah au au oeu oeau eouaoeu eou  aouo u\"),\n        EuiElementalAlert(`type` = AlertType.success)(\n          <.strong(\"Success\"),\n          \"Blah Blah Blah au au oeu oeau eouaoeu eou  aouo u\"),\n        EuiElementalAlert(`type` = AlertType.warning)(\n          <.strong(\"Warning\"),\n          \"Blah Blah Blah au au oeu oeau eouaoeu eou  aouo u\"),\n        EuiElementalAlert(`type` = AlertType.danger)(\n          <.strong(\"Error\"),\n          \"Blah Blah Blah au au oeu oeau eouaoeu eou  aouo u\")\n      )\n\n    def renderCards =\n      <.div(\n        EuiCard()(\"Hello, this is a very simple card, but blah blah blah\"),\n        EuiRow()(\n          EuiCol(xs = \"1/2\")(EuiCard()(\"Use\")),\n          EuiCol(xs = \"1/2\")(EuiCard()(\"Me\"))\n        ),\n        EuiRow()(\n          EuiCol(xs = \"1/3\")(EuiCard()(\"In\")),\n          EuiCol(xs = \"1/3\")(EuiCard()(\"A\")),\n          EuiCol(xs = \"1/3\")(EuiCard()(\"Grid\"))\n        )\n      )\n\n    def renderPagination(S: State) =\n      <.div(\n        EuiPagination(\n          currentPage = S.currentPage,\n          onPageSelect = handlePageSelect _,\n          pageSize = S.pageSize,\n          plural = S.plural,\n          singular = S.singular,\n          total = S.total,\n          limit = S.limit\n        )(),\n        EuiInputGroup()(\n          EuiInputGroupSection(grow = true)(\n            EuiFormField(label = \"Current Page\")(\n              EuiFormInput(\n                name = \"currentPage\",\n                `type` = \"number\",\n                value = S.currentPage: String | Int,\n                onChange = handleCurrentPageChange _,\n                placeholder = \"Current Page\"\n              )()\n            )\n          ),\n          EuiInputGroupSection(grow = true)(\n            EuiFormField(label = \"Page Size\")(\n              EuiFormInput(\n                name = \"pageSize\",\n                `type` = \"number\",\n                value = S.pageSize: String | Int,\n                onChange = handlePageSizeChange _,\n                placeholder = \"Page Size\"\n              )()\n            )\n          ),\n          EuiInputGroupSection(grow = true)(\n            EuiFormField(label = \"Plural\")(\n              EuiFormInput(\n                name = \"plural\",\n                `type` = \"number\",\n                value = S.plural: String | Int,\n                onChange = handlePluralChange _,\n                placeholder = \"Plural\"\n              )()\n            )\n          ),\n          EuiInputGroupSection(grow = true)(\n            EuiFormField(label = \"Singular\")(\n              EuiFormInput(\n                name = \"singular\",\n                `type` = \"number\",\n                value = S.singular: String | Int,\n                onChange = handleSingularChange _,\n                placeholder = \"Singular\"\n              )()\n            )\n          ),\n          EuiInputGroupSection(grow = true)(\n            EuiFormField(label = \"Total\")(\n              EuiFormInput(\n                name = \"total\",\n                `type` = \"number\",\n                value = S.total: String | Int,\n                onChange = handleTotalChange _,\n                placeholder = \"Total\"\n              )()\n            )\n          ),\n          EuiInputGroupSection(grow = true)(\n            EuiFormField(label = \"Limit\")(\n              EuiFormInput(\n                name = \"limit\",\n                `type` = \"number\",\n                value = S.limit: String | Int,\n                onChange = handleLimitChange _,\n                placeholder = \"Limit\"\n              )()\n            )\n          )\n        )\n      )\n\n    def renderPills =\n      <.div(\n        EuiPill(label = \"Create\", `type` = AlertType.success_inverted)(),\n        EuiPill(label = \"First Pill\", `type` = AlertType.primary, onClear = handleClear _)(),\n        EuiPill(label = \"Second Pill\", `type` = AlertType.primary, onClear = handleClear _)(),\n        EuiPill(label = \"Third Pill\", `type` = AlertType.primary, onClear = handleClear _)(),\n        EuiPill(label = \"Clear All\")()\n      )\n\n    def render(S: State) =\n      CodeExample(code, \"EuiMisc\")(\n        <.div(\n          <.h1(\"Miscellaneous\"),\n          <.h2(\"Alerts\"),\n          renderAlerts,\n          <.h2(\"Cards\"),\n          renderCards,\n          <.h2(\"Pagination\"),\n          renderPagination(S),\n          <.h2(\"Pills\"),\n          renderPills\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"EuiMiscDemo\")\n    .initialState(State())\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/elementalui/EuiModalDemo.scala",
    "content": "package demo.components.elementalui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.elementalui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.TagOf\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom.html.Div\n\nimport scala.scalajs.js.`|`\n\nobject EuiModalDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class State(\n      modalIsOpen: Boolean = false,\n      sizeModalIsOpen: Boolean = false,\n      modalSize: ModalSize | Double = 0.0\n  )\n\n  case class Backend($ : BackendScope[Unit, State]) {\n    def toggleModal(event: ReactEventFromHtml): Callback =\n      $.modState(state => state.copy(modalIsOpen = !state.modalIsOpen))\n\n    def toggleSizeModal(size: ModalSize | Double)(event: ReactEventFromHtml): Callback =\n      $.modState(state => state.copy(sizeModalIsOpen = !state.sizeModalIsOpen, modalSize = size))\n\n    def renderLiveDemo(state: State): TagOf[Div] = {\n      <.div(\n        EuiButton(onClick = toggleModal _)(\"Show it\"),\n        EuiModal(\n          isOpen = state.modalIsOpen,\n          backdropClosesModal = true,\n          onCancel = toggleModal _\n        )(\n          EuiModalHeader(text = \"Modal Header\")(),\n          EuiModalBody()(\n            EuiFormField(label = \"Email\")(\n              EuiFormInput(\n                `type` = \"email\",\n                name = \"email\",\n                required = true\n              )()\n            ),\n            EuiFormField(label = \"Password\")(\n              EuiFormInput(\n                `type` = \"password\",\n                name = \"password\",\n                required = true\n              )()\n            ),\n            <.p(\n              \"From the Wikipedia article\",\n              <.a(\n                ^.href := \"https://en.wikipedia.org/wiki/Elemental\",\n                ^.target := \"_blank\",\n                \"https://en.wikipedia.org/wiki/Elemental\"\n              )\n            ),\n            <.p(\n              \"An elemental is a mythic being described in occult and alchemical works from around the time of the European Renaissance and particularly elaborated in the 16th century works of Paracelsus.\"),\n            <.p(\n              \"There are four elemental categories: gnomes, undines, sylphs, and salamanders. These correspond to the Classical elements of antiquity: earth, water, air and fire. Aether (quintessence) was not assigned an elemental.\"),\n            <.p(\n              \"Terms employed for beings associated with alchemical elements vary by source and gloss.\"),\n            <.h2(\"History\"),\n            <.p(\n              \"The Paracelsian concept of elementals draws from several much older traditions in mythology and religion. Common threads can be found in folklore, animism, and anthropomorphism. Examples of creatures such as the Pygmy were taken from Greek mythology.\"),\n            <.p(\n              \"The elements of earth, water, air, and fire, were classed as the fundamental building blocks of nature. This system prevailed in the Classical world and was highly influential in medieval natural philosophy. Although Paracelsus uses these foundations and the popular preexisting names of elemental creatures, he is doing so to present new ideas which expand on his own philosophical system. The homunculus is another example of a Paracelsian idea with roots in earlier alchemical, scientific, and folklore traditions.\"),\n            <.h3(\"Paracelsus\"),\n            <.p(\n              \"In his 16th-century alchemical work Liber de Nymphis, sylphis, pygmaeis et salamandris et de caeteris spiritibus, Paracelsus identified mythological beings as belonging to one of the four elements. Part of the Philosophia Magna, this book was first printed in 1566 after Paracelsus' death. He wrote the book to \\\"describe the creatures that are outside the cognizance of the light of nature, how they are to be understood, what marvellous works God has created\\\". He states that there is more bliss in describing these \\\"divine objects\\\" than in describing fencing, court etiquette, cavalry, and other worldly pursuits.\"),\n            <.p(\"The concept of elementals seems to have been conceived by Paracelsus in the 16th century, though he did not in fact use the term \\\"elemental\\\" or a German equivalent.[5] He regarded them not so much as spirits but as beings between creatures and spirits, generally being invisible to mankind but having physical and commonly humanoid bodies, as well as eating, sleeping, and wearing clothes like humans. Paracelsus gave common names for the elemental types, as well as correct names, which he seems to have considered somewhat more proper, \\\"recht namen\\\". He also referred to them by purely German terms which are roughly equivalent to \\\"water people,\\\" \\\"mountain people,\\\" and so on, using all the different forms interchangeably.\")\n          ),\n          EuiModalFooter()(\n            EuiButton(onClick = toggleModal _, `type` = ButtonType.primary)(\"Submit\"),\n            EuiButton(onClick = toggleModal _, `type` = ButtonType.link_cancel)(\"Cancel\")\n          )\n        )\n      )\n    }\n\n    val renderStaticExample: TagOf[Div] =\n      <.div(\n        ^.className := \"code-example\",\n        <.div(\n          ^.className := \"code-example__example\",\n          <.div(\n            ^.className := \"Modal-content\",\n            EuiModalHeader(text = \"Modal Header\")(),\n            EuiModalBody()(\n              EuiFormField(label = \"Email\")(\n                EuiFormInput(\n                  `type` = \"email\",\n                  name = \"email\",\n                  required = true\n                )()\n              ),\n              EuiFormField(label = \"Password\")(\n                EuiFormInput(\n                  `type` = \"password\",\n                  name = \"password\",\n                  required = true\n                )()\n              )\n            ),\n            EuiModalFooter()(\n              EuiButton()(\"Submit\"),\n              EuiButton()(\"Cancel\")\n            )\n          )\n        )\n      )\n\n    def renderSizes(state: State): TagOf[Div] = {\n      <.div(\n        EuiButton(onClick = toggleSizeModal(ModalSize.small) _)(\"small\"),\n        EuiButton(onClick = toggleSizeModal(ModalSize.large) _)(\"large\"),\n        EuiButton(onClick = toggleSizeModal(768) _)(\"768\"),\n        EuiModal(\n          isOpen = state.sizeModalIsOpen,\n          onCancel = toggleSizeModal(ModalSize.small) _,\n          backdropClosesModal = true,\n          width = state.modalSize\n        )(\n          EuiModalHeader(\n            text = s\"${state.modalSize.toString}\",\n            showCloseButton = true,\n            onClose = toggleSizeModal(ModalSize.small) _\n          )(),\n          EuiModalBody()(<.p(\"&hellip;\"))\n        )\n      )\n    }\n\n    def render(state: State): VdomElement =\n      CodeExample(code, \"EuiModal\")(\n        EuiContainer()(\n          <.h1(\"Modal\"),\n          <.h2(\"Static Example\"),\n          renderStaticExample,\n          <.h2(\"Live Demo\"),\n          renderLiveDemo(state),\n          <.h2(\"Sizes\"),\n          renderSizes(state)\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"EuiModalDemo\")\n    .initialState(State())\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/elementalui/EuiSpinnerDemo.scala",
    "content": "package demo.components.elementalui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.elementalui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject EuiSpinnerDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val component = ScalaComponent\n    .builder[Unit](\"EuiSpinnerDemo\")\n    .render(\n      P =>\n        CodeExample(code, \"EuiSpinner\")(\n          <.div(\n            <.h1(\"Spinner\"),\n            <.h2(\"Common Use Cases\"),\n            <.h3(\"Page Element\"),\n            EuiSpinner(size = SmMdLg.md)(),\n            EuiSpinner(size = SmMdLg.md, `type` = DefaultPrimaryInverted.primary)(),\n            EuiSpinner(size = SmMdLg.md, `type` = DefaultPrimaryInverted.inverted)(),\n            <.h3(\"Inside Buttons\"),\n            EuiButton()(EuiSpinner()()),\n            EuiButton(disabled = true)(EuiSpinner(`type` = DefaultPrimaryInverted.primary)(),\n                                       \"Saving\"),\n            EuiButton(`type` = ButtonType.primary)(\n              EuiSpinner(`type` = DefaultPrimaryInverted.inverted)(),\n              (\"Submitting\")),\n            <.h3(\"Full Page Load\"),\n            EuiSpinner(size = SmMdLg.lg)()\n          )\n      ))\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/googlemap/GoogleMapBasic.scala",
    "content": "package demo\npackage components\npackage googlemap\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.GoogleMap\nimport chandu0101.scalajs.react.components.fascades.LatLng\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject GoogleMapBasic {\n\n  val code = GhPagesMacros.exampleSource\n  // EXAMPLE:START\n\n  val latlng = LatLng(16.3008, 80.4428)\n\n  val component = ScalaComponent\n    .builder[Unit](\"BasicMap\")\n    .render(\n      P =>\n        <.div(\n          <.h2(^.cls := \"mui-font-style-headline\")(\"Basic Map\"),\n          CodeExample(code, \"GoogleMapBasic\")(\n            GoogleMap(width = \"600px\", height = \"500px\", center = latlng, zoom = 8)\n          )\n      ))\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/googlemap/GoogleMapCustomMarkerIcon.scala",
    "content": "package demo\npackage components\npackage googlemap\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components._\nimport chandu0101.scalajs.react.components.fascades._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject GoogleMapCustomMarkerIcon {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val latlng = LatLng(-33.9, 151.2)\n\n  /*\n     url = image location\n     size = This marker is 20 pixels wide by 32 pixels tall.\n     origin = The origin for this image is 0,0.\n     anchor = The anchor for this image is the base of the flagpole at 0,32.\n   */\n  val image = Icon(\n    url = \"http://www.bookyourparis.com/images-site/beachflag.png\",\n    size = Size(20, 32),\n    origin = Point(0, 0),\n    anchor = Point(0, 32)\n  )\n\n  /*\n     Shapes define the clickable region of the icon.\n     The type defines an HTML &lt;area&gt; element 'poly' which\n     traces out a polygon as a series of X,Y points. The final\n     coordinate closes the poly by connecting to the first\n     coordinate.\n   */\n  val shape = Shape(\n    coords = List(1, 1, 1, 20, 18, 20, 18, 1),\n    tpe = \"poly\"\n  )\n\n  val markers = List(\n    Marker(position = LatLng(-33.890542, 151.274856), title = \"Bondi Beach\", icon = image),\n    Marker(position = LatLng(-33.923036, 151.259052), title = \"Coogee Beach\", icon = image),\n    Marker(position = LatLng(-34.028249, 151.157507), title = \"Cronulla Beach\", icon = image),\n    Marker(position = LatLng(-33.80010128657071, 151.28747820854187),\n           title = \"Manly Beach\",\n           icon = image)\n  )\n\n  val component = ScalaComponent\n    .builder[Unit](\"plain\")\n    .render(P => {\n      <.div(\n        <.h2(^.cls := \"mui-font-style-headline\")(\"Custom Marker Icon\"),\n        CodeExample(code, \"GoogleMapCustomMarkerIcon\")(\n          GoogleMap(center = latlng, markers = markers, zoom = 10)\n        )\n      )\n    })\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/googlemap/GoogleMapInfo.scala",
    "content": "package demo\npackage components\npackage googlemap\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject GoogleMapInfo {\n\n  val component = ScalaComponent\n    .builder[Unit](\"googleMapInfo\")\n    .render(P => {\n      InfoTemplate(componentFilePath = \"maps/GoogleMap.scala\")(\n        <.h3(\"Google Map :\"),\n        <.p(\"Map component based on \",\n            <.a(^.href := \"https://developers.google.com/maps/documentation/javascript/\")(\n              \"google map javascript api\"))\n      )\n\n    })\n    .build\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/googlemap/GoogleMapMarkerInfoWindow.scala",
    "content": "package demo\npackage components\npackage googlemap\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.GoogleMap\nimport chandu0101.scalajs.react.components.fascades.{LatLng, Marker}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject GoogleMapMarkerInfoWindow {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n  val latlng = LatLng(-33.9, 151.2)\n\n  // to add info window on click of marker just specify content field\n  val markers = List(\n    Marker(position = LatLng(-33.890542, 151.274856),\n           title = \"Bondi Beach\",\n           content = \"<h3>This is Bondi Beach </h3>\"),\n    Marker(position = LatLng(-33.923036, 151.259052),\n           title = \"Coogee Beach\",\n           content = \"<h3>This is Coogee Beach </h3>\"),\n    Marker(position = LatLng(-34.028249, 151.157507),\n           title = \"Cronulla Beach\",\n           content = \"<h3>This is Cronulla Beach </h3>\"),\n    Marker(position = LatLng(-33.80010128657071, 151.28747820854187),\n           title = \"Manly Beach\",\n           content = \"<h3>This is Manly Beach </h3>\")\n  )\n\n  val component = ScalaComponent\n    .builder[Unit](\"infowindow\")\n    .render(P =>\n      <.div(\n        <.h2(^.cls := \"mui-font-style-headline\")(\"Marker InfoWindow\"),\n        CodeExample(code, \"GoogleMapMarkerInfoWindow\")(\n          GoogleMap(center = latlng, markers = markers, zoom = 10)\n        )\n    ))\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/googlemap/GoogleMapMarkers.scala",
    "content": "package demo\npackage components\npackage googlemap\n\nimport chandu0101.scalajs.react.components.GoogleMap\nimport chandu0101.scalajs.react.components.fascades.{LatLng, Marker}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject GoogleMapMarkers {\n\n  val code =\n    \"\"\"\n      |\n      |  val latlng = LatLng(-33.9 ,151.2)\n      |\n      |  val markers = List(\n      |   Marker( position = LatLng(-33.890542,151.274856) ,title = \"Bondi Beach\" ),\n      |   Marker( position = LatLng(-33.923036,151.259052) ,title = \"Coogee Beach\" ),\n      |   Marker( position = LatLng(-34.028249,151.157507) ,title = \"Cronulla Beach\" ),\n      |   Marker( position = LatLng(-33.80010128657071,151.28747820854187) ,title = \"Manly Beach\" )\n      |  )\n      |  GoogleMap(center = latlng ,markers = markers ,zoom = 10)\n      |\n    \"\"\".stripMargin\n  val component = ScalaComponent\n    .builder[Unit](\"mapmarkers\")\n    .render(P => {\n      <.div(\n        <.h2(^.cls := \"mui-font-style-headline\")(\"Markers\"),\n        CodeExample(code, \"GoogleMapMarkers\")(\n          GoogleMap(center = latlng, markers = markers, zoom = 10)\n        )\n      )\n    })\n    .build\n\n  val latlng = LatLng(-33.9, 151.2)\n\n  val markers = List(\n    Marker(position = LatLng(-33.890542, 151.274856), title = \"Bondi Beach\"),\n    Marker(position = LatLng(-33.923036, 151.259052), title = \"Coogee Beach\"),\n    Marker(position = LatLng(-34.028249, 151.157507), title = \"Cronulla Beach\"),\n    Marker(position = LatLng(-33.80010128657071, 151.28747820854187), title = \"Manly Beach\")\n  )\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/googlemap/MutableGoogleMapMarkers.scala",
    "content": "package demo.components\npackage googlemap\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.GoogleMap\nimport chandu0101.scalajs.react.components.fascades.{LatLng, Marker}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject MutableGoogleMapMarkers {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val markers = List(\n    Marker(position = LatLng(52.2, 21), title = \"Warsaw\"),\n    Marker(position = LatLng(51.23, 22.5), title = \"Lublin\")\n  )\n\n  case class State(lat: Double, lng: Double, markers: List[Marker])\n\n  class Backend(t: BackendScope[Unit, State]) {\n\n    def changeLat(event: ReactEventFromInput): Callback = {\n      t.modState(_.copy(lat = event.target.value.toDouble))\n    }\n\n    def changeLng(event: ReactEventFromInput): Callback = {\n      t.modState(_.copy(lng = event.target.value.toDouble))\n    }\n\n    val addMarker: Callback =\n      t.modState(s =>\n        s.copy(markers = s.markers :+ Marker(LatLng(s.lat, s.lng), s\"Marker ${s.markers.size}\")))\n\n    def render(S: State) =\n      <.div(\n        <.h2(^.cls := \"mui-font-style-headline\")(\"Mutable markers\"),\n        CodeExample(code, \"MutableGoogleMapMarkers\")(\n          <.div(\n            <.input(^.`type` := \"text\", ^.value := S.lat.toString, ^.onChange ==> changeLat),\n            <.input(^.`type` := \"text\", ^.value := S.lng.toString, ^.onChange ==> changeLng),\n            <.button(^.onClick --> addMarker, \"Add marker\")\n          ),\n          GoogleMap(center = LatLng(S.lat, S.lng), markers = S.markers, zoom = 10)\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"mapmarkers\")\n    .initialState(State(52.2, 21, markers))\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MobileTearSheet.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport scalacss.ProdDefaults._\nimport scalacss.ScalaCssReact._\n\nobject MobileTearSheet {\n\n  object Style extends StyleSheet.Inline {\n\n    import dsl._\n\n    val root = style(\n      marginBottom(24 px),\n      marginRight(24 px),\n      width(360 px)\n    )\n\n    val container = style(\n      border :=! \"solid 1px #d9d9d9\",\n      height :=! \"500px\",\n      overflow.hidden\n    )\n\n    val bottomTear = style(\n      display.block,\n      position.relative,\n      marginTop :=! \"-10px\",\n      width(360 px)\n    )\n  }\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n    def render(C: PropsChildren) = {\n      <.div(\n        Style.root,\n        <.div(\n          Style.container,\n          C\n        ),\n        <.img(Style.bottomTear, ^.src := Images.bottomTearImage.toString)\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"MobileTearSheet\")\n    .renderBackendWithChildren[Backend]\n    .build\n\n  def apply(children: VdomNode*) = component(children: _*)\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiAppBarDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject MuiAppBarDemo {\n\n  val code = GhPagesMacros.exampleSource\n  // EXAMPLE:START\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiAppBarDemo\")\n    .render(\n      P =>\n        <.div(\n          CodeExample(code, \"MuiAppBar\")(\n            MuiAppBar(\n              title = js.defined(\"Title\"),\n              onLeftIconButtonClick = CallbackDebug.f1(\"onLeftIconButtonClick\"),\n              onRightIconButtonClick = CallbackDebug.f1(\"onRightIconButtonClick\"),\n              onTitleClick = CallbackDebug.f1(\"onTitleClick\"),\n              showMenuIconButton = true\n            )()\n          )\n      ))\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiAutoCompleteDemo.scala",
    "content": "package demo.components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject MuiAutoCompleteDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val fruit = js.Array(\n    \"Apple\",\n    \"Apricot\",\n    \"Avocado\",\n    \"Banana\",\n    \"Bilberry\",\n    \"Blackberry\",\n    \"Blackcurrant\",\n    \"Blueberry\",\n    \"Boysenberry\",\n    \"Blood Orange\",\n    \"Cantaloupe\",\n    \"Currant\",\n    \"Cherry\",\n    \"Cherimoya\",\n    \"Cloudberry\",\n    \"Coconut\",\n    \"Cranberry\",\n    \"Clementine\",\n    \"Damson\",\n    \"Date\",\n    \"Dragonfruit\",\n    \"Durian\",\n    \"Elderberry\",\n    \"Feijoa\",\n    \"Fig\",\n    \"Goji berry\",\n    \"Gooseberry\",\n    \"Grape\",\n    \"Grapefruit\",\n    \"Guava\",\n    \"Honeydew\",\n    \"Huckleberry\",\n    \"Jabouticaba\",\n    \"Jackfruit\",\n    \"Jambul\",\n    \"Jujube\",\n    \"Juniper berry\",\n    \"Kiwi fruit\",\n    \"Kumquat\",\n    \"Lemon\",\n    \"Lime\",\n    \"Loquat\",\n    \"Lychee\",\n    \"Nectarine\",\n    \"Mango\",\n    \"Marion berry\",\n    \"Melon\",\n    \"Miracle fruit\",\n    \"Mulberry\",\n    \"Mandarine\",\n    \"Olive\",\n    \"Orange\",\n    \"Papaya\",\n    \"Passionfruit\",\n    \"Peach\",\n    \"Pear\",\n    \"Persimmon\",\n    \"Physalis\",\n    \"Plum\",\n    \"Pineapple\",\n    \"Pumpkin\",\n    \"Pomegranate\",\n    \"Pomelo\",\n    \"Purple Mangosteen\",\n    \"Quince\",\n    \"Raspberry\",\n    \"Raisin\",\n    \"Rambutan\",\n    \"Redcurrant\",\n    \"Salal berry\",\n    \"Satsuma\",\n    \"Star fruit\",\n    \"Strawberry\",\n    \"Squash\",\n    \"Salmonberry\",\n    \"Tamarillo\",\n    \"Tamarind\",\n    \"Tomato\",\n    \"Tangerine\",\n    \"Ugli fruit\",\n    \"Watermelon\"\n  )\n  val colors = js.Array(\"Red\", \"Orange\", \"Yellow\", \"Green\", \"Blue\", \"Purple\", \"Black\", \"White\")\n\n  val onNewRequest: (String, Int) => Callback =\n    (chosen, idx) => Callback.info(s\"onNewRequest: chosen: $chosen, idx: $idx\")\n\n  val onUpdateInput: (String, js.Array[String], js.Object) => Callback =\n    (search, ds, params) => Callback.info(s\"onUpdateInput: search $search\")\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiAutoCompleteDemo\")\n    .render(P =>\n      CodeExample(code, \"MuiAutoComplete\")(\n        <.div(\n          MuiAutoComplete(\n            floatingLabelText = js.defined(\"Type t, fuzzy search\"),\n            filter = js.defined(MuiAutoCompleteFilters.fuzzyFilter),\n            dataSource = fruit,\n            anchorOrigin = Origin(Vertical.bottom, Horizontal.middle),\n            onNewRequest = onNewRequest,\n            onUpdateInput = onUpdateInput\n          )()\n        ),\n        <.div(\n          MuiAutoComplete(\n            floatingLabelText = js.defined(\"Type r, case insensitive\"),\n            filter = js.defined(MuiAutoCompleteFilters.caseInsensitiveFilter),\n            dataSource = colors,\n            onNewRequest = onNewRequest,\n            onUpdateInput = onUpdateInput\n          )()\n        )\n    ))\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiAvatarDemo.scala",
    "content": "package demo.components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react.ScalaComponent\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject MuiAvatarDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  import Mui.Styles.colors\n  import Mui.SvgIcons\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiAvatarDemo\")\n    .renderStatic(\n      <.div(\n        CodeExample(code, \"MuiAvatar\")(\n          MuiAvatar(\n            key = \"1\",\n            backgroundColor = colors.grey700,\n            color = colors.deepPurple200,\n            icon = js.defined(SvgIcons.ActionGrade()())\n          )(),\n          MuiAvatar(key = \"2\", size = js.defined(120), backgroundColor = colors.lime600)(\n            js.defined(\"Ø\")),\n          MuiAvatar(key = \"3\")(js.defined(\"one\")),\n          MuiAvatar(key = \"4\")(js.defined(\"two\")),\n          MuiAvatar(key = \"5\", backgroundColor = colors.red400)(js.defined(SvgIcons.ActionFace()()))\n        )\n      )\n    )\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiButtonsDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport scalacss.ProdDefaults._\nimport scalacss.ScalaCssReact._\n\nobject MuiButtonsDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  object Style extends StyleSheet.Inline {\n\n    import dsl._\n\n    val container = style(maxWidth(1024 px))\n\n    val content = style(\n      display.flex,\n      padding(30.px),\n      flexDirection.column,\n      alignItems.center\n    )\n  }\n\n  // EXAMPLE:START\n  import Mui.SvgIcons.ActionGrade\n  val component = ScalaComponent\n    .builder[Unit](\"MuiButtonsDemo\")\n    .render(\n      P =>\n        CodeExample(code, \"MuiButtons\")(\n          <.div(\n            Style.container,\n            <.h3(\"Buttons\"),\n            MuiTabs()(\n              MuiTab(key = \"tab1\", label = js.defined(\"Flat Buttons\"))(\n                <.div(\n                  Style.content,\n                  MuiFlatButton(\n                    key = \"flat1\",\n                    label = \"Default\",\n                    onBlur = CallbackDebug.f1(\"onBlur\"),\n                    onFocus = CallbackDebug.f1(\"onFocus\"),\n                    onKeyboardFocus = CallbackDebug.f2(\"onKeyboardFocus\"),\n                    onKeyDown = CallbackDebug.f1(\"onKeyDown\"),\n                    onKeyUp = CallbackDebug.f1(\"onKeyUp\"),\n                    onClick = CallbackDebug.f1(\"onClick\"),\n                    onMouseLeave = CallbackDebug.f1(\"onMouseLeave\"),\n                    onTouchStart = CallbackDebug.f1(\"onTouchStart\"),\n                    onMouseEnter = CallbackDebug.f1(\"onMouseEnter\")\n                  )(),\n                  MuiFlatButton(key = \"flat2\", label = \"Primary\", primary = true)(),\n                  MuiFlatButton(key = \"flat3\", label = \"Secondary\", secondary = true)(),\n                  MuiFlatButton(key = \"flat4\", label = \"Disabled\", disabled = true)()\n                )\n              ),\n              MuiTab(key = \"tab2\", label = js.defined(\"Raised Buttons\"))(\n                <.div(\n                  Style.content,\n                  MuiRaisedButton(key = \"raised1\", label = \"Default\")(),\n                  MuiRaisedButton(key = \"raised2\", label = \"Primary\", primary = true)(),\n                  MuiRaisedButton(key = \"raised3\", label = \"Secondary\", secondary = true)(),\n                  MuiRaisedButton(key = \"raised4\", label = \"Disabled\", disabled = true)()\n                )\n              ),\n              MuiTab(key = \"tab3\", label = js.defined(\"Floating Action Buttons\"))(\n                <.div(\n                  Style.content,\n                  MuiFloatingActionButton(key = \"floating1\")(ActionGrade()()),\n                  MuiFloatingActionButton(key = \"floating2\", mini = true)(ActionGrade()()),\n                  MuiFloatingActionButton(key = \"floating3\", secondary = true)(ActionGrade()()),\n                  MuiFloatingActionButton(key = \"floating4\", secondary = true, mini = true)(\n                    ActionGrade()())\n                )\n              ),\n              MuiTab(key = \"tab4\", label = js.defined(\"Icon Buttons\"))(\n                <.div(\n                  Style.content,\n                  MuiIconButton(onClick = CallbackDebug.f1(\"onClick\"))(ActionGrade()())\n                )\n              )\n            )\n          )\n      ))\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiDatePickerDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react.ScalaComponent\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject MuiDatePickerDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiDatePickerDemo\")\n    .render(P => {\n      <.div(\n        CodeExample(code, \"MuiDatePicker\")(\n          MuiDatePicker(\n            hintText = js.defined(\"Portrait Dialog\"),\n            onChange = CallbackDebug.f2(\"onChange\"),\n            onDismiss = CallbackDebug.f0(\"onDismiss\"),\n            onFocus = CallbackDebug.f1(\"onFocus\"),\n            onShow = CallbackDebug.f0(\"onShow\"),\n            onClick = CallbackDebug.f1(\"onClick\")\n          )(),\n          MuiDatePicker(\n            hintText = js.defined(\"Landscape Dialog\"),\n            mode = PortraitLandscape.landscape\n          )()\n        )\n      )\n    })\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiDialogDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject MuiDialogDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class State(isOpen: Boolean)\n\n  class Backend($ : BackendScope[_, State]) {\n    val open  = $.setState(State(true))\n    val close = $.setState(State(false))\n\n    def handleDialogCancel: ReactEvent => Callback =\n      e => close >> Callback.info(\"Cancel Clicked\")\n\n    def handleDialogSubmit: ReactEvent => Callback =\n      e => close >> Callback.info(\"Submit Clicked\")\n\n    val openDialog: ReactEvent => Callback =\n      e => open >> Callback.info(\"Opened\")\n\n    def render(S: State) = {\n      val actions = VdomArray(\n        MuiFlatButton(key = \"1\",\n                      label = \"Cancel\",\n                      secondary = true,\n                      onClick = handleDialogCancel)(),\n        MuiFlatButton(key = \"2\",\n                      label = \"Submit\",\n                      secondary = true,\n                      onClick = handleDialogSubmit)()\n      )\n\n      <.div(\n        CodeExample(code, \"MuiDialog\")(\n          <.div(\n            MuiDialog(\n              title = js.defined(\"Dialog With Actions\"),\n              actions = actions,\n              open = S.isOpen,\n              onRequestClose = CallbackDebug.f1(\"onRequestClose\")\n            )(\n              \"Dialog example with floating buttons\"\n            ),\n            MuiRaisedButton(label = \"Dialog\", onClick = openDialog)()\n          )\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiDialogDemo\")\n    .initialState(State(isOpen = false))\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiDrawerDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject MuiDrawerDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class State(\n      selected: js.UndefOr[String],\n      isOpen: Boolean,\n      isDocked: Boolean,\n      isRight: Boolean\n  )\n\n  case class Choice(id: String, text: String)\n\n  val choices = Seq(\n    Choice(\"1\", \"First option\"),\n    Choice(\"2\", \"Second option\"),\n    Choice(\"3\", \"Third option\"),\n    Choice(\"4\", \"Fourth option\")\n  )\n\n  class Backend($ : BackendScope[Unit, State]) {\n    val toggleOpenCb: Callback =\n      $.modState(s => s.copy(isOpen = !s.isOpen))\n\n    val toggleOpen: (ReactMouseEvent, Boolean) => Callback =\n      (e, b) => toggleOpenCb\n\n    val toggleDocked: (ReactMouseEvent, Boolean) => Callback =\n      (e, b) => $.modState(s => s.copy(isDocked = !s.isDocked))\n\n    val toggleRight: (ReactMouseEvent, Boolean) => Callback =\n      (e, b) => $.modState(s => s.copy(isRight = !s.isRight))\n\n    val onRequestChange: (Boolean, String) => Callback =\n      (open, reason) =>\n        Callback.info(s\"onRequestChange: open: $open, reason: $reason\") >>\n        toggleOpenCb\n\n    val selectItem: String => ReactEvent => Callback =\n      id => e => $.modState(s => s.copy(selected = id))\n\n    def render(S: State) = {\n      <.div(\n        CodeExample(code, \"MuiDrawer\")(\n          <.div(\n            MuiDrawer(\n              onRequestChange = onRequestChange,\n              openSecondary = S.isRight,\n              open = S.isOpen,\n              docked = S.isDocked\n            )(\n              /* hack in a cheesy centered avatar */\n              MuiAvatar(\n                key = \"avatar\",\n                size = js.defined(112),\n                backgroundColor = Mui.Styles.colors.red400,\n                style = js.Dynamic.literal(margin = \"auto\", display = \"block\", padding = \"10px\")\n              )(js.defined(\":D\")),\n              choices\n                .map(\n                  c =>\n                    MuiMenuItem(\n                      key = c.id,\n                      primaryText = js.defined(c.text),\n                      checked = S.selected == js.defined(c.id),\n                      onClick = selectItem(c.id)\n                    )())\n                .toVdomArray\n            ),\n            MuiToggle(key = \"toggle1\",\n                      toggled = S.isOpen,\n                      label = js.defined(\"Show drawer\"),\n                      onToggle = toggleOpen)(),\n            MuiToggle(key = \"toggle2\",\n                      toggled = S.isDocked,\n                      label = js.defined(\"Show docked\"),\n                      onToggle = toggleDocked)(),\n            MuiToggle(key = \"toggle3\",\n                      toggled = S.isRight,\n                      label = js.defined(\"Show on right side\"),\n                      onToggle = toggleRight)()\n          )\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiDrawerDemo\")\n    .initialState(\n      State(\n        selected = js.undefined,\n        isOpen = false,\n        isDocked = false,\n        isRight = false\n      )\n    )\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiDropDownMenuDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.ScalaJSDefined\n\nobject MuiDropDownMenuDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  class Item(val id: String, val name: String) extends js.Object\n\n  val items: Seq[Item] =\n    Seq(\n      new Item(\"1\", \"Never\"),\n      new Item(\"2\", \"Every Night\"),\n      new Item(\"3\", \"Weeknights\"),\n      new Item(\"4\", \"Weekends\"),\n      new Item(\"5\", \"Weekly\")\n    )\n\n  case class Backend($ : BackendScope[Unit, Item]) {\n    val onChange: (TouchTapEvent, Int, Item) => Callback =\n      (e, idx, value) => $.setState(value) >> Callback.info(s\"idx: $idx, value: $value\")\n\n    def render(chosen: Item) =\n      <.div(\n        CodeExample(code, \"MuiDropDownMenu\")(\n          MuiDropDownMenu[Item](\n            onChange = onChange,\n            value = chosen\n          )(\n            items\n              .map(\n                item =>\n                  MuiMenuItem[Item](key = item.id,\n                                    value = item,\n                                    primaryText = js.defined(item.name))()\n              )\n              .toVdomArray\n          )\n        )\n      )\n  }\n  val component = ScalaComponent\n    .builder[Unit](\"MuiDropDownMenuDemo\")\n    .initialState(items.head)\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiInfo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ProdDefaults._\n\nobject MuiInfo {\n\n  object Style extends StyleSheet.Inline {\n\n    import dsl._\n\n    val content = style(\n      textAlign.center,\n      fontSize(30.px),\n      paddingTop(40.px)\n    )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiInfo\")\n    .render(P => {\n      InfoTemplate(componentFilePath = \"materialui/package.scala\")(\n        <.div(\n          <.h3(\"Material-ui \"),\n          <.p(\n            \"scalajs-react wrapper for \",\n            RedLink(\"material-ui\", \"http://material-ui.com/#/\")\n          ),\n          <.div(\n            <.h4(\"Supported Version :\"),\n            <.span(\"0.18.1\")\n          ),\n          <.div(\n            <.h4(\"How To Use :\"),\n            <.p(\n              \"Follow the installation guide from :\",\n              RedLink(\"here\", \"https://github.com/callemall/material-ui#installation\"),\n              <.br(),\n              <.br(),\n              \"Configure material-ui context in your top level component :\",\n              RedLink(\n                \"example\",\n                \"https://github.com/chandu0101/scalajs-react-components/blob/master/demo/src/main/scala/demo/pages/MuiPage.scala\")\n            )\n          )\n        )\n      )\n\n    })\n    .build\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiListDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react.ScalaComponent\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject MuiListDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  import Mui.SvgIcons._\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiListDemo\")\n    .render(P => {\n      <.div(\n        CodeExample(code, \"MuiList\")(\n          MobileTearSheet(\n            MuiList(key = \"list1\")(\n              MuiListItem(\n                key = \"item1\",\n                leftIcon = js.defined(ContentInbox()()),\n                onKeyboardFocus = CallbackDebug.f2(\"onKeyboardFocus\"),\n                onMouseLeave = CallbackDebug.f1(\"onMouseLeave\"),\n                onMouseEnter = CallbackDebug.f1(\"onMouseEnter\"),\n                onNestedListToggle = CallbackDebug.f1(\"onNestedListToggle\"),\n                onTouchStart = CallbackDebug.f1(\"onTouchStart\"),\n                onClick = CallbackDebug.f1(\"onClick\")\n              )(\"Inbox\"),\n              MuiListItem(key = \"item2\",\n                          primaryText = js.defined(\"Starred\"),\n                          leftIcon = js.defined(ActionGrade()()))(),\n              MuiListItem(key = \"item3\",\n                          primaryText = js.defined(\"Sent Mail\"),\n                          leftIcon = js.defined(ContentSend()()))(),\n              MuiListItem(key = \"item4\",\n                          primaryText = js.defined(\"Drafts\"),\n                          leftIcon = js.defined(ContentDrafts()()))()\n            ),\n            MuiDivider(key = \"div\")(),\n            MuiList(key = \"list2\")(\n              MuiListItem(key = \"item1\",\n                          primaryText = js.defined(\"All mail\"),\n                          rightIcon = js.defined(ActionInfo()()))(),\n              MuiListItem(key = \"item2\",\n                          primaryText = js.defined(\"Trash\"),\n                          rightIcon = js.defined(ActionInfo()()))(),\n              MuiListItem(key = \"item3\",\n                          primaryText = js.defined(\"Spam\"),\n                          rightIcon = js.defined(ActionInfo()()))(),\n              MuiListItem(key = \"item4\",\n                          primaryText = js.defined(\"Follow up\"),\n                          rightIcon = js.defined(ActionInfo()()))()\n            )\n          )\n        )\n      )\n    })\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiMenuDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport scala.scalajs.js.|\n\nobject MuiMenuDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n  sealed abstract class Value\n  object Value {\n    case object Bold   extends Value\n    case object Italic extends Value\n    case object Under  extends Value\n    case object Strike extends Value\n    case object Super  extends Value\n    case object Sub    extends Value\n    case object Align  extends Value\n  }\n\n  case class State(isOpen: Boolean, values: js.Array[Value])\n\n  class Backend($ : BackendScope[Unit, State]) {\n    val toggleOpen: ReactEvent => Callback =\n      e => $.modState(s => s.copy(isOpen = !s.isOpen))\n\n    val onChange: (TouchTapEvent, Value | js.Array[Value]) => Callback =\n      (e, values) =>\n        values match {\n          case v: Value            => $.modState(_.copy(values = js.Array(v)))\n          case vs: js.Array[Value] => $.modState(_.copy(values = vs))\n      }\n\n    def renderOpen(S: State) = {\n      <.div(\n        MuiFlatButton(\n          label = \"Close menu\",\n          onClick = toggleOpen\n        )(),\n        MuiMenu[Value](\n          width = 320,\n          value = S.values,\n          desktop = true,\n          multiple = true,\n          onEscKeyDown = toggleOpen,\n          onChange = js.defined(onChange)\n        )(\n          MuiMenuItem(value = Value.Bold, secondaryText = js.defined(\"⌘B\"))(\"Bold\"),\n          MuiMenuItem(value = Value.Italic, secondaryText = js.defined(\"⌘I\"))(\"Italic\"),\n          MuiMenuItem(value = Value.Under, secondaryText = js.defined(\"⌘U\"))(\"Underline\"),\n          MuiMenuItem(value = Value.Strike, secondaryText = js.defined(\"Alt+Shift+5\"))(\n            \"Strikethrough\"),\n          MuiMenuItem(value = Value.Super, secondaryText = js.defined(\"⌘.\"))(\"Superscript\"),\n          MuiMenuItem(value = Value.Sub, secondaryText = js.defined(\"⌘,\"))(\"Subscript\"),\n          MuiDivider()(),\n          MuiMenuItem(value = Value.Align)(\"Align\")\n        )\n      )\n    }\n\n    def renderClosed(S: State) =\n      MuiFlatButton(\n        label = \"open menu\",\n        onClick = toggleOpen\n      )()\n\n    def render(S: State) =\n      CodeExample(code, \"MuiMenu\")(\n        if (S.isOpen) renderOpen(S) else renderClosed(S),\n        s\"Has chosen: ${S.values.mkString(\", \")}\"\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiMenuDemo\")\n    .initialState(State(isOpen = false, values = js.Array[Value](Value.Bold)))\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiPaperDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react.ScalaComponent\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scalacss.ProdDefaults._\nimport scalacss.ScalaCssReact._\n\nobject MuiPaperDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiPaperDemo\")\n    .render(P => {\n      <.div(\n        CodeExample(code, \"MuiPaper\")(\n          <.div(\n            Style.paperContainer,\n            MuiPaper(zDepth = ZDepth._1)(<.p(\"zDepth = 1\")),\n            MuiPaper(zDepth = ZDepth._2)(<.p(\"zDepth = 2\")),\n            MuiPaper(zDepth = ZDepth._3)(<.p(\"zDepth = 3\")),\n            MuiPaper(zDepth = ZDepth._4)(<.p(\"zDepth = 4\")),\n            MuiPaper(zDepth = ZDepth._5)(<.p(\"zDepth = 5\")),\n            MuiPaper(zDepth = ZDepth._1, rounded = false)(<.p(\"rounded = false\")),\n            MuiPaper(zDepth = ZDepth._2, rounded = false)(<.p(\"rounded = false\")),\n            MuiPaper(zDepth = ZDepth._3, rounded = false)(<.p(\"rounded = false\")),\n            MuiPaper(zDepth = ZDepth._4, rounded = false)(<.p(\"rounded = false\")),\n            MuiPaper(zDepth = ZDepth._5, rounded = false)(<.p(\"rounded = false\")),\n            MuiPaper(zDepth = ZDepth._1, circle = true)(<.p(\"circle = true\")),\n            MuiPaper(zDepth = ZDepth._2, circle = true)(<.p(\"circle = true\")),\n            MuiPaper(zDepth = ZDepth._3, circle = true)(<.p(\"circle = true\")),\n            MuiPaper(zDepth = ZDepth._4, circle = true)(<.p(\"circle = true\")),\n            MuiPaper(zDepth = ZDepth._5, circle = true)(<.p(\"circle = true\"))\n          )\n        )\n      )\n    })\n    .build\n\n  object Style extends StyleSheet.Inline {\n    import dsl._\n    val paperContainer = style(\n      display.flex,\n      flexWrap.wrap,\n      paddingTop(20.px),\n      unsafeChild(\"div\")(\n        margin(15 px),\n        unsafeChild(\"p\")(\n          padding(15 px)\n        )\n      )\n    )\n  }\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiPopoverDemo.scala",
    "content": "package demo.components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom._\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom.html.Div\n\nimport scala.scalajs.js\n\nobject MuiPopoverDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  private case class OriginChoice[T](ts: Seq[T], label: String)(set: T => Callback,\n                                                                fromState: State => T,\n                                                                str: T => String) {\n    val action: (ReactEvent, Int, String) => Callback =\n      (e, idx, any) => set(ts(idx))\n\n    val items: VdomNode =\n      ts.map(t => MuiMenuItem[String](value = str(t), primaryText = js.defined(str(t)))())\n        .toVdomArray\n\n    def menu(S: State): VdomElement =\n      <.div(\n        ^.key := label,\n        <.label(label, ^.width := \"400px\"),\n        MuiDropDownMenu[String](onChange = action, value = str(fromState(S)))(items)\n      )\n  }\n\n  case class State(open: Boolean, target: Origin, anchor: Origin)\n\n  private case class Backend($ : BackendScope[Unit, State]) {\n    var ref: js.UndefOr[Div] = js.undefined\n\n    val toggle: Callback =\n      $.modState(s => s.copy(open = !s.open))\n\n    val anchorH = OriginChoice(Horizontal.values, \"Change anchor horizontal\")(\n      t => $.modState(s => s.copy(anchor = s.anchor.copy(horizontal = t))),\n      _.anchor.horizontal,\n      _.value\n    )\n    val anchorV = OriginChoice(Vertical.values, \"Change anchor vertical\")(\n      t => $.modState(s => s.copy(anchor = s.anchor.copy(vertical = t))),\n      _.anchor.vertical,\n      _.value\n    )\n    val targetH = OriginChoice(Horizontal.values, \"Change target horizontal\")(\n      t => $.modState(s => s.copy(target = s.target.copy(horizontal = t))),\n      _.target.horizontal,\n      _.value\n    )\n    val targetV = OriginChoice(Vertical.values, \"Change target vertical\")(\n      t => $.modState(s => s.copy(target = s.target.copy(vertical = t))),\n      _.target.vertical,\n      _.value\n    )\n\n    val originChoices = Seq(anchorV, anchorH, targetV, targetH)\n\n    def render(S: State) = {\n      <.div(\n        CodeExample(code, \"MuiPopoverDemo\")(\n          <.div(\n            <.div(\n              MuiRaisedButton(\n                onClick = (e: ReactEvent) => toggle,\n                label = \"Click on me to show a popover\"\n              )()\n            ).ref(ref = _),\n            originChoices.map(_.menu(S)).toVdomArray,\n            MuiPopover(\n              open = S.open,\n              anchorEl = ref,\n              anchorOrigin = S.anchor,\n              targetOrigin = S.target,\n              onRequestClose = (s: String) => toggle\n            )(\n              <.div(\n                ^.padding := \"20px\",\n                <.h2(\"here is an arbitrary popover\"),\n                <.p(\"Hi - here is some content\"),\n                MuiRaisedButton(\n                  primary = true,\n                  label = \"here is a button\",\n                  onClick = (e: ReactEvent) => toggle\n                )()\n              )\n            )\n          )\n        )\n      )\n    }\n  }\n\n  private val component = ScalaComponent\n    .builder[Unit](\"MuiPopoverDemo\")\n    .initialState(\n      State(\n        open = false,\n        target = Origin(Vertical.top, Horizontal.left),\n        anchor = Origin(Vertical.bottom, Horizontal.left)\n      ))\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply(): VdomElement =\n    component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiProgressDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react.ScalaComponent\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject MuiProgressDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n  val component = ScalaComponent\n    .builder[Unit](\"MuiProgressDemo\")\n    .render(P => {\n      <.div(\n        CodeExample(code, \"Progress Bars\")(\n          MuiCircularProgress(mode = DeterminateIndeterminate.determinate, value = 50.0)(),\n          MuiCircularProgress(mode = DeterminateIndeterminate.indeterminate, size = 0.5)(),\n          MuiCircularProgress(mode = DeterminateIndeterminate.indeterminate)(),\n          MuiCircularProgress(mode = DeterminateIndeterminate.indeterminate, size = 2.0)(),\n          MuiLinearProgress(mode = DeterminateIndeterminate.indeterminate)()\n        )\n      )\n    })\n    .build\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiSelectFieldDemo.scala",
    "content": "package demo.components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.component.Scala.Unmounted\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport scala.scalajs.js.annotation.ScalaJSDefined\n\nobject MuiSelectFieldDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  class ChoiceId(val value: String)                extends js.Object\n  class Choice(val id: ChoiceId, val text: String) extends js.Object\n\n  case class Backend($ : BackendScope[Seq[Choice], Choice]) {\n    val onChange: (TouchTapEvent, Int, Choice) => Callback =\n      (e, idx, a) => $.setState(a) >> Callback.info(s\"selected $a\")\n\n    def render(choices: Seq[Choice], selected: Choice): VdomElement =\n      CodeExample(code, \"MuiSelectField\")(\n        MuiSelectField[Choice](\n          value = selected,\n          onBlur = CallbackDebug.f1(\"onBlur\"),\n          onFocus = CallbackDebug.f1(\"onFocus\"),\n          onChange = onChange\n        )(\n          choices\n            .map(\n              c =>\n                MuiMenuItem[Choice](key = c.id.value, value = c, primaryText = js.defined(c.text))()\n            )\n            .toVdomArray\n        )\n      )\n  }\n\n  private val component =\n    ScalaComponent\n      .builder[Seq[Choice]](\"MuiSelectFieldDemo\")\n      .initialStateFromProps(_.head)\n      .renderBackend[Backend]\n      .build\n\n  def apply(): Unmounted[Seq[Choice], Choice, Backend] =\n    component(\n      Seq(\n        new Choice(new ChoiceId(\"1\"), \"Never\"),\n        new Choice(new ChoiceId(\"2\"), \"Every Night\"),\n        new Choice(new ChoiceId(\"3\"), \"Weeknights\"),\n        new Choice(new ChoiceId(\"4\"), \"Weekends\"),\n        new Choice(new ChoiceId(\"5\"), \"Weekly\")\n      )\n    )\n\n  // EXAMPLE:END\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiSliderDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui.MuiSlider\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject MuiSliderDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiSliderDemo\")\n    .render(P => {\n\n      val onChange: (ReactMouseEvent, Double) => Callback =\n        (e, v) => Callback.info(s\"chose value: $v\")\n\n      <.div(\n        CodeExample(code, \"MuiSlider\")(\n          MuiSlider(name = \"slider1\", onChange = onChange)(),\n          MuiSlider(name = \"slider2\", onChange = onChange, defaultValue = 0.5)(),\n          MuiSlider(name = \"slider1\", onChange = onChange, value = 0.3, disabled = true)()\n        )\n      )\n    })\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiSnackBarDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom\n\nimport scala.scalajs.js\n\nobject MuiSnackbarDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  class Backend($ : BackendScope[_, Boolean]) {\n    val close = $.setState(false)\n    val open  = $.setState(true)\n\n    val undoAdd: ReactEvent => Callback =\n      e => close >> Callback(dom.window.alert(\"We removed Event from your calendar\"))\n\n    val closeRequested: String => Callback =\n      reason => close >> Callback.info(s\"onRequestClose: $reason\")\n\n    val toggleSnack: ReactEvent => Callback =\n      e => $.modState(!_)\n\n    def render(isOpen: Boolean) =\n      CodeExample(code, \"MuiSnackBar\")(\n        <.div(\n          MuiSnackbar(\n            autoHideDuration = js.defined(5000),\n            message = \"Event added to your calendar\",\n            action = js.defined(\"undo\"),\n            onActionClick = undoAdd,\n            onRequestClose = closeRequested,\n            open = isOpen\n          )(),\n          MuiRaisedButton(\n            label = \"Add event to calendar\",\n            onClick = toggleSnack\n          )().unless(isOpen)\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiSnackBar\")\n    .initialState(false)\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiSvgIconDemo.scala",
    "content": "package demo.components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.{Px, Reusability}\nimport japgolly.scalajs.react.vdom.TagOf\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom.html.Div\n\nimport scala.scalajs.js\n\nobject MuiSvgIconDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n  case class Props(icons: js.Array[(String, MuiSvgIcon)])\n\n  case class State(accepts: Accepts, hovered: js.UndefOr[String])\n\n  case class Accepts(search: js.UndefOr[String]) {\n    private val lower = search map (_.toLowerCase)\n    def apply(name: String): Boolean =\n      lower forall name.toLowerCase.contains\n  }\n\n  case class Backend($ : BackendScope[Props, State]) {\n    implicit val r0 = Reusability.by_==[Props]\n    implicit val r1 = Reusability.by_==[Accepts]\n\n    def lookupIcon(name: String): MuiSvgIcon = {\n      val lookup = Mui.SvgIcons.asInstanceOf[js.Dynamic]\n      lookup.selectDynamic(name).asInstanceOf[MuiSvgIcon]\n    }\n\n    val select: String => ReactMouseEventFromHtml => Callback =\n      name => e => $.modState(_.copy(hovered = name))\n\n    val unselect: ReactMouseEventFromHtml => Callback =\n      e => $.modState(_.copy(hovered = js.undefined))\n\n    val onSearchChange: (ReactEventFromInput, String) => Callback =\n      (e, str) => {\n        e.persist()\n        $.modState(_.copy(accepts = Accepts(e.target.value)))\n      }\n\n    /* rendering all icons turned out to be expensive, so\n     *  we cache things based on search string */\n    val renderedIconsPx: Px[VdomNode] =\n      Px.callback($.props zip $.state.map(_.accepts)).withReuse.autoRefresh.map {\n        case (p, accepts) =>\n          p.icons.collect {\n            case (name, icon) if accepts(name) =>\n              icon.apply(\n                key = name,\n                style = js.Dynamic.literal(width = \"30px\", height = \"30px\"),\n                hoverColor = Mui.Styles.colors.amber500,\n                onMouseEnter = select(name),\n                onMouseLeave = unselect,\n                viewBox = \"0 0 30 30\"\n              )()\n          }.toVdomArray\n      }\n\n    def render(P: Props, S: State): TagOf[Div] =\n      <.div(\n        CodeExample(code, \"MuiSvgIcons\")(\n          <.div(\n            <.h4(s\"Current icon: ${S.hovered.getOrElse(\"None\")}\"),\n            <.label(\"Search: \"),\n            MuiTextField(name = \"search\",\n                         value = S.accepts.search,\n                         onChange = js.defined(onSearchChange))()\n          ),\n          <.div(\n            ^.height := \"300px\",\n            ^.overflowY := \"scroll\",\n            renderedIconsPx.value()\n          )\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"MuiSvgIconDemo\")\n    .initialState(State(Accepts(js.undefined), js.undefined))\n    .renderBackend[Backend]\n    .build\n\n  val icons: js.Array[(String, MuiSvgIcon)] =\n    js.Array(\n      \"PlacesRvHookup\"              -> MuiSvgIcons.PlacesRvHookup,\n      \"PlacesSmokeFree\"             -> MuiSvgIcons.PlacesSmokeFree,\n      \"PlacesSmokingRooms\"          -> MuiSvgIcons.PlacesSmokingRooms,\n      \"PlacesSpa\"                   -> MuiSvgIcons.PlacesSpa,\n      \"SocialCake\"                  -> MuiSvgIcons.SocialCake,\n      \"SocialDomain\"                -> MuiSvgIcons.SocialDomain,\n      \"SocialGroupAdd\"              -> MuiSvgIcons.SocialGroupAdd,\n      \"SocialGroup\"                 -> MuiSvgIcons.SocialGroup,\n      \"SocialLocationCity\"          -> MuiSvgIcons.SocialLocationCity,\n      \"SocialMoodBad\"               -> MuiSvgIcons.SocialMoodBad,\n      \"SocialMood\"                  -> MuiSvgIcons.SocialMood,\n      \"SocialNotificationsActive\"   -> MuiSvgIcons.SocialNotificationsActive,\n      \"SocialNotificationsNone\"     -> MuiSvgIcons.SocialNotificationsNone,\n      \"SocialNotificationsOff\"      -> MuiSvgIcons.SocialNotificationsOff,\n      \"SocialNotificationsPaused\"   -> MuiSvgIcons.SocialNotificationsPaused,\n      \"SocialNotifications\"         -> MuiSvgIcons.SocialNotifications,\n      \"SocialPages\"                 -> MuiSvgIcons.SocialPages,\n      \"SocialPartyMode\"             -> MuiSvgIcons.SocialPartyMode,\n      \"SocialPeopleOutline\"         -> MuiSvgIcons.SocialPeopleOutline,\n      \"SocialPeople\"                -> MuiSvgIcons.SocialPeople,\n      \"SocialPersonAdd\"             -> MuiSvgIcons.SocialPersonAdd,\n      \"SocialPersonOutline\"         -> MuiSvgIcons.SocialPersonOutline,\n      \"SocialPerson\"                -> MuiSvgIcons.SocialPerson,\n      \"SocialPlusOne\"               -> MuiSvgIcons.SocialPlusOne,\n      \"SocialPoll\"                  -> MuiSvgIcons.SocialPoll,\n      \"SocialPublic\"                -> MuiSvgIcons.SocialPublic,\n      \"SocialSchool\"                -> MuiSvgIcons.SocialSchool,\n      \"SocialSentimentDissatisfied\" -> MuiSvgIcons.SocialSentimentDissatisfied\n    )\n\n  // EXAMPLE:END\n\n  def apply() = component(Props(icons))\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiSwitchesDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport scalacss.ProdDefaults._\nimport scalacss.ScalaCssReact._\n\nobject MuiSwitchesDemo {\n\n  object Style extends StyleSheet.Inline {\n\n    import dsl._\n\n    val container = style(maxWidth(1024 px))\n\n    val content = style(\n      display.flex,\n      padding(30.px),\n      flexDirection.column,\n      alignItems.center\n    )\n  }\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiSwitchesDemo\")\n    .render(\n      P =>\n        CodeExample(code, \"MuiSwitches\")(\n          <.div(\n            Style.container,\n            <.h3(\"Switches\"),\n            MuiTabs()(\n              MuiTab(label = js.defined(\"Checkbox\"))(\n                <.div(\n                  Style.content,\n                  MuiCheckbox(\n                    name = \"checkboxName1\",\n                    value = 1,\n                    label = js.defined(\"went for a run today\")\n                  )(),\n                  MuiCheckbox(\n                    name = \"checkboxName2\",\n                    value = \"checkboxValue2\",\n                    label = js.defined(\"feed the dog\")\n                  )(),\n                  MuiCheckbox(\n                    name = \"checkboxName3\",\n                    value = \"checkboxValue3\",\n                    label = js.defined(\"built a house on the moon\"),\n                    disabled = true\n                  )()\n                )\n              ),\n              MuiTab(label = js.defined(\"RadioButton\"))(\n                <.div(\n                  Style.content,\n                  MuiRadioButtonGroup(name = \"shipspeed\",\n                                      defaultSelected = js.defined(\"not_light\"))(\n                    MuiRadioButton(value = \"light\",\n                                   label = js.defined(\"prepare for light speed\"))(),\n                    MuiRadioButton(value = \"no_light\",\n                                   label = js.defined(\"light speed too slow\"))(),\n                    MuiRadioButton(value = \"ludicrous\",\n                                   label = js.defined(\"go to ludicrous speed\"),\n                                   disabled = true)()\n                  )\n                )\n              ),\n              MuiTab(label = js.defined(\"Toggle\"))(\n                <.div(\n                  Style.content,\n                  MuiToggle(name = \"toggleName1\",\n                            value = \"togglevalue1\",\n                            label = js.defined(\"active thrusters\"))(),\n                  MuiToggle(name = \"toggleName2\",\n                            value = \"togglevalue2\",\n                            label = js.defined(\"auto-pilot\"),\n                            defaultToggled = true)(),\n                  MuiToggle(name = \"toggleName3\",\n                            value = \"togglevalue3\",\n                            label = js.defined(\"initiate self-destruct sequence\"),\n                            disabled = true)()\n                )\n              )\n            )\n          )\n      ))\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiTableDemo.scala",
    "content": "package demo.components.materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport scala.scalajs.js.`|`\n\nobject MuiTableDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class State(\n      fixedHeader: Boolean,\n      fixedFooter: Boolean,\n      stripedRows: Boolean,\n      showRowHover: Boolean,\n      selectable: Boolean,\n      multiSelectable: Boolean,\n      enableSelectAll: Boolean,\n      deselectOnClickaway: Boolean,\n      height: String,\n      selected: String | js.Array[Int]\n  )\n\n  case class Backend($ : BackendScope[Unit, State]) {\n    val onRowSelection: String | js.Array[Int] => Callback =\n      rows =>\n        $.modState(_.copy(selected = rows)) >>\n          Callback.info(s\"selected $rows\")\n\n    val toggleMultiSelectable: (ReactEvent, Boolean) => Callback =\n      (e, b) => $.modState(_.copy(multiSelectable = b))\n    val toggleEnableSelectAll: (ReactEvent, Boolean) => Callback =\n      (e, b) => $.modState(_.copy(enableSelectAll = b))\n    val toggleDeselectOnClickaway: (ReactEvent, Boolean) => Callback =\n      (e, b) => $.modState(_.copy(deselectOnClickaway = b))\n    val toggleSelectable: (ReactEvent, Boolean) => Callback =\n      (e, b) => $.modState(_.copy(selectable = b))\n    val toggleFixedHeader: (ReactEvent, Boolean) => Callback =\n      (e, b) => $.modState(_.copy(fixedHeader = b))\n    val toggleFixedFooter: (ReactEvent, Boolean) => Callback =\n      (e, b) => $.modState(_.copy(fixedFooter = b))\n\n    val colNames = MuiTableRow()(\n      MuiTableHeaderColumn(tooltip = \"The ID\")(\"ID\"),\n      MuiTableHeaderColumn(tooltip = \"The Name\")(\"Name\"),\n      MuiTableHeaderColumn(tooltip = \"The Status\")(\"Status\")\n    )\n    case class Person(id: String, name: String, status: String)\n\n    val persons = List(\n      Person(\"1\", \"John Smith\", \"Employed\"),\n      Person(\"2\", \"Randal White\", \"Unemployed\"),\n      Person(\"4\", \"Steve Brown\", \"Employed\"),\n      Person(\"6\", \"Samuel Roberts\", \"Unemployed\"),\n      Person(\"7\", \"Adam Moore\", \"Employed\")\n    )\n\n    def renderPersons(selecteds: String | js.Array[Int]): Seq[VdomNode] =\n      persons.zipWithIndex.map {\n        case (p, idx) =>\n          val selected = selecteds match {\n            case a: js.Array[_] => a.contains(idx)\n            case all            => true\n          }\n          MuiTableRow(selected = selected)(\n            MuiTableRowColumn()(p.id),\n            MuiTableRowColumn()(p.name),\n            MuiTableRowColumn()(p.status)\n          ): VdomNode\n      }\n\n    def render(S: State) =\n      CodeExample(code, \"MuiTable\")(\n        <.div(\n          MuiTable(\n            key = S.toString,\n            height = S.height,\n            fixedHeader = S.fixedHeader,\n            fixedFooter = S.fixedFooter,\n            selectable = S.selectable,\n            multiSelectable = S.multiSelectable,\n            onRowSelection = onRowSelection\n          )(\n            MuiTableHeader(enableSelectAll = S.enableSelectAll)(\n              MuiTableRow()(\n                MuiTableHeaderColumn(\n                  tooltip = \"Super Header\",\n                  style = js.Dynamic.literal(\"textAlign\" -> \"center\")\n                )()\n              ),\n              colNames\n            ),\n            MuiTableBody(\n              deselectOnClickaway = S.deselectOnClickaway,\n              showRowHover = S.showRowHover,\n              stripedRows = S.stripedRows\n            )(\n              renderPersons(S.selected): _*\n            ),\n            MuiTableFooter()(\n              colNames,\n              MuiTableRow(style = js.Dynamic.literal(\"textAlign\" -> \"center\"))()\n            )\n          ),\n          MuiPaper(rounded = true,\n                   style = js.Dynamic.literal(\"width\" -> \"300\", \"padding\" -> \"20px\"))(\n            MuiToggle(\n              label = js.defined(\"selectable\"),\n              defaultToggled = S.selectable,\n              onToggle = toggleSelectable\n            )(),\n            MuiToggle(\n              label = js.defined(\"multiSelectable\"),\n              defaultToggled = S.multiSelectable,\n              onToggle = toggleMultiSelectable\n            )(),\n            MuiToggle(\n              label = js.defined(\"enableSelectAll\"),\n              defaultToggled = S.enableSelectAll,\n              onToggle = toggleEnableSelectAll\n            )(),\n            MuiToggle(\n              label = js.defined(\"deselectOnClickaway\"),\n              defaultToggled = S.deselectOnClickaway,\n              onToggle = toggleDeselectOnClickaway\n            )(),\n            MuiToggle(\n              label = js.defined(\"fixedHeader\"),\n              defaultToggled = S.fixedHeader,\n              onToggle = toggleFixedHeader\n            )(),\n            MuiToggle(\n              label = js.defined(\"fixedFooter\"),\n              defaultToggled = S.fixedFooter,\n              onToggle = toggleFixedFooter\n            )()\n          )\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiTableDemo\")\n    .initialState(State(\n      fixedHeader = false,\n      fixedFooter = false,\n      stripedRows = true,\n      showRowHover = true,\n      selectable = true,\n      multiSelectable = false,\n      enableSelectAll = false,\n      deselectOnClickaway = true,\n      height = \"400px\",\n      selected = js.Array[Int]()\n    ))\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiTabsDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.raw._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport scalacss.ProdDefaults._\nimport scalacss.ScalaCssReact._\n\nobject MuiTabsDemo {\n\n  object Style extends StyleSheet.Inline {\n\n    import dsl._\n\n    val tabContent = style(\n      textAlign.center,\n      padding(40.px)\n    )\n  }\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n  case class Backend($ : BackendScope[Unit, Int]) {\n    val onChange: (Int, ReactEventFromHtml, ReactElement) => Callback =\n      (chosen, _, _) ⇒ $.setState(chosen) >> Callback.info(s\"chose $chosen\")\n\n    def render(current: Int) =\n      <.div(\n        CodeExample(code, \"MuiTabs\")(\n          MuiTabs[Int](value = current, onChange = onChange)(\n            MuiTab[Int](label = js.defined(\"Tab1\"), value = 1)(\n              <.h3(Style.tabContent, \"Tab1 Content\")\n            ),\n            MuiTab[Int](label = js.defined(\"Tab2\"), value = 2)(\n              <.h3(Style.tabContent, \"Tab2 Content\")\n            )\n          )\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiTabsDemo\")\n    .initialState(2)\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiTextFieldDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react.ScalaComponent\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject MuiTextFieldDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n  //TODO for some reason the vdomNodeFromString implicit is not working\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiTextFieldDemo\")\n    .render(P => {\n      <.div(\n        CodeExample(code, \"MuiTextField\")(\n          <.div(\n            ^.display.flex,\n            ^.flexDirection.column,\n            MuiTextField(\n              hintText = js.defined(\"Hint Text\"),\n              onBlur = CallbackDebug.f1(\"onBlur\"),\n              onChange = CallbackDebug.f2(\"onChange\"),\n              onFocus = CallbackDebug.f1(\"onFocus\")\n            )(),\n            MuiTextField(hintText = js.defined(\"Hint Text\"),\n                         floatingLabelText = js.defined(\"Floating Label Text\"))(),\n            MuiTextField(hintText = js.defined(\"Multi Line Text\"), multiLine = true)(),\n            MuiTextField(hintText = js.defined(\"Multi Line Text\"),\n                         multiLine = true,\n                         floatingLabelText = js.defined(\"Multi Line Floating Label Text\"))(),\n            MuiTextField(hintText = js.defined(\"Disabled Hint text\"), disabled = true)()\n          )\n        )\n      )\n    })\n    .build\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiThemeProviderDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\nimport scala.scalajs.js.Dynamic\n\nobject MuiThemeProviderDemo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class State(\n      baseTheme: MuiRawTheme,\n      backgroundColor: js.UndefOr[MuiColor]\n  ) {\n\n    val theme: MuiTheme =\n      Mui.Styles.getMuiTheme(\n        backgroundColor.fold(baseTheme)(\n          color ⇒ baseTheme.copy(palette = baseTheme.palette.copy(canvasColor = color))\n        ))\n  }\n\n  case class Backend($ : BackendScope[Unit, State]) {\n\n    def pickColor(s: String): MuiColor =\n      Mui.Styles.colors.asInstanceOf[Dynamic].selectDynamic(s).asInstanceOf[MuiColor]\n\n    val colors: Seq[(String, MuiColor)] =\n      js.Object.keys(Mui.Styles.colors).map { key ⇒\n        key → pickColor(key)\n      }\n\n    val onThemeChanged: (ReactEvent, Int, MuiRawTheme) ⇒ Callback =\n      (e, idx, theme) ⇒ $.setState(State(theme, js.undefined))\n\n    val onColorChanged: (ReactEvent, Int, MuiColor) ⇒ Callback =\n      (e, idx, color) ⇒ $.modState(_.copy(backgroundColor = color))\n\n    def render(S: State): VdomElement = {\n      <.div(\n        CodeExample(code, \"MuiThemeProvider\")(\n          MuiMuiThemeProvider(muiTheme = S.theme)(\n            MuiPaper()(\n              <.h3(\"Pick base theme\"),\n              MuiDropDownMenu[MuiRawTheme](key = \"themeDropdown\",\n                                           value = S.baseTheme,\n                                           onChange = onThemeChanged)(\n                MuiMenuItem[MuiRawTheme](key = \"LightRawTheme\",\n                                         primaryText = js.defined(\"LightRawTheme\"),\n                                         value = Mui.Styles.LightRawTheme)(),\n                MuiMenuItem[MuiRawTheme](key = \"DarkRawTheme\",\n                                         primaryText = js.defined(\"DarkRawTheme\"),\n                                         value = Mui.Styles.DarkRawTheme)()\n              ),\n              <.h3(\"Override theme canvas color\"),\n              MuiDropDownMenu[MuiColor](\n                key = \"colorDropdown\",\n                onChange = onColorChanged,\n                value = S.backgroundColor\n              )(\n                colors.map {\n                  case (name, color) ⇒\n                    MuiMenuItem[MuiColor](\n                      key = name,\n                      primaryText = js.defined(name),\n                      value = color,\n                      style = js.Dynamic.literal(backgroundColor = color)\n                    )(): VdomNode\n                }: _*\n              )\n            )\n          )\n        )\n      )\n    }\n  }\n\n  private val component =\n    ScalaComponent\n      .builder[Unit](\"MuiThemeProviderDemo\")\n      .initialState(State(Mui.Styles.LightRawTheme, js.undefined))\n      .renderBackend[Backend]\n      .build\n\n  // EXAMPLE:END\n\n  def apply(): VdomElement =\n    component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiTimePickerDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react.ScalaComponent\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject MuiTimePickerDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n  val component = ScalaComponent\n    .builder[Unit](\"MuiTimePickerDemo\")\n    .render(P => {\n      <.div(\n        CodeExample(code, \"MuiTimePicker\")(\n          MuiTimePicker(format = Ampm_24hr.ampm, hintText = js.defined(\"12 hr format\"))(),\n          MuiTimePicker(format = Ampm_24hr._24hr, hintText = js.defined(\"24 hr format\"))()\n        )\n      )\n    })\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/materialui/MuiToolbarDemo.scala",
    "content": "package demo\npackage components\npackage materialui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.materialui._\nimport japgolly.scalajs.react.ScalaComponent\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject MuiToolbarDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  val component = ScalaComponent\n    .builder[Unit](\"MuiToolbarDemo\")\n    .render(P => {\n      <.div(\n        CodeExample(code, \"MuiToolbar\")(\n          MuiToolbar()(\n            MuiToolbarGroup(key = \"1\")(\n              MuiRaisedButton(label = \"Tool Left\", secondary = true)()\n            ),\n            MuiToolbarGroup(key = \"2\")(\n              MuiToolbarTitle(text = js.defined(\"options\"))(),\n              MuiToolbarSeparator()(),\n              MuiRaisedButton(label = \"Create Broadcast\", primary = true)()\n            )\n          )\n        )\n      )\n    })\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/reactsplitpane/ReactSplitPaneInfo.scala",
    "content": "package demo.components.reactsplitpane\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactSplitPaneInfo {\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactSplitPaneInfo\")\n    .render(P => {\n      <.div(^.cls := \"full-width-section\")(\n        <.h3(\"React Split Pane :\"),\n        <.p(\"Wrapper for the react-split-pane component (0.1.66)\"),\n        <.a(\n          ^.href := \"https://github.com/tomkp/react-split-pane\",\n          \"react-split-pane on GitHub\"\n        )\n      )\n    })\n    .build\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/reactsplitpane/ReactSplitPaneSimpleHorizontal.scala",
    "content": "package demo.components.reactsplitpane\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.reactsplitpane.ReactSplitPane\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactSplitPaneSimpleHorizontal {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  class Backend(t: BackendScope[_, _]) {\n\n    def render() = {\n\n      <.div(\n        CodeExample(code, \"Simple Vertical Split\")(\n          <.div(\n            ^.width := \"95%\",\n            ^.height := \"400px\",\n            ^.border := \"1px solid\",\n            ^.margin := \"auto\",\n            ^.position := \"relative\",\n            ReactSplitPane(\n              split = \"horizontal\"\n            )(<.div(\"first\"), <.div(\"second\"))\n          )\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactSplitPaneDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/reactsplitpane/ReactSplitPaneSimpleNested.scala",
    "content": "package demo.components.reactsplitpane\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.reactsplitpane.ReactSplitPane\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\nimport scala.language.existentials\n\nobject ReactSplitPaneSimpleNested {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  class Backend(t: BackendScope[_, _]) {\n\n    def render() = {\n\n      val vert = ReactSplitPane()(<.div(\"second\"), <.div(\"third\"))\n\n      <.div(\n        CodeExample(code, \"Simple Nested\")(\n          <.div(\n            ^.width := \"95%\",\n            ^.height := \"400px\",\n            ^.border := \"1px solid\",\n            ^.margin := \"auto\",\n            ^.position := \"relative\",\n            ReactSplitPane(\n              split = \"horizontal\"\n            )(<.div(\"first\"), vert)\n          )\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactSplitPaneDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/reactsplitpane/ReactSplitPaneSimpleVertical.scala",
    "content": "package demo.components.reactsplitpane\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.reactsplitpane.ReactSplitPane\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactSplitPaneSimpleVertical {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  class Backend(t: BackendScope[_, _]) {\n\n    def render() = {\n\n      <.div(\n        CodeExample(code, \"Simple Vertical Split\")(\n          <.div(\n            ^.width := \"95%\",\n            ^.height := \"200px\",\n            ^.border := \"1px solid\",\n            ^.margin := \"auto\",\n            ^.position := \"relative\",\n            ReactSplitPane()(<.div(\"first\"), <.div(\"second\"))\n          )\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactSplitPaneDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/reacttable/ReactTableBasic.scala",
    "content": "package demo\npackage components\npackage reacttable\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.ReactTable\nimport demo.util.{Person, SampleData}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactTableBasic {\n  import ReactTable._\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  //  val columns: List[String] =\n  //    List(\"fname\", \"lname\", \"email\", \"country\")\n  val configs = List(\n    SimpleStringConfig[Person](name = \"First Name\", _.fname),\n    SimpleStringConfig[Person](name = \"Last Name\", _.lname),\n    ColumnConfig[Person](\n      name = \"Email\",\n      person => <.a(^.href := s\"mailto:${person.email}\", person.email))(DefaultOrdering(_.email)),\n    SimpleStringConfig[Person](name = \"Country\", _.country)\n  )\n\n  case class Backend($ : BackendScope[_, _]) {\n    def render =\n      <.div(\n        <.h2(^.cls := \"mui-font-style-headline\")(\"Basic Table\"),\n        CodeExample(code, \"ReactTableBasic\")(\n          ReactTable(data = SampleData.people, configs = configs, rowsPerPage = 6)())\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"plain\")\n    .renderBackend[Backend]\n    .build\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/reacttable/ReactTableCustomCell.scala",
    "content": "package demo\npackage components\npackage reacttable\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.ReactTable\nimport demo.util.{Person, SampleData}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactTableCustomCell {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[_, _]) {\n    import ReactTable._\n    // let say if i want to turn all fnames to grey that starts with J (you can return any VdomElement(buttons,well another ReactTable if you want!)\n    val configs = List(\n      ColumnConfig[Person](name = \"First Name\", customFname)(DefaultOrdering(_.fname)),\n      SimpleStringConfig[Person](name = \"Last Name\", _.lname),\n      ColumnConfig[Person](\n        name = \"Email\",\n        person => <.a(^.href := s\"mailto:${person.email}\", person.email))(DefaultOrdering(_.email)),\n      SimpleStringConfig[Person](name = \"Country\", _.country)\n    )\n\n    def customFname: Person => VdomElement =\n      person => {\n        if (person.fname.startsWith(\"J\"))\n          <.span(^.backgroundColor := \"grey\")(person.fname)\n        else <.span(person.fname)\n      }\n\n    def render =\n      <.div(\n        <.h2(^.cls := \"mui-font-style-headline\")(\"Custom Cell Factory\"),\n        CodeExample(code, \"ReactTableCustomCell\")(\n          ReactTable(data = SampleData.people, configs = configs, rowsPerPage = 6)())\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"plain\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/reacttable/ReactTableCustomColumnSize.scala",
    "content": "package demo\npackage components\npackage reacttable\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.ReactTable\nimport demo.util.{Person, SampleData}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactTableCustomColumnSize {\n  import ReactTable._\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[_, _]) {\n\n    val configs = List(\n      SimpleStringConfig[Person](name = \"First Name\", _.fname),\n      SimpleStringConfig[Person](name = \"Last Name\", _.lname),\n      ColumnConfig[Person](name = \"Email\",\n                           person => <.a(^.href := s\"mailto:${person.email}\", person.email),\n                           width = Some(\"10%\"))(DefaultOrdering(_.email)),\n      SimpleStringConfig[Person](name = \"Country\", _.country)\n    )\n\n    def render =\n      <.div(\n        CodeExample(code, \"Custom Column Size\")(\n          ReactTable(data = SampleData.people, configs = configs, rowsPerPage = 6)()))\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactTableCustomColumnSize\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/reacttable/ReactTableInfo.scala",
    "content": "package demo\npackage components\npackage reacttable\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactTableInfo {\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n    def render =\n      InfoTemplate(componentFilePath = \"/tables/ReactTable.scala\", scalacss = true)(\n        <.div(^.cls := \"full-width-section\")(\n          <.h3(\"React Table :\"),\n          <.p(\"Responsive HTML(flexbox) table with the following features\"),\n          <.ul(^.paddingLeft := \"25px\")(\n            <.li(\"Search\"),\n            <.li(\"Pagination\"),\n            <.li(\"Sorting\"),\n            <.li(\"Custom Styles\"),\n            <.li(\"Custom Custom Column Sizes\"),\n            <.li(\"Custom Cell Factory\")\n          )\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"ReactTableInfo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/semanticui/SuiButtonDemo.scala",
    "content": "package demo.components.semanticui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.semanticui.SuiButton\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject SuiButtonDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n\n    val handleOnClick = (e: ReactMouseEventFromInput) => Callback.info(\"You clicked me!\")\n\n    def render() =\n      <.div(\n        CodeExample(code, \"SuiButton\")(\n          SuiButton(onClick = handleOnClick)(\"Click Here\"),\n          SuiButton(primary = true)(\"Primary\"),\n          SuiButton(secondary = true)(\"Secondary\")\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"SuiButtonDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/semanticui/SuiContainerDemo.scala",
    "content": "package demo.components.semanticui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.semanticui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject SuiContainerDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n\n    def render() =\n      <.div(\n        CodeExample(code, \"SuiContainer\")(\n          <.b(\"A standard container\"),\n          SuiContainer()(\n            <.p(\"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa strong. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede link mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi.\")\n          )\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"SuiContainerDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/semanticui/SuiDividerDemo.scala",
    "content": "package demo.components.semanticui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.semanticui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject SuiDividerDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n\n    def render() =\n      <.div(\n        CodeExample(code, \"SuiDivider\")(\n          <.b(\"A standard divider\"),\n          SuiDivider()(),\n          <.br(),\n          <.b(\"Horizontal Divider\"),\n          SuiDivider(horizontal = true)(\"OR\")\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"SuiDividerDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/semanticui/SuiFlagDemo.scala",
    "content": "package demo.components.semanticui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.semanticui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject SuiFlagDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n\n    def render() =\n      <.div(\n        CodeExample(code, \"SuiFlag\")(\n          <.b(\"A flag can use the two digit country code, the full name, or a common alias.\"),\n          SuiSegment()(\n            SuiFlag(name = \"ae\")(),\n            SuiFlag(name = \"india\")(),\n            SuiFlag(name = \"france\")(),\n            SuiFlag(name = \"myanmar\")()\n          )\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"SuiFlagDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/semanticui/SuiGridDemo.scala",
    "content": "package demo.components.semanticui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.semanticui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject SuiGridDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n\n    val columns = (1 to 16).map(\n      i =>\n        (SuiGridColumn(key = i.toString)(\n          SuiImage(src = \"http://semantic-ui.com/images/wireframe/image.png\")()).vdomElement))\n    def render() =\n      <.div(CodeExample(code, \"SuiGrid\")(SuiGrid()(columns: _*)))\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"SuiGridDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/semanticui/SuiHeaderDemo.scala",
    "content": "package demo.components.semanticui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.semanticui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject SuiHeaderDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n\n    def render() =\n      <.div(\n        CodeExample(code, \"SuiHeader\")(\n          SuiHeader(as = \"h1\")(\"First Header\"),\n          SuiHeader(as = \"h2\")(\"Second Header\"),\n          SuiHeader(as = \"h3\")(\"Third Header\"),\n          SuiHeader(as = \"h4\")(\"Fourth Header\"),\n          SuiHeader(as = \"h5\")(\"Fifth Header\"),\n          SuiHeader(as = \"h6\")(\"Sixth Header\")\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"SuiHeaderDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/semanticui/SuiIconDemo.scala",
    "content": "package demo.components.semanticui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.semanticui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject SuiIconDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n\n    def render() =\n      <.div(\n        CodeExample(code, \"SuiIcon\")(\n          <.div(\n            SuiIcon(name = SuiIconType(\"home\"), size = SuiSize.mini)(),\n            SuiIcon(name = SuiIconType(\"home\"), size = SuiSize.tiny)(),\n            SuiIcon(name = SuiIconType(\"home\"), size = SuiSize.small)(),\n            <.br(),\n            SuiIcon(name = SuiIconType(\"home\"))(),\n            <.br(),\n            SuiIcon(name = SuiIconType(\"home\"), size = SuiSize.large)(),\n            SuiIcon(name = SuiIconType(\"home\"), size = SuiSize.big)(),\n            SuiIcon(name = SuiIconType(\"home\"), size = SuiSize.huge)()\n          ),\n          <.br(),\n          <.br(),\n          <.div(\n            SuiIconGroup(size = SuiSize.huge)(\n              SuiIcon(size = SuiSize.big, name = SuiIconType(\"thin circle\"))(),\n              SuiIcon(name = SuiIconType(\"user\"))()\n            )\n          )\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"SuiIconDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/semanticui/SuiInfo.scala",
    "content": "package demo\npackage components\npackage semanticui\n\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject SuiInfo {\n\n  val component = ScalaComponent\n    .builder[Unit](\"SuiInfo\")\n    .render(P => {\n      InfoTemplate(componentFilePath = \"semanticui/package.scala\")(\n        <.div(\n          <.h3(\"Semnatic-UI-React \"),\n          <.p(\n            \"scalajs-react wrapper for \",\n            RedLink(\"semantic-ui-react\", \"http://react.semantic-ui.com/introduction\")\n          ),\n          <.div(\n            <.h4(\"Supported Version :\"),\n            <.span(\"0.62.0\")\n          ),\n          <.div(\n            <.h4(\"How To Use :\"),\n            <.p(\"Follow the installation guide from :\",\n                RedLink(\"here\", \"http://react.semantic-ui.com/usage#javascript\"))\n          )\n        )\n      )\n\n    })\n    .build\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/semanticui/SuiInputDemo.scala",
    "content": "package demo.components.semanticui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.semanticui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject SuiInputDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n\n    def render() =\n      <.div(\n        CodeExample(code, \"SuiInput\")(\n          <.b(\"A standard input field\"),\n          <.br(),\n          SuiInput(placeholder = \"Search ..\")(),\n          <.br(),\n          <.b(\"Focus\"),\n          <.br(),\n          SuiInput(placeholder = \"Search ..\", focus = true)(),\n          <.br(),\n          <.b(\"Error\"),\n          <.br(),\n          SuiInput(placeholder = \"Search ..\", error = true)(),\n          <.br(),\n          <.b(\"Icon\"),\n          <.br(),\n          SuiInput(placeholder = \"Search ..\", icon = SuiIconType(\"search\"))()\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"SuiInputDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/components/semanticui/SuiListDemo.scala",
    "content": "package demo.components.semanticui\n\nimport chandu0101.macros.tojs.GhPagesMacros\nimport chandu0101.scalajs.react.components.semanticui._\nimport demo.components.CodeExample\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject SuiListDemo {\n\n  val code = GhPagesMacros.exampleSource\n\n  // EXAMPLE:START\n\n  case class Backend($ : BackendScope[Unit, Unit]) {\n\n    def render() =\n      <.div(\n        CodeExample(code, \"SuiList\")(\n          SuiList()(\n            SuiListItem()(\n              SuiListIcon(name = SuiIconType(\"users\"))(),\n              SuiListContent()(\"Semantic UI\")\n            ),\n            SuiListItem()(\n              SuiListIcon(name = SuiIconType(\"marker\"))(),\n              SuiListContent()(\"New York, NY\")\n            ),\n            SuiListItem()(\n              SuiListIcon(name = SuiIconType(\"mail\"))(),\n              SuiListContent()(<.a(^.href := \"mailto:jack@semantic-ui.com\")(\"jack@semantic-ui.com\"))\n            ),\n            SuiListItem()(\n              SuiListIcon(name = SuiIconType(\"linkify\"))(),\n              SuiListContent()(<.a(^.href := \"http://www.semantic-ui.com\")(\"semantic-ui.com\"))\n            )\n          )\n        )\n      )\n  }\n\n  val component = ScalaComponent\n    .builder[Unit](\"SuiListDemo\")\n    .renderBackend[Backend]\n    .build\n\n  // EXAMPLE:END\n\n  def apply() = component()\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/EuiPage.scala",
    "content": "package demo\npackage pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{EuiRouteModule, LeftRoute}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject EuiPage {\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props) =\n      <.div(LeftNavPage(EuiRouteModule.menu, P.selectedPage, P.ctrl))\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"EuiPage\")\n    .renderBackend[Backend]\n    .build\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/GoogleMapPage.scala",
    "content": "package demo\npackage pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{GoogleMapRouteModule, LeftRoute}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\n\nobject GoogleMapPage {\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props) = {\n      LeftNavPage(GoogleMapRouteModule.menu, P.selectedPage, P.ctrl)\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"GoogleMapPage\")\n    .renderBackend[Backend]\n    .build\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/HomePage.scala",
    "content": "package demo\npackage pages\n\nimport chandu0101.scalajs.react.components._\nimport demo.components.{ComponentGridItem, LocalDemoButton}\nimport demo.routes.AppRouter\nimport demo.routes.AppRouter._\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.component.Generic.toComponentCtor\nimport japgolly.scalajs.react.extra.router.RouterCtl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nimport scala.scalajs.js\n\nobject HomePage {\n  import RCustomStyles._\n\n  case class ComponentInfo(name: String, imagePath: js.Any, route: Page, tags: Stream[String])\n\n  object Style {\n\n    val info = TagMod(\n      MsFlexAlign := \"center\",\n      MsFlexDirection := \"column\",\n      WebkitAlignItems := \"center\",\n      WebkitBoxAlign := \"center\",\n      WebkitBoxDirection := \"normal\",\n      WebkitBoxOrient := \"vertical\",\n      WebkitFlexDirection := \"column\",\n      ^.alignItems := \"center\",\n      ^.backgroundColor := \"#eeeeee\",\n      ^.display := \"-ms-flexbox\",\n      ^.display := \"-webkit-box\",\n      ^.display := \"-webkit-flex\",\n      ^.display := \"flex\",\n      ^.flexDirection := \"column\",\n      ^.fontSize := \"18px\",\n      ^.fontWeight := \"500\",\n      ^.paddingBottom := \"45px\",\n      ^.paddingTop := \"85px\"\n    )\n\n    val infoContent = TagMod(^.fontWeight := \"500\", ^.fontSize := \"18px\")\n\n    val infoLink = TagMod(\n      ^.color := \"#ff4081\",\n      ^.padding := \"0 5px\",\n      ^.textDecoration := \"none\"\n    )\n\n    val searchSection = TagMod(\n      ^.display := \"-ms-flexbox\",\n      ^.display := \"-webkit-box\",\n      ^.display := \"-webkit-flex\",\n      ^.display := \"flex\",\n      ^.margin := \"50px\",\n      ^.marginBottom := \"15px\"\n    )\n\n    val componentsGrid = TagMod(\n      MsFlexWrap := \"wrap\",\n      WebkitFlexWrap := \"wrap\",\n      ^.display := \"-ms-flexbox\",\n      ^.display := \"-webkit-box\",\n      ^.display := \"-webkit-flex\",\n      ^.display := \"flex\",\n      ^.flexWrap := \"wrap\",\n      ^.margin := \"30px\"\n    )\n\n  }\n\n  case class State(filterText: String = \"\", results: Vector[ComponentInfo])\n\n  class Backend(t: BackendScope[RouterCtl[Page], State]) {\n\n    def onTextChange(text: String) = {\n      val results = AppRouter.homePageMenu.filter(c => c.tags.exists(s => s.contains(text)))\n      t.modState(_.copy(results = results, filterText = text))\n    }\n    def render(P: RouterCtl[Page], S: State) = {\n      <.div(\n        <.div(Style.info, ^.key := \"info\")(\n          <.h3(Style.infoContent)(\n            \"Reusable \",\n            <.a(^.href := \"https://github.com/japgolly/scalajs-react\",\n                Style.infoLink,\n                ^.target := \"_blank\")(\"scalajs-react\"),\n            \" Components, want to Contribute ? \"\n          ),\n          LocalDemoButton(\n            name = \"Welcome Mama\",\n            linkButton = true,\n            href =\n              \"https://github.com/chandu0101/scalajs-react-components/tree/master/doc/CONTRIBUTE.md\")\n        ),\n        <.div(Style.searchSection)(\n          ReactSearchBox(onTextChange = onTextChange, style = ReactSearchBox.DefaultStyle),\n          <.strong(^.alignSelf := \"center\", ^.paddingLeft := \"30px\")(\n            s\"Results: ${S.results.length}\").unless(S.filterText.isEmpty)\n        ),\n        <.div(Style.componentsGrid)(\n          S.results.map(c => ComponentGridItem(c.name, c.route, c.imagePath, P)).toTagMod\n        )\n      )\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[RouterCtl[Page]](\"homepage\")\n    .initialState(State(\"\", AppRouter.homePageMenu))\n    .renderBackend[Backend]\n    .build\n\n  def apply(ctrl: RouterCtl[Page]) = component(ctrl)\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/MuiPage.scala",
    "content": "package demo\npackage pages\n\nimport chandu0101.scalajs.react.components.materialui._\nimport demo.components.LeftNavPage\nimport demo.routes.{LeftRoute, MuiRouteModule}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject MuiPage {\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props) = {\n      MuiMuiThemeProvider()(MuiPaper()(LeftNavPage(MuiRouteModule.menu, P.selectedPage, P.ctrl)))\n    }\n  }\n\n  private val component = ScalaComponent\n    .builder[Props](\"MuiPage\")\n    .renderBackend[Backend]\n    .build\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/ReactDraggablePage.scala",
    "content": "package demo\npackage pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{LeftRoute, ReactDraggableRouteModule}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\nimport japgolly.scalajs.react.vdom.VdomElement\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactDraggablePage {\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props): VdomElement =\n      LeftNavPage(ReactDraggableRouteModule.menu, P.selectedPage, P.ctrl)\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactDraggablePage\")\n    .renderBackend[Backend]\n    .build\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/ReactGeomIconPage.scala",
    "content": "package demo\npackage pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{LeftRoute, ReactGeomIcontRouteModule}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactGeomIconPage {\n\n  class Backend(t: BackendScope[Props, Unit]) {\n    def render(P: Props): VdomElement =\n      LeftNavPage(ReactGeomIcontRouteModule.menu, P.selectedPage, P.ctrl)\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactGeomIconPage\")\n    .stateless\n    .renderBackend[Backend]\n    .build\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/ReactInfinitePage.scala",
    "content": "package demo\npackage pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{LeftRoute, ReactInfiniteRouteModule}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactInfinitePage {\n\n  class Backend(t: BackendScope[Props, Unit]) {\n    def render(P: Props): VdomElement =\n      LeftNavPage(ReactInfiniteRouteModule.menu, P.selectedPage, P.ctrl)\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactInfinitePage\")\n    .stateless\n    .renderBackend[Backend]\n    .build\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/ReactListViewPage.scala",
    "content": "package demo\npackage pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{LeftRoute, ReactListViewRouteModule}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\n\nobject ReactListViewPage {\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props) =\n      LeftNavPage(ReactListViewRouteModule.menu, P.selectedPage, P.ctrl)\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactListViewPage\")\n    .renderBackend[Backend]\n    .build\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/ReactPopoverPage.scala",
    "content": "package demo\npackage pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{LeftRoute, ReactPopoverRouteModule}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\n\nobject ReactPopoverPage {\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props) = {\n      LeftNavPage(ReactPopoverRouteModule.menu, P.selectedPage, P.ctrl)\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactPopOverPage\")\n    .renderBackend[Backend]\n    .build\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/ReactSplitPanePage.scala",
    "content": "package demo.pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{LeftRoute, ReactSplitPaneRouteModule}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactSplitPanePage {\n  case class Backend($ : BackendScope[_, _]) {\n    def render(P: Props): VdomElement =\n      LeftNavPage(ReactSplitPaneRouteModule.menu, P.selectedPage, P.ctrl)\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactSplitPanePage\")\n    .renderBackend[Backend]\n    .build\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/ReactTablePage.scala",
    "content": "package demo\npackage pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{LeftRoute, ReactTableRouteModule}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\n\nobject ReactTablePage {\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props) =\n      LeftNavPage(ReactTableRouteModule.menu, P.selectedPage, P.ctrl)\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactTablePage\")\n    .renderBackend[Backend]\n    .build\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/ReactTagsInputPage.scala",
    "content": "package demo\npackage pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{LeftRoute, ReactTagsInputRouteModule}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\n\nobject ReactTagsInputPage {\n\n  class Backend(t: BackendScope[Props, Unit]) {\n    def render(P: Props) = {\n      LeftNavPage(ReactTagsInputRouteModule.menu, P.selectedPage, P.ctrl)\n    }\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"ReactTagsInputPage\")\n    .stateless\n    .renderBackend[Backend]\n    .build\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/ReactTreeViewPage.scala",
    "content": "package demo\npackage pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{LeftRoute, ReactTreeViewRouteModule}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\n\nobject ReactTreeViewPage {\n  val component = ScalaComponent\n    .builder[Props](\"ReactTreeViewPage\")\n    .renderBackend[Backend]\n    .build\n\n  class Backend(t: BackendScope[Props, Unit]) {\n    def render(P: Props) =\n      LeftNavPage(ReactTreeViewRouteModule.menu, P.selectedPage, P.ctrl)\n  }\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/SpinnerPage.scala",
    "content": "package demo\npackage pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{LeftRoute, SpinnerRouteModule}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\n\nobject SpinnerPage {\n\n  class Backend(t: BackendScope[Props, Unit]) {\n    def render(P: Props) =\n      LeftNavPage(SpinnerRouteModule.menu, P.selectedPage, P.ctrl)\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"SpinnerPage\")\n    .stateless\n    .renderBackend[Backend]\n    .build\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/pages/SuiPage.scala",
    "content": "package demo.pages\n\nimport demo.components.LeftNavPage\nimport demo.routes.{LeftRoute, SuiRouteModule}\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.extra.router.RouterCtl\n\nobject SuiPage {\n\n  case class Props(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute])\n\n  case class Backend($ : BackendScope[Props, Unit]) {\n    def render(P: Props) =\n      LeftNavPage(SuiRouteModule.menu, P.selectedPage, P.ctrl)\n  }\n\n  val component = ScalaComponent\n    .builder[Props](\"SuiPage\")\n    .renderBackend[Backend]\n    .build\n\n  def apply(selectedPage: LeftRoute, ctrl: RouterCtl[LeftRoute]) =\n    component(Props(selectedPage, ctrl))\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/AppRouter.scala",
    "content": "package demo\npackage routes\n\nimport demo.components._\nimport demo.pages._\nimport japgolly.scalajs.react.extra.router._\nimport japgolly.scalajs.react.vdom.html_<^._\nimport org.scalajs.dom\n\nobject AppRouter {\n\n  sealed trait Page\n\n  case object Home extends Page\n\n  case class EuiPages(p: LeftRoute)            extends Page\n  case class GoogleMapPages(p: LeftRoute)      extends Page\n  case class MuiPages(p: LeftRoute)            extends Page\n  case class SuiPages(p: LeftRoute)            extends Page\n  case class ReactDraggablePages(p: LeftRoute) extends Page\n  case class ReactGeomIconPages(p: LeftRoute)  extends Page\n  case class ReactInfinitePages(p: LeftRoute)  extends Page\n  case class ReactListViewPages(p: LeftRoute)  extends Page\n  case class ReactPopoverPages(p: LeftRoute)   extends Page\n  case class ReactSplitPanePages(p: LeftRoute) extends Page\n  case class ReactTablePages(p: LeftRoute)     extends Page\n  case class ReactTagsInputPages(p: LeftRoute) extends Page\n  case class ReactTreeViewPages(p: LeftRoute)  extends Page\n  case class SpinnerPages(p: LeftRoute)        extends Page\n  case object ScalaCSSDoc                      extends Page\n\n  val config = RouterConfigDsl[Page].buildConfig { dsl =>\n    import dsl._\n    val reactListViewRoutes: Rule =\n      ReactListViewRouteModule.routes\n        .prefixPath_/(\"#reactlistview\")\n        .pmap[Page](ReactListViewPages) { case ReactListViewPages(p) => p }\n\n    val reactTreeViewRoutes: Rule =\n      ReactTreeViewRouteModule.routes\n        .prefixPath_/(\"#reacttreeview\")\n        .pmap[Page](ReactTreeViewPages) { case ReactTreeViewPages(p) => p }\n\n    val reactPopoverRoutes: Rule =\n      ReactPopoverRouteModule.routes\n        .prefixPath_/(\"#reactpopover\")\n        .pmap[Page](ReactPopoverPages) { case ReactPopoverPages(p) => p }\n\n    val reactTableRoutes: Rule =\n      ReactTableRouteModule.routes\n        .prefixPath_/(\"#reacttable\")\n        .pmap[Page](ReactTablePages) { case ReactTablePages(p) => p }\n\n    val reactSplitPaneRoutes: Rule =\n      ReactSplitPaneRouteModule.routes\n        .prefixPath_/(\"#reactsplitpane\")\n        .pmap[Page](ReactSplitPanePages) { case ReactSplitPanePages(p) => p }\n\n    val reactTagsInputRoutes: Rule =\n      ReactTagsInputRouteModule.routes\n        .prefixPath_/(\"#reacttagsinput\")\n        .pmap[Page](ReactTagsInputPages) { case ReactTagsInputPages(p) => p }\n\n    val reactGeomIconRoutes: Rule =\n      ReactGeomIcontRouteModule.routes\n        .prefixPath_/(\"#reactgeomicon\")\n        .pmap[Page](ReactGeomIconPages) { case ReactGeomIconPages(p) => p }\n\n    val reactInfiniteRoutes: Rule =\n      ReactInfiniteRouteModule.routes\n        .prefixPath_/(\"#reactinite\")\n        .pmap[Page](ReactInfinitePages) { case ReactInfinitePages(p) => p }\n\n    val reactDraggableRoutes: Rule =\n      ReactDraggableRouteModule.routes\n        .prefixPath_/(\"#reactdraggable\")\n        .pmap[Page](ReactDraggablePages) { case ReactDraggablePages(p) => p }\n\n    val googleMapRoutes: Rule =\n      GoogleMapRouteModule.routes\n        .prefixPath_/(\"#googlemap\")\n        .pmap[Page](GoogleMapPages) { case GoogleMapPages(p) => p }\n\n    val muiRoutes: Rule =\n      MuiRouteModule.routes\n        .prefixPath_/(\"#materialui\")\n        .pmap[Page](MuiPages) { case MuiPages(p) => p }\n\n    val euiRoutes: Rule =\n      EuiRouteModule.routes\n        .prefixPath_/(\"#elementalui\")\n        .pmap[Page](EuiPages) { case EuiPages(p) => p }\n\n    val suiRoutes: Rule =\n      SuiRouteModule.routes\n        .prefixPath_/(\"#semanticui\")\n        .pmap[Page](SuiPages) { case SuiPages(p) => p }\n\n    val spinnerRoutes: Rule =\n      SpinnerRouteModule.routes\n        .prefixPath_/(\"#spinner\")\n        .pmap[Page](SpinnerPages) { case SpinnerPages(p) => p }\n\n    (trimSlashes\n      | staticRoute(root, Home) ~> renderR(ctrl => HomePage(ctrl))\n      | staticRoute(\"#scalacss\", ScalaCSSDoc) ~> render(ScalaCSSTutorial())\n      | euiRoutes\n      | suiRoutes\n      | googleMapRoutes\n      | muiRoutes\n      | reactDraggableRoutes\n      | reactGeomIconRoutes\n      | reactInfiniteRoutes\n      | reactListViewRoutes\n      | reactPopoverRoutes\n      | reactSplitPaneRoutes\n      | reactTableRoutes\n      | reactTagsInputRoutes\n      | reactTreeViewRoutes\n      | spinnerRoutes)\n      .notFound(redirectToPage(Home)(Redirect.Replace))\n      .renderWith(layout)\n  }\n\n  def layout(c: RouterCtl[Page], r: Resolution[Page]) = {\n    assert(c != null)\n    <.div(\n      AppHeader(),\n      r.render(),\n      <.div(^.textAlign := \"center\", ^.key := \"footer\")(\n        <.hr(),\n        <.p(\"Built using scalajs-react\")\n      )\n    )\n  }\n\n  val homePageMenu = Vector(\n    HomePage.ComponentInfo(\n      name = \"Material UI\",\n      imagePath = Images.materialuiImage,\n      route = MuiPages(MuiRouteModule.Info),\n      tags = Stream(\"materialui\", \"material\", \"framework\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"Elemental UI\",\n      imagePath = Images.elementaluiImage,\n      route = EuiPages(EuiRouteModule.Info),\n      tags = Stream(\"elementalui\", \"elemental\", \"framework\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"Semantic UI\",\n      imagePath = Images.semanticuiImage,\n      route = SuiPages(SuiRouteModule.Info),\n      tags = Stream(\"semanticui\", \"semantic\", \"framework\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"React ListView\",\n      imagePath = Images.reactListViewImage,\n      route = ReactListViewPages(ReactListViewRouteModule.Info),\n      tags = Stream(\"list view\", \"search\", \"listview\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"Google Map\",\n      imagePath = Images.googleMapImage,\n      route = GoogleMapPages(GoogleMapRouteModule.Info),\n      tags = Stream(\"google\", \"map\", \"googlemap\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"React Draggable\",\n      imagePath = Images.reactDraggableImage,\n      route = ReactDraggablePages(ReactDraggableRouteModule.Info),\n      tags = Stream(\"react\", \"drag/drop\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"React TreeView\",\n      imagePath = Images.reactTreeViewImage,\n      route = ReactTreeViewPages(ReactTreeViewRouteModule.Info),\n      tags = Stream(\"tree view\", \"search\", \"treeview\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"React Table\",\n      imagePath = Images.reactTableImage,\n      route = ReactTablePages(ReactTableRouteModule.Info),\n      tags = Stream(\"table\", \"search\", \"pagination\", \"sorting\", \"cutom cell\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"React Split Pane\",\n      imagePath = Images.reactSplitPaneImage,\n      route = ReactSplitPanePages(ReactSplitPaneRouteModule.Info),\n      tags = Stream(\"split pane\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"React Tags Input\",\n      imagePath = Images.reactTagsInputImage,\n      route = ReactTagsInputPages(ReactTagsInputRouteModule.Info),\n      tags = Stream(\"tags\", \"input\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"React GeomIcons\",\n      imagePath = Images.reactGeomIconImage,\n      route = ReactGeomIconPages(ReactGeomIcontRouteModule.Info),\n      tags = Stream(\"icons\", \"svg\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"React Infinite\",\n      imagePath = Images.reactInfiniteImage,\n      route = ReactInfinitePages(ReactInfiniteRouteModule.Info),\n      tags = Stream(\"infinite scroll\", \"listview\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"Spinner\",\n      imagePath = Images.spinnerImage,\n      route = SpinnerPages(SpinnerRouteModule.Info),\n      tags = Stream(\"spinner\")\n    ),\n    HomePage.ComponentInfo(\n      name = \"React Popover\",\n      imagePath = Images.reactPopoverImage,\n      route = ReactPopoverPages(ReactPopoverRouteModule.Info),\n      tags = Stream(\"modal\", \"popover\")\n    )\n  )\n\n  val baseUrl =\n    if (dom.window.location.hostname == \"localhost\")\n      BaseUrl.fromWindowOrigin_/\n    else\n      BaseUrl.fromWindowOrigin\n\n  val router = Router(baseUrl, config)\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/EuiRouteModule.scala",
    "content": "package demo.routes\n\nimport demo.components.elementalui._\nimport demo.pages.EuiPage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject EuiRouteModule {\n  case object Info    extends LeftRoute(\"Info\", \"info\", () => EuiInfo())\n  case object Buttons extends LeftRoute(\"Buttons\", \"buttons\", () => EuiButtonsDemo())\n  case object Glyphs  extends LeftRoute(\"Glyphs\", \"glyphs\", () => EuiGlyphsDemo())\n  case object Forms   extends LeftRoute(\"Forms\", \"forms\", () => EuiFormsDemo())\n  case object Spinner extends LeftRoute(\"Spinner\", \"spinner\", () => EuiSpinnerDemo())\n  case object Modal   extends LeftRoute(\"Modal\", \"modal\", () => EuiModalDemo())\n  case object Misc    extends LeftRoute(\"Misc\", \"misc\", () => EuiMiscDemo())\n  val menu: List[LeftRoute] = List(\n    Info,\n    Buttons,\n    Glyphs,\n    Forms,\n    Spinner,\n    Modal,\n    Misc\n  )\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n\n    menu.map(i => staticRoute(i.route, i) ~> renderR(r => EuiPage(i, r))).reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/GoogleMapRouteModule.scala",
    "content": "package demo\npackage routes\n\nimport demo.components.googlemap._\nimport demo.pages.GoogleMapPage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject GoogleMapRouteModule {\n\n  case object Info extends LeftRoute(\"Info\", \"info\", () => GoogleMapInfo())\n\n  case object Basic extends LeftRoute(\"Basic Map\", \"basic\", () => GoogleMapBasic())\n\n  case object Marker extends LeftRoute(\"Map With Markers\", \"markers\", () => GoogleMapMarkers())\n\n  case object MutableMarker\n      extends LeftRoute(\"Mutable Markers\", \"mutableMarkers\", () => MutableGoogleMapMarkers())\n\n  case object MarkerIcon\n      extends LeftRoute(\"Custom Marker Icon\", \"markericon\", () => GoogleMapCustomMarkerIcon())\n\n  case object MarkerInfoWindow\n      extends LeftRoute(\"Marker Info Window\", \"markerinfowindow\", () => GoogleMapMarkerInfoWindow())\n\n  val menu: List[LeftRoute] =\n    List(Info, Basic, Marker, MutableMarker, MarkerIcon, MarkerInfoWindow)\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n\n    menu.map(i => staticRoute(i.route, i) ~> renderR(r => GoogleMapPage(i, r))).reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/LeftRoute.scala",
    "content": "package demo\npackage routes\n\nimport japgolly.scalajs.react.vdom.VdomElement\n\nabstract class LeftRoute(val name: String, val route: String, val render: () => VdomElement)"
  },
  {
    "path": "demo/src/main/scala/demo/routes/MuiRouteModule.scala",
    "content": "package demo\npackage routes\n\nimport demo.components.materialui._\nimport demo.pages.MuiPage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject MuiRouteModule {\n\n  case object Info extends LeftRoute(\"Info\", \"info\", () => MuiInfo())\n\n  case object AppBar extends LeftRoute(\"AppBar\", \"appbar\", () => MuiAppBarDemo())\n\n  case object AutoComplete\n      extends LeftRoute(\"AutoComplete\", \"autocomplete\", () => MuiAutoCompleteDemo())\n\n  case object Avatar extends LeftRoute(\"Avatar\", \"avatar\", () => MuiAvatarDemo())\n\n  case object Tabs extends LeftRoute(\"Tabs\", \"tabs\", () => MuiTabsDemo())\n\n  case object Buttons extends LeftRoute(\"Buttons\", \"buttons\", () => MuiButtonsDemo())\n\n  case object DatePicker extends LeftRoute(\"Date Picker\", \"datepicker\", () => MuiDatePickerDemo())\n\n  case object Dialog extends LeftRoute(\"Dialog\", \"dialog\", () => MuiDialogDemo())\n\n  case object DropDownMenu\n      extends LeftRoute(\"DropDown Menu\", \"dropdownmenu\", () => MuiDropDownMenuDemo())\n\n  case object Paper extends LeftRoute(\"Paper\", \"paper\", () => MuiPaperDemo())\n\n  case object Popover extends LeftRoute(\"Popover\", \"popover\", () => MuiPopoverDemo())\n\n  case object TextField extends LeftRoute(\"Text Field\", \"textfield\", () => MuiTextFieldDemo())\n\n  case object ThemeProvider extends LeftRoute(\"Themes\", \"themes\", () => MuiThemeProviderDemo())\n\n  case object Progress extends LeftRoute(\"Progress Bars\", \"progress\", () => MuiProgressDemo())\n\n  case object SelectField\n      extends LeftRoute(\"Select Field\", \"selectfield\", () => MuiSelectFieldDemo())\n\n  case object SnackBar extends LeftRoute(\"SnackBar\", \"snackbar\", () => MuiSnackbarDemo())\n\n  case object Slider extends LeftRoute(\"Slider\", \"slider\", () => MuiSliderDemo())\n\n  case object SvgIcon extends LeftRoute(\"Svg icons\", \"svgicon\", () => MuiSvgIconDemo())\n\n  case object TimePicker extends LeftRoute(\"Time Picker\", \"timepicker\", () => MuiTimePickerDemo())\n\n  case object Switches extends LeftRoute(\"Switches\", \"switches\", () => MuiSwitchesDemo())\n\n  case object Toolbar extends LeftRoute(\"Toolbar\", \"toolbar\", () => MuiToolbarDemo())\n\n  case object Drawer extends LeftRoute(\"Drawer\", \"drawer\", () => MuiDrawerDemo())\n\n  case object Menu extends LeftRoute(\"Menus\", \"menus\", () => MuiMenuDemo())\n\n  case object MList extends LeftRoute(\"List\", \"list\", () => MuiListDemo())\n\n  case object Table extends LeftRoute(\"Table\", \"table\", () => MuiTableDemo())\n\n  val menu: List[LeftRoute] = List(\n    Info,\n    //    Updates,\n    AppBar,\n    AutoComplete,\n    Avatar,\n    Buttons,\n    DatePicker,\n    Dialog,\n    DropDownMenu,\n    Drawer,\n    MList,\n    Menu,\n    Paper,\n    Popover,\n    Progress,\n    SelectField,\n    Switches,\n    Slider,\n    SvgIcon,\n    SnackBar,\n    TextField,\n    ThemeProvider,\n    TimePicker,\n    Table,\n    Tabs,\n    Toolbar\n  )\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n\n    menu.map(i => staticRoute(i.route, i) ~> renderR(r => MuiPage(i, r))).reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/ReactDraggableRouteModule.scala",
    "content": "package demo\npackage routes\n\nimport demo.components.{ReactDraggableDemo, ReactDraggableInfo}\nimport demo.pages.ReactDraggablePage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactDraggableRouteModule {\n\n  case object Info extends LeftRoute(\"Info\", \"info\", () => ReactDraggableInfo())\n\n  case object Demo extends LeftRoute(\"Demo\", \"demo\", () => ReactDraggableDemo())\n\n  val menu: List[LeftRoute] = List(Info, Demo)\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n\n    menu\n      .map(i => staticRoute(i.route, i) ~> renderR(r => ReactDraggablePage(i, r)))\n      .reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/ReactGeomIcontRouteModule.scala",
    "content": "package demo\npackage routes\n\nimport demo.components.{ReactGeomIconDemo, ReactGeomIconInfo}\nimport demo.pages.ReactGeomIconPage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactGeomIcontRouteModule {\n\n  case object Info extends LeftRoute(\"Info\", \"info\", () => ReactGeomIconInfo())\n\n  case object Demo extends LeftRoute(\"Demo\", \"demo\", () => ReactGeomIconDemo())\n\n  val menu: List[LeftRoute] = List(Info, Demo)\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n    menu.map(i => staticRoute(i.route, i) ~> renderR(r => ReactGeomIconPage(i, r))).reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/ReactInfiniteRouteModule.scala",
    "content": "package demo\npackage routes\n\nimport demo.components.{ReactInfiniteDemo, ReactInfiniteInfo}\nimport demo.pages.ReactInfinitePage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactInfiniteRouteModule {\n\n  case object Info extends LeftRoute(\"Info\", \"info\", () => ReactInfiniteInfo())\n\n  case object Demo extends LeftRoute(\"Demo\", \"demo\", () => ReactInfiniteDemo())\n\n  val menu: List[LeftRoute] = List(Info, Demo)\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n    menu.map(i => staticRoute(i.route, i) ~> renderR(r => ReactInfinitePage(i, r))).reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/ReactListViewRouteModule.scala",
    "content": "package demo\npackage routes\n\nimport demo.components.{ReactListViewDemo, ReactListViewInfo}\nimport demo.pages.ReactListViewPage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactListViewRouteModule {\n\n  case object Info extends LeftRoute(\"Info\", \"info\", () => ReactListViewInfo())\n\n  case object Demo extends LeftRoute(\"Demo\", \"demo\", () => ReactListViewDemo())\n\n  val menu: List[LeftRoute] = List(Info, Demo)\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n    menu.map(i => staticRoute(i.route, i) ~> renderR(r => ReactListViewPage(i, r))).reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/ReactPopoverRouteModule.scala",
    "content": "package demo\npackage routes\n\nimport demo.components.{ReactPopoverDemo, ReactPopoverInfo}\nimport demo.pages.ReactPopoverPage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactPopoverRouteModule {\n  case object Info extends LeftRoute(\"Info\", \"info\", () => ReactPopoverInfo())\n\n  case object Demo extends LeftRoute(\"Demo\", \"demo\", () => ReactPopoverDemo())\n\n  val menu: List[LeftRoute] = List(Info, Demo)\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n\n    menu.map(i => staticRoute(i.route, i) ~> renderR(r => ReactPopoverPage(i, r))).reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/ReactSplitPaneRouteModule.scala",
    "content": "package demo.routes\n\nimport demo.components.reactsplitpane._\nimport demo.pages.ReactSplitPanePage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactSplitPaneRouteModule {\n\n  case object Info extends LeftRoute(\"Info\", \"info\", () => ReactSplitPaneInfo())\n\n  case object SimpleVertical\n      extends LeftRoute(\"Simple Vertical\", \"simplevertical\", () => ReactSplitPaneSimpleVertical())\n\n  case object SimpleHorizontal\n      extends LeftRoute(\"Simple Horizontal\",\n                        \"simplehorizontal\",\n                        () => ReactSplitPaneSimpleHorizontal())\n\n  case object SimpleNested\n      extends LeftRoute(\"Simple Nested\", \"simplenested\", () => ReactSplitPaneSimpleNested())\n\n  val menu: List[LeftRoute] = List(Info, SimpleVertical, SimpleHorizontal, SimpleNested)\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n    menu.map(i => staticRoute(i.route, i) ~> renderR(r => ReactSplitPanePage(i, r))).reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/ReactTableRouteModule.scala",
    "content": "package demo\npackage routes\n\nimport demo.components.reacttable._\nimport demo.pages.ReactTablePage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactTableRouteModule {\n\n  case object Info extends LeftRoute(\"Info\", \"info\", () => ReactTableInfo())\n\n  case object Basic extends LeftRoute(\"Search ,Pagination\", \"basic\", () => ReactTableBasic())\n\n  case object CustomCell\n      extends LeftRoute(\"Custom Cell\", \"customcell\", () => ReactTableCustomCell())\n\n  case object CustomColumn\n      extends LeftRoute(\"Custom Colum Size\", \"customcolumsize\", () => ReactTableCustomColumnSize())\n\n  val menu: List[LeftRoute] = List(Info, Basic, CustomCell, CustomColumn)\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n    menu.map(i => staticRoute(i.route, i) ~> renderR(r => ReactTablePage(i, r))).reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/ReactTagsInputRouteModule.scala",
    "content": "package demo\npackage routes\n\nimport demo.components.{ReactTagsInputDemo, ReactTagsInputInfo}\nimport demo.pages.ReactTagsInputPage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactTagsInputRouteModule {\n\n  case object Info extends LeftRoute(\"Info\", \"info\", () => ReactTagsInputInfo())\n\n  case object Demo extends LeftRoute(\"Demo\", \"demo\", () => ReactTagsInputDemo())\n\n  val menu: List[LeftRoute] = List(Info, Demo)\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n    menu.map(i => staticRoute(i.route, i) ~> renderR(r => ReactTagsInputPage(i, r))).reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/ReactTreeViewRouteModule.scala",
    "content": "package demo\npackage routes\n\nimport demo.components.{ReactTreeViewDemo, ReactTreeViewInfo}\nimport demo.pages.ReactTreeViewPage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject ReactTreeViewRouteModule {\n\n  case object Info extends LeftRoute(\"Info\", \"info\", () => ReactTreeViewInfo())\n\n  case object Demo extends LeftRoute(\"Demo\", \"demo\", () => ReactTreeViewDemo())\n\n  val menu: List[LeftRoute] = List(Info, Demo)\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n\n    menu.map(i => staticRoute(i.route, i) ~> renderR(r => ReactTreeViewPage(i, r))).reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/SpinnerRouteModule.scala",
    "content": "package demo\npackage routes\n\nimport demo.components.{SpinnerDemo, SpinnerInfo}\nimport demo.pages.SpinnerPage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject SpinnerRouteModule {\n\n  case object Info extends LeftRoute(\"Info\", \"info\", () => SpinnerInfo())\n\n  case object Demo extends LeftRoute(\"Demo\", \"demo\", () => SpinnerDemo())\n\n  val menu: List[LeftRoute] = List(Info, Demo)\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n    menu.map(i => staticRoute(i.route, i) ~> renderR(r => SpinnerPage(i, r))).reduce(_ | _)\n\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/routes/SuiRouteModule.scala",
    "content": "package demo.routes\n\nimport demo.components.semanticui._\nimport demo.pages.SuiPage\nimport japgolly.scalajs.react.extra.router.RouterConfigDsl\nimport japgolly.scalajs.react.vdom.html_<^._\n\nobject SuiRouteModule {\n  case object Info extends LeftRoute(\"Info\", \"info\", () => SuiInfo())\n\n  case object Button extends LeftRoute(\"Button\", \"button\", () => SuiButtonDemo())\n\n  case object Container extends LeftRoute(\"Container\", \"container\", () => SuiContainerDemo())\n\n  case object Divider extends LeftRoute(\"Divider\", \"divider\", () => SuiDividerDemo())\n\n  case object Flag extends LeftRoute(\"Flag\", \"flag\", () => SuiFlagDemo())\n\n  case object Header extends LeftRoute(\"Header\", \"header\", () => SuiHeaderDemo())\n\n  case object Icon extends LeftRoute(\"Icon\", \"icon\", () => SuiIconDemo())\n\n  case object Input extends LeftRoute(\"Input\", \"input\", () => SuiInputDemo())\n\n  case object SuiList extends LeftRoute(\"List\", \"list\", () => SuiListDemo())\n\n  case object Grid extends LeftRoute(\"Grid\", \"grid\", () => SuiGridDemo())\n\n  val menu: List[LeftRoute] = List(\n    Info,\n    Button,\n    Container,\n    Divider,\n    Flag,\n    Header,\n    Icon,\n    Input,\n    SuiList,\n    Grid\n  )\n\n  val routes = RouterConfigDsl[LeftRoute].buildRule { dsl =>\n    import dsl._\n    menu\n      .map(i => staticRoute(i.route, i) ~> renderR(r => SuiPage(i, r)))\n      .reduce(_ | _)\n  }\n}\n"
  },
  {
    "path": "demo/src/main/scala/demo/util/SampleData.scala",
    "content": "package demo\npackage util\n\ncase class Person(_id: Int = 0,\n                  age: Int = 0,\n                  fname: String = \"\",\n                  lname: String = \"\",\n                  email: String = \"\",\n                  country: String = \"\")\n\nobject SampleData {\n\n  val people = List(\n    Person(fname = \"Joshua\", lname = \"Myers\", email = \"jmyers0@trellian.com\", country = \"France\"),\n    Person(fname = \"Gloria\",\n           lname = \"Porter\",\n           email = \"gporter1@hatena.ne.jp\",\n           country = \"Indonesia\"),\n    Person(fname = \"Joe\", lname = \"Elliott\", email = \"jelliott2@mediafire.com\", country = \"Brazil\"),\n    Person(fname = \"Larry\", lname = \"Henry\", email = \"lhenry3@goo.ne.jp\", country = \"Philippines\"),\n    Person(fname = \"Frances\", lname = \"Roberts\", email = \"froberts4@fema.gov\", country = \"Mexico\"),\n    Person(fname = \"Ashley\", lname = \"Turner\", email = \"aturner5@paypal.com\", country = \"Brazil\"),\n    Person(fname = \"Jeremy\", lname = \"Morris\", email = \"jmorris6@yale.edu\", country = \"China\"),\n    Person(fname = \"Todd\",\n           lname = \"Carter\",\n           email = \"tcarter7@printfriendly.com\",\n           country = \"Peru\"),\n    Person(fname = \"Antonio\", lname = \"Hart\", email = \"ahart8@webs.com\", country = \"Brazil\"),\n    Person(fname = \"Henry\", lname = \"Welch\", email = \"hwelch9@soup.io\", country = \"Paraguay\"),\n    Person(fname = \"Russell\", lname = \"Carr\", email = \"rcarra@unicef.org\", country = \"China\"),\n    Person(fname = \"Jean\", lname = \"Rivera\", email = \"jriverab@ebay.co.uk\", country = \"Bulgaria\"),\n    Person(fname = \"Sara\",\n           lname = \"Chavez\",\n           email = \"schavezc@goo.ne.jp\",\n           country = \"South Africa\"),\n    Person(fname = \"Gerald\",\n           lname = \"Arnold\",\n           email = \"garnoldd@mashable.com\",\n           country = \"Thailand\"),\n    Person(fname = \"Bruce\", lname = \"Rice\", email = \"bricee@webeden.co.uk\", country = \"China\"),\n    Person(fname = \"Barbara\",\n           lname = \"Parker\",\n           email = \"bparkerf@over-blog.com\",\n           country = \"China\"),\n    Person(fname = \"Philip\", lname = \"Griffin\", email = \"pgriffing@ebay.com\", country = \"China\"),\n    Person(fname = \"Adam\", lname = \"Mason\", email = \"amasonh@nature.com\", country = \"Pakistan\"),\n    Person(fname = \"Juan\",\n           lname = \"Johnston\",\n           email = \"jjohnstoni@mozilla.com\",\n           country = \"Tunisia\"),\n    Person(fname = \"Robin\", lname = \"Clark\", email = \"rclarkj@tmall.com\", country = \"Brazil\"),\n    Person(fname = \"Martha\",\n           lname = \"Bryant\",\n           email = \"mbryantk@photobucket.com\",\n           country = \"Chile\"),\n    Person(fname = \"Fred\",\n           lname = \"Carter\",\n           email = \"fcarterl@godaddy.com\",\n           country = \"Bangladesh\"),\n    Person(fname = \"Norma\", lname = \"Hughes\", email = \"nhughesm@free.fr\", country = \"Indonesia\"),\n    Person(fname = \"Cheryl\",\n           lname = \"Garcia\",\n           email = \"cgarcian@shinystat.com\",\n           country = \"Croatia\"),\n    Person(fname = \"Brenda\", lname = \"Hall\", email = \"bhallo@weather.com\", country = \"Russia\"),\n    Person(fname = \"Anthony\", lname = \"Lee\", email = \"aleep@amazon.co.jp\", country = \"Kenya\"),\n    Person(fname = \"Marie\", lname = \"Shaw\", email = \"mshawq@noaa.gov\", country = \"Philippines\"),\n    Person(fname = \"Terry\",\n           lname = \"Knight\",\n           email = \"tknightr@miitbeian.gov.cn\",\n           country = \"Brazil\"),\n    Person(fname = \"Todd\", lname = \"Murray\", email = \"tmurrays@yolasite.com\", country = \"Finland\"),\n    Person(fname = \"Sean\", lname = \"Hudson\", email = \"shudsont@berkeley.edu\", country = \"Peru\"),\n    Person(fname = \"Robert\",\n           lname = \"Garrett\",\n           email = \"rgarrettu@sbwire.com\",\n           country = \"Thailand\"),\n    Person(fname = \"Louis\", lname = \"Thomas\", email = \"lthomasv@php.net\", country = \"Philippines\"),\n    Person(fname = \"Stephanie\",\n           lname = \"Sanchez\",\n           email = \"ssanchezw@statcounter.com\",\n           country = \"Argentina\"),\n    Person(fname = \"James\", lname = \"Young\", email = \"jyoungx@spiegel.de\", country = \"Argentina\"),\n    Person(fname = \"Stephen\",\n           lname = \"Miller\",\n           email = \"smillery@webeden.co.uk\",\n           country = \"Russia\"),\n    Person(fname = \"Shirley\",\n           lname = \"Rodriguez\",\n           email = \"srodriguezz@weather.com\",\n           country = \"Philippines\"),\n    Person(fname = \"Daniel\",\n           lname = \"Rivera\",\n           email = \"drivera10@yolasite.com\",\n           country = \"Russia\"),\n    Person(fname = \"Steven\",\n           lname = \"Morrison\",\n           email = \"smorrison11@indiegogo.com\",\n           country = \"Indonesia\"),\n    Person(fname = \"Julia\",\n           lname = \"Gonzalez\",\n           email = \"jgonzalez12@homestead.com\",\n           country = \"Poland\"),\n    Person(fname = \"Randy\",\n           lname = \"Ramirez\",\n           email = \"rramirez13@answers.com\",\n           country = \"Hungary\"),\n    Person(fname = \"Jimmy\", lname = \"Hill\", email = \"jhill14@webmd.com\", country = \"China\"),\n    Person(fname = \"Robert\", lname = \"Reed\", email = \"rreed15@upenn.edu\", country = \"China\"),\n    Person(fname = \"Gerald\", lname = \"Burke\", email = \"gburke16@youku.com\", country = \"Nicaragua\"),\n    Person(fname = \"Dorothy\", lname = \"Moreno\", email = \"dmoreno17@ihg.com\", country = \"Indonesia\"),\n    Person(fname = \"Roger\",\n           lname = \"Franklin\",\n           email = \"rfranklin18@chronoengine.com\",\n           country = \"Sweden\"),\n    Person(fname = \"Billy\",\n           lname = \"Wilson\",\n           email = \"bwilson19@instagram.com\",\n           country = \"Philippines\"),\n    Person(fname = \"Anna\",\n           lname = \"Warren\",\n           email = \"awarren1a@shutterfly.com\",\n           country = \"Poland\"),\n    Person(fname = \"Brandon\",\n           lname = \"Lawson\",\n           email = \"blawson1b@squarespace.com\",\n           country = \"Libya\"),\n    Person(fname = \"Paula\",\n           lname = \"Gonzales\",\n           email = \"pgonzales1c@blogs.com\",\n           country = \"Norway\"),\n    Person(fname = \"Judith\",\n           lname = \"Hamilton\",\n           email = \"jhamilton1d@drupal.org\",\n           country = \"Madagascar\"),\n    Person(fname = \"Jonathan\",\n           lname = \"Pierce\",\n           email = \"jpierce1e@msu.edu\",\n           country = \"Tajikistan\"),\n    Person(fname = \"Carlos\",\n           lname = \"Carpenter\",\n           email = \"ccarpenter1f@google.de\",\n           country = \"Senegal\"),\n    Person(fname = \"Carolyn\", lname = \"Dean\", email = \"cdean1g@examiner.com\", country = \"Brazil\"),\n    Person(fname = \"Betty\", lname = \"Harper\", email = \"bharper1h@oakley.com\", country = \"Russia\"),\n    Person(fname = \"Margaret\",\n           lname = \"Lewis\",\n           email = \"mlewis1i@cbsnews.com\",\n           country = \"Finland\"),\n    Person(fname = \"Jean\",\n           lname = \"Ellis\",\n           email = \"jellis1j@livejournal.com\",\n           country = \"Bulgaria\"),\n    Person(fname = \"Janet\", lname = \"Hunt\", email = \"jhunt1k@rediff.com\", country = \"Indonesia\"),\n    Person(fname = \"Amy\", lname = \"Burns\", email = \"aburns1l@fda.gov\", country = \"Tunisia\"),\n    Person(fname = \"Nicole\",\n           lname = \"Fowler\",\n           email = \"nfowler1m@yellowpages.com\",\n           country = \"Indonesia\"),\n    Person(fname = \"Kelly\", lname = \"Rice\", email = \"krice1n@reference.com\", country = \"Thailand\"),\n    Person(fname = \"Bobby\", lname = \"Ramos\", email = \"bramos1o@ask.com\", country = \"Pakistan\"),\n    Person(fname = \"Timothy\", lname = \"Spencer\", email = \"tspencer1p@51.la\", country = \"Ireland\"),\n    Person(fname = \"Brandon\", lname = \"Stewart\", email = \"bstewart1q@ed.gov\", country = \"Brazil\"),\n    Person(fname = \"Janet\", lname = \"Coleman\", email = \"jcoleman1r@amazon.de\", country = \"Poland\"),\n    Person(fname = \"Terry\", lname = \"Medina\", email = \"tmedina1s@usnews.com\", country = \"Brazil\"),\n    Person(fname = \"David\", lname = \"Rivera\", email = \"drivera1t@joomla.org\", country = \"Poland\"),\n    Person(fname = \"Amy\", lname = \"Lee\", email = \"alee1u@reddit.com\", country = \"China\"),\n    Person(fname = \"Brandon\",\n           lname = \"Sullivan\",\n           email = \"bsullivan1v@newsvine.com\",\n           country = \"Russia\"),\n    Person(fname = \"Charles\",\n           lname = \"Rivera\",\n           email = \"crivera1w@sitemeter.com\",\n           country = \"Portugal\"),\n    Person(fname = \"Henry\", lname = \"Moreno\", email = \"hmoreno1x@vkontakte.ru\", country = \"Russia\"),\n    Person(fname = \"Janet\",\n           lname = \"Mason\",\n           email = \"jmason1y@ycombinator.com\",\n           country = \"Afghanistan\"),\n    Person(fname = \"Judy\",\n           lname = \"Porter\",\n           email = \"jporter1z@mysql.com\",\n           country = \"Netherlands\"),\n    Person(fname = \"Bruce\", lname = \"Diaz\", email = \"bdiaz20@hp.com\", country = \"Indonesia\"),\n    Person(fname = \"Russell\",\n           lname = \"Fields\",\n           email = \"rfields21@livejournal.com\",\n           country = \"Indonesia\"),\n    Person(fname = \"Jose\",\n           lname = \"Wagner\",\n           email = \"jwagner22@fastcompany.com\",\n           country = \"Czech Republic\"),\n    Person(fname = \"Joyce\", lname = \"Wells\", email = \"jwells23@issuu.com\", country = \"Indonesia\"),\n    Person(fname = \"Debra\", lname = \"Sims\", email = \"dsims24@nps.gov\", country = \"France\"),\n    Person(fname = \"Lois\",\n           lname = \"Evans\",\n           email = \"levans25@princeton.edu\",\n           country = \"Venezuela\"),\n    Person(fname = \"Juan\", lname = \"Hart\", email = \"jhart26@ibm.com\", country = \"China\"),\n    Person(fname = \"Joe\", lname = \"Ruiz\", email = \"jruiz27@a8.net\", country = \"Vietnam\"),\n    Person(fname = \"Nicole\",\n           lname = \"Powell\",\n           email = \"npowell28@reddit.com\",\n           country = \"Indonesia\"),\n    Person(fname = \"Sandra\",\n           lname = \"Elliott\",\n           email = \"selliott29@answers.com\",\n           country = \"Indonesia\"),\n    Person(fname = \"Ernest\",\n           lname = \"West\",\n           email = \"ewest2a@ehow.com\",\n           country = \"Czech Republic\"),\n    Person(fname = \"Philip\", lname = \"Garrett\", email = \"pgarrett2b@nhs.uk\", country = \"France\"),\n    Person(fname = \"Tammy\", lname = \"Jenkins\", email = \"tjenkins2c@taobao.com\", country = \"Russia\"),\n    Person(fname = \"Andrew\", lname = \"Murphy\", email = \"amurphy2d@imdb.com\", country = \"Indonesia\"),\n    Person(fname = \"Melissa\",\n           lname = \"Campbell\",\n           email = \"mcampbell2e@shinystat.com\",\n           country = \"China\"),\n    Person(fname = \"Catherine\",\n           lname = \"Nichols\",\n           email = \"cnichols2f@walmart.com\",\n           country = \"Nigeria\"),\n    Person(fname = \"Brandon\",\n           lname = \"Black\",\n           email = \"bblack2g@cnet.com\",\n           country = \"Netherlands\"),\n    Person(fname = \"Louise\", lname = \"Woods\", email = \"lwoods2h@globo.com\", country = \"China\"),\n    Person(fname = \"Benjamin\", lname = \"Kelly\", email = \"bkelly2i@amazon.co.uk\", country = \"China\"),\n    Person(fname = \"Carolyn\",\n           lname = \"Powell\",\n           email = \"cpowell2j@mozilla.com\",\n           country = \"Portugal\"),\n    Person(fname = \"Lillian\",\n           lname = \"Perkins\",\n           email = \"lperkins2k@sakura.ne.jp\",\n           country = \"Slovenia\"),\n    Person(fname = \"Patrick\", lname = \"Morales\", email = \"pmorales2l@intel.com\", country = \"China\"),\n    Person(fname = \"Thomas\",\n           lname = \"Kelley\",\n           email = \"tkelley2m@webnode.com\",\n           country = \"Ukraine\"),\n    Person(fname = \"James\", lname = \"Smith\", email = \"jsmith2n@google.com.hk\", country = \"Kenya\"),\n    Person(fname = \"Diana\",\n           lname = \"Willis\",\n           email = \"dwillis2o@theguardian.com\",\n           country = \"Thailand\"),\n    Person(fname = \"Marie\", lname = \"Simmons\", email = \"msimmons2p@msn.com\", country = \"Brazil\"),\n    Person(fname = \"Samuel\",\n           lname = \"Brown\",\n           email = \"sbrown2q@geocities.jp\",\n           country = \"United Kingdom\"),\n    Person(fname = \"Carlos\",\n           lname = \"Chapman\",\n           email = \"cchapman2r@columbia.edu\",\n           country = \"Indonesia\")\n  )\n\n  val peopleWithAge = List(\n    Person(_id = 1,\n           fname = \"Catherine\",\n           lname = \"Bennett\",\n           age = 81,\n           email = \"cbennett0@phoca.cz\",\n           country = \"Czech Republic\"),\n    Person(_id = 2,\n           fname = \"Johnny\",\n           lname = \"Fields\",\n           age = 26,\n           email = \"jfields1@noaa.gov\",\n           country = \"Indonesia\"),\n    Person(_id = 3,\n           fname = \"Ernest\",\n           lname = \"Smith\",\n           age = 65,\n           email = \"esmith2@last.fm\",\n           country = \"Poland\"),\n    Person(_id = 4,\n           fname = \"Judith\",\n           lname = \"Peterson\",\n           age = 51,\n           email = \"jpeterson3@msn.com\",\n           country = \"Indonesia\"),\n    Person(_id = 5,\n           fname = \"Norma\",\n           lname = \"Carroll\",\n           age = 76,\n           email = \"ncarroll4@mapquest.com\",\n           country = \"China\"),\n    Person(_id = 6,\n           fname = \"Kathryn\",\n           lname = \"Thompson\",\n           age = 82,\n           email = \"kthompson5@bravesites.com\",\n           country = \"China\"),\n    Person(_id = 7,\n           fname = \"John\",\n           lname = \"Warren\",\n           age = 52,\n           email = \"jwarren6@cbsnews.com\",\n           country = \"Portugal\"),\n    Person(_id = 8,\n           fname = \"Adam\",\n           lname = \"Mitchell\",\n           age = 13,\n           email = \"amitchell7@baidu.com\",\n           country = \"Russia\"),\n    Person(_id = 9,\n           fname = \"Wanda\",\n           lname = \"Watson\",\n           age = 65,\n           email = \"wwatson8@odnoklassniki.ru\",\n           country = \"Iran\"),\n    Person(_id = 10,\n           fname = \"Catherine\",\n           lname = \"Rivera\",\n           age = 44,\n           email = \"crivera9@umn.edu\",\n           country = \"Russia\"),\n    Person(_id = 11,\n           fname = \"Irene\",\n           lname = \"Gonzalez\",\n           age = 70,\n           email = \"igonzaleza@behance.net\",\n           country = \"Croatia\"),\n    Person(_id = 12,\n           fname = \"Ryan\",\n           lname = \"Larson\",\n           age = 94,\n           email = \"rlarsonb@hao123.com\",\n           country = \"China\"),\n    Person(_id = 13,\n           fname = \"David\",\n           lname = \"Sims\",\n           age = 13,\n           email = \"dsimsc@accuweather.com\",\n           country = \"Malaysia\"),\n    Person(_id = 14,\n           fname = \"Heather\",\n           lname = \"Turner\",\n           age = 18,\n           email = \"hturnerd@msu.edu\",\n           country = \"Chile\"),\n    Person(_id = 15,\n           fname = \"Alice\",\n           lname = \"Moreno\",\n           age = 100,\n           email = \"amorenoe@jiathis.com\",\n           country = \"China\"),\n    Person(_id = 16,\n           fname = \"Karen\",\n           lname = \"Howard\",\n           age = 78,\n           email = \"khowardf@parallels.com\",\n           country = \"Austria\"),\n    Person(_id = 17,\n           fname = \"Paula\",\n           lname = \"Lopez\",\n           age = 67,\n           email = \"plopezg@google.de\",\n           country = \"Poland\"),\n    Person(_id = 18,\n           fname = \"Helen\",\n           lname = \"Warren\",\n           age = 14,\n           email = \"hwarrenh@icq.com\",\n           country = \"Ivory Coast\"),\n    Person(_id = 19,\n           fname = \"Kathryn\",\n           lname = \"Mcdonald\",\n           age = 78,\n           email = \"kmcdonaldi@ucsd.edu\",\n           country = \"China\"),\n    Person(_id = 20,\n           fname = \"Jimmy\",\n           lname = \"Morris\",\n           age = 9,\n           email = \"jmorrisj@hatena.ne.jp\",\n           country = \"Vietnam\"),\n    Person(_id = 21,\n           fname = \"Johnny\",\n           lname = \"Burton\",\n           age = 47,\n           email = \"jburtonk@stumbleupon.com\",\n           country = \"China\"),\n    Person(_id = 22,\n           fname = \"Brandon\",\n           lname = \"Alvarez\",\n           age = 44,\n           email = \"balvarezl@blogspot.com\",\n           country = \"Greece\"),\n    Person(_id = 23,\n           fname = \"Alice\",\n           lname = \"Lawrence\",\n           age = 16,\n           email = \"alawrencem@parallels.com\",\n           country = \"China\"),\n    Person(_id = 24,\n           fname = \"Philip\",\n           lname = \"Gonzalez\",\n           age = 99,\n           email = \"pgonzalezn@discovery.com\",\n           country = \"Portugal\"),\n    Person(_id = 25,\n           fname = \"Ernest\",\n           lname = \"Campbell\",\n           age = 70,\n           email = \"ecampbello@amazon.de\",\n           country = \"Sweden\"),\n    Person(_id = 26,\n           fname = \"Martin\",\n           lname = \"Wood\",\n           age = 73,\n           email = \"mwoodp@cisco.com\",\n           country = \"Indonesia\"),\n    Person(_id = 27,\n           fname = \"Lois\",\n           lname = \"Bryant\",\n           age = 69,\n           email = \"lbryantq@diigo.com\",\n           country = \"Sweden\"),\n    Person(_id = 28,\n           fname = \"Sharon\",\n           lname = \"Freeman\",\n           age = 5,\n           email = \"sfreemanr@etsy.com\",\n           country = \"Russia\"),\n    Person(_id = 29,\n           fname = \"Diane\",\n           lname = \"Lawson\",\n           age = 44,\n           email = \"dlawsons@amazonaws.com\",\n           country = \"China\"),\n    Person(_id = 30,\n           fname = \"Alice\",\n           lname = \"Fields\",\n           age = 47,\n           email = \"afieldst@addthis.com\",\n           country = \"Portugal\"),\n    Person(_id = 31,\n           fname = \"Alice\",\n           lname = \"Reyes\",\n           age = 39,\n           email = \"areyesu@tiny.cc\",\n           country = \"China\"),\n    Person(_id = 32,\n           fname = \"Margaret\",\n           lname = \"James\",\n           age = 73,\n           email = \"mjamesv@sitemeter.com\",\n           country = \"Indonesia\"),\n    Person(_id = 33,\n           fname = \"Martha\",\n           lname = \"Robinson\",\n           age = 78,\n           email = \"mrobinsonw@usda.gov\",\n           country = \"Poland\"),\n    Person(_id = 34,\n           fname = \"Alice\",\n           lname = \"Lawson\",\n           age = 75,\n           email = \"alawsonx@tamu.edu\",\n           country = \"Canada\"),\n    Person(_id = 35,\n           fname = \"Bruce\",\n           lname = \"Chavez\",\n           age = 57,\n           email = \"bchavezy@tiny.cc\",\n           country = \"China\"),\n    Person(_id = 36,\n           fname = \"Sara\",\n           lname = \"Kelly\",\n           age = 66,\n           email = \"skellyz@issuu.com\",\n           country = \"Canada\"),\n    Person(_id = 37,\n           fname = \"Carol\",\n           lname = \"Robertson\",\n           age = 78,\n           email = \"crobertson10@spotify.com\",\n           country = \"Indonesia\"),\n    Person(_id = 38,\n           fname = \"Brenda\",\n           lname = \"Hamilton\",\n           age = 14,\n           email = \"bhamilton11@wired.com\",\n           country = \"Thailand\"),\n    Person(_id = 39,\n           fname = \"Harold\",\n           lname = \"Patterson\",\n           age = 35,\n           email = \"hpatterson12@themeforest.net\",\n           country = \"Armenia\"),\n    Person(_id = 40,\n           fname = \"Ryan\",\n           lname = \"Lopez\",\n           age = 68,\n           email = \"rlopez13@lycos.com\",\n           country = \"China\"),\n    Person(_id = 41,\n           fname = \"Ralph\",\n           lname = \"Russell\",\n           age = 97,\n           email = \"rrussell14@marketwatch.com\",\n           country = \"Indonesia\"),\n    Person(_id = 42,\n           fname = \"Lisa\",\n           lname = \"Armstrong\",\n           age = 13,\n           email = \"larmstrong15@fc2.com\",\n           country = \"Palestinian Territory\"),\n    Person(_id = 43,\n           fname = \"Daniel\",\n           lname = \"Harris\",\n           age = 68,\n           email = \"dharris16@springer.com\",\n           country = \"Vietnam\"),\n    Person(_id = 44,\n           fname = \"Timothy\",\n           lname = \"Harper\",\n           age = 18,\n           email = \"tharper17@smh.com.au\",\n           country = \"Poland\"),\n    Person(_id = 45,\n           fname = \"Jerry\",\n           lname = \"Weaver\",\n           age = 56,\n           email = \"jweaver18@ted.com\",\n           country = \"Peru\"),\n    Person(_id = 46,\n           fname = \"Mary\",\n           lname = \"Williamson\",\n           age = 73,\n           email = \"mwilliamson19@google.ca\",\n           country = \"China\"),\n    Person(_id = 47,\n           fname = \"Donald\",\n           lname = \"Chapman\",\n           age = 40,\n           email = \"dchapman1a@ed.gov\",\n           country = \"Brazil\"),\n    Person(_id = 48,\n           fname = \"Randy\",\n           lname = \"Mccoy\",\n           age = 95,\n           email = \"rmccoy1b@51.la\",\n           country = \"China\"),\n    Person(_id = 49,\n           fname = \"Stephanie\",\n           lname = \"Bennett\",\n           age = 43,\n           email = \"sbennett1c@google.es\",\n           country = \"Greece\"),\n    Person(_id = 50,\n           fname = \"Mildred\",\n           lname = \"Moore\",\n           age = 67,\n           email = \"mmoore1d@washingtonpost.com\",\n           country = \"Indonesia\"),\n    Person(_id = 51,\n           fname = \"Lisa\",\n           lname = \"George\",\n           age = 70,\n           email = \"lgeorge1e@geocities.com\",\n           country = \"Czech Republic\"),\n    Person(_id = 52,\n           fname = \"Emily\",\n           lname = \"Myers\",\n           age = 7,\n           email = \"emyers1f@bigcartel.com\",\n           country = \"China\"),\n    Person(_id = 53,\n           fname = \"Andrew\",\n           lname = \"Wilson\",\n           age = 42,\n           email = \"awilson1g@answers.com\",\n           country = \"Croatia\"),\n    Person(_id = 54,\n           fname = \"Alice\",\n           lname = \"Morris\",\n           age = 29,\n           email = \"amorris1h@jimdo.com\",\n           country = \"Somalia\"),\n    Person(_id = 55,\n           fname = \"Roger\",\n           lname = \"Carroll\",\n           age = 37,\n           email = \"rcarroll1i@wiley.com\",\n           country = \"New Caledonia\"),\n    Person(_id = 56,\n           fname = \"Gerald\",\n           lname = \"Parker\",\n           age = 74,\n           email = \"gparker1j@symantec.com\",\n           country = \"China\"),\n    Person(_id = 57,\n           fname = \"Alan\",\n           lname = \"Warren\",\n           age = 27,\n           email = \"awarren1k@com.com\",\n           country = \"China\"),\n    Person(_id = 58,\n           fname = \"Kelly\",\n           lname = \"Morris\",\n           age = 84,\n           email = \"kmorris1l@i2i.jp\",\n           country = \"Iran\"),\n    Person(_id = 59,\n           fname = \"Joe\",\n           lname = \"Green\",\n           age = 56,\n           email = \"jgreen1m@slate.com\",\n           country = \"Guatemala\"),\n    Person(_id = 60,\n           fname = \"Cheryl\",\n           lname = \"Vasquez\",\n           age = 92,\n           email = \"cvasquez1n@sfgate.com\",\n           country = \"Tunisia\"),\n    Person(_id = 61,\n           fname = \"Jeffrey\",\n           lname = \"Carpenter\",\n           age = 4,\n           email = \"jcarpenter1o@squarespace.com\",\n           country = \"China\"),\n    Person(_id = 62,\n           fname = \"Frances\",\n           lname = \"Palmer\",\n           age = 42,\n           email = \"fpalmer1p@uiuc.edu\",\n           country = \"Philippines\"),\n    Person(_id = 63,\n           fname = \"Roger\",\n           lname = \"Bryant\",\n           age = 47,\n           email = \"rbryant1q@oakley.com\",\n           country = \"Finland\"),\n    Person(_id = 64,\n           fname = \"Juan\",\n           lname = \"Hernandez\",\n           age = 64,\n           email = \"jhernandez1r@sogou.com\",\n           country = \"Sweden\"),\n    Person(_id = 65,\n           fname = \"Bruce\",\n           lname = \"Stewart\",\n           age = 94,\n           email = \"bstewart1s@constantcontact.com\",\n           country = \"Japan\"),\n    Person(_id = 66,\n           fname = \"Fred\",\n           lname = \"Hunter\",\n           age = 81,\n           email = \"fhunter1t@diigo.com\",\n           country = \"China\"),\n    Person(_id = 67,\n           fname = \"Ernest\",\n           lname = \"Henderson\",\n           age = 64,\n           email = \"ehenderson1u@admin.ch\",\n           country = \"Argentina\"),\n    Person(_id = 68,\n           fname = \"Anne\",\n           lname = \"Martin\",\n           age = 11,\n           email = \"amartin1v@godaddy.com\",\n           country = \"China\"),\n    Person(_id = 69,\n           fname = \"Roger\",\n           lname = \"Washington\",\n           age = 50,\n           email = \"rwashington1w@naver.com\",\n           country = \"China\"),\n    Person(_id = 70,\n           fname = \"Mildred\",\n           lname = \"Andrews\",\n           age = 64,\n           email = \"mandrews1x@sciencedaily.com\",\n           country = \"Portugal\"),\n    Person(_id = 71,\n           fname = \"Susan\",\n           lname = \"Martin\",\n           age = 82,\n           email = \"smartin1y@yahoo.com\",\n           country = \"Aland Islands\"),\n    Person(_id = 72,\n           fname = \"Debra\",\n           lname = \"Ford\",\n           age = 9,\n           email = \"dford1z@senate.gov\",\n           country = \"China\"),\n    Person(_id = 73,\n           fname = \"Shawn\",\n           lname = \"Nguyen\",\n           age = 16,\n           email = \"snguyen20@usgs.gov\",\n           country = \"Costa Rica\"),\n    Person(_id = 74,\n           fname = \"Jose\",\n           lname = \"Jordan\",\n           age = 74,\n           email = \"jjordan21@unblog.fr\",\n           country = \"Colombia\"),\n    Person(_id = 75,\n           fname = \"Amy\",\n           lname = \"Bell\",\n           age = 71,\n           email = \"abell22@networksolutions.com\",\n           country = \"Yemen\"),\n    Person(_id = 76,\n           fname = \"Patrick\",\n           lname = \"Hansen\",\n           age = 45,\n           email = \"phansen23@slashdot.org\",\n           country = \"China\"),\n    Person(_id = 77,\n           fname = \"Anna\",\n           lname = \"Olson\",\n           age = 26,\n           email = \"aolson24@washington.edu\",\n           country = \"Mongolia\"),\n    Person(_id = 78,\n           fname = \"Eugene\",\n           lname = \"Ruiz\",\n           age = 58,\n           email = \"eruiz25@icio.us\",\n           country = \"United States\"),\n    Person(_id = 79,\n           fname = \"Catherine\",\n           lname = \"Lynch\",\n           age = 13,\n           email = \"clynch26@bloglines.com\",\n           country = \"China\"),\n    Person(_id = 80,\n           fname = \"Kimberly\",\n           lname = \"Hernandez\",\n           age = 65,\n           email = \"khernandez27@hatena.ne.jp\",\n           country = \"Albania\"),\n    Person(_id = 81,\n           fname = \"Heather\",\n           lname = \"Jackson\",\n           age = 95,\n           email = \"hjackson28@businessweek.com\",\n           country = \"China\"),\n    Person(_id = 82,\n           fname = \"Joshua\",\n           lname = \"Wheeler\",\n           age = 20,\n           email = \"jwheeler29@auda.org.au\",\n           country = \"China\"),\n    Person(_id = 83,\n           fname = \"Joseph\",\n           lname = \"Hayes\",\n           age = 87,\n           email = \"jhayes2a@ovh.net\",\n           country = \"Albania\"),\n    Person(_id = 84,\n           fname = \"Maria\",\n           lname = \"Robinson\",\n           age = 43,\n           email = \"mrobinson2b@sohu.com\",\n           country = \"Botswana\"),\n    Person(_id = 85,\n           fname = \"Carl\",\n           lname = \"Alvarez\",\n           age = 70,\n           email = \"calvarez2c@weebly.com\",\n           country = \"China\"),\n    Person(_id = 86,\n           fname = \"Doris\",\n           lname = \"Young\",\n           age = 15,\n           email = \"dyoung2d@studiopress.com\",\n           country = \"France\"),\n    Person(_id = 87,\n           fname = \"Johnny\",\n           lname = \"Anderson\",\n           age = 53,\n           email = \"janderson2e@weibo.com\",\n           country = \"China\"),\n    Person(_id = 88,\n           fname = \"Frank\",\n           lname = \"Day\",\n           age = 54,\n           email = \"fday2f@google.it\",\n           country = \"Indonesia\"),\n    Person(_id = 89,\n           fname = \"Donna\",\n           lname = \"Perez\",\n           age = 22,\n           email = \"dperez2g@cocolog-nifty.com\",\n           country = \"Indonesia\"),\n    Person(_id = 90,\n           fname = \"Nicholas\",\n           lname = \"Miller\",\n           age = 70,\n           email = \"nmiller2h@instagram.com\",\n           country = \"Peru\"),\n    Person(_id = 91,\n           fname = \"Rachel\",\n           lname = \"Reed\",\n           age = 81,\n           email = \"rreed2i@slate.com\",\n           country = \"Indonesia\"),\n    Person(_id = 92,\n           fname = \"Cheryl\",\n           lname = \"Berry\",\n           age = 31,\n           email = \"cberry2j@wired.com\",\n           country = \"Russia\"),\n    Person(_id = 93,\n           fname = \"Christopher\",\n           lname = \"Gray\",\n           age = 41,\n           email = \"cgray2k@quantcast.com\",\n           country = \"China\"),\n    Person(_id = 94,\n           fname = \"Lois\",\n           lname = \"Ryan\",\n           age = 63,\n           email = \"lryan2l@chronoengine.com\",\n           country = \"China\"),\n    Person(_id = 95,\n           fname = \"Earl\",\n           lname = \"Garza\",\n           age = 65,\n           email = \"egarza2m@apple.com\",\n           country = \"China\"),\n    Person(_id = 96,\n           fname = \"Martin\",\n           lname = \"Ferguson\",\n           age = 40,\n           email = \"mferguson2n@marketwatch.com\",\n           country = \"Taiwan\"),\n    Person(_id = 97,\n           fname = \"Janet\",\n           lname = \"Harris\",\n           age = 41,\n           email = \"jharris2o@pinterest.com\",\n           country = \"Hungary\"),\n    Person(_id = 98,\n           fname = \"Alice\",\n           lname = \"Powell\",\n           age = 48,\n           email = \"apowell2p@seesaa.net\",\n           country = \"Brazil\"),\n    Person(_id = 99,\n           fname = \"Kathy\",\n           lname = \"Wagner\",\n           age = 51,\n           email = \"kwagner2q@telegraph.co.uk\",\n           country = \"China\"),\n    Person(_id = 100,\n           fname = \"Debra\",\n           lname = \"Cooper\",\n           age = 17,\n           email = \"dcooper2r@smh.com.au\",\n           country = \"Indonesia\")\n  )\n}\n"
  },
  {
    "path": "demo/webpack.config.dev.js",
    "content": "'use strict';\n\nvar webpack = require('webpack');\nvar _ = require('lodash');\n\nmodule.exports = _.merge(\n    require('./scalajs.webpack.config'),\n    require('./webpack.config.shared'),\n    {\n        plugins: [\n            new webpack.DefinePlugin({\n                'process.env.NODE_ENV': JSON.stringify('development')\n            })\n        ],\n    });\n"
  },
  {
    "path": "demo/webpack.config.prod.js",
    "content": "'use strict';\n\nvar webpack = require('webpack');\nvar _ = require('lodash');\n\nmodule.exports = _.merge(\n    require('./scalajs.webpack.config'),\n    require('./webpack.config.shared'),\n    {\n        plugins: [\n            new webpack.optimize.UglifyJsPlugin({\n                compress: {\n                    warnings: false,\n                    screw_ie8: true,\n                    conditionals: true,\n                    unused: true,\n                    comparisons: true,\n                    sequences: true,\n                    dead_code: true,\n                    evaluate: true,\n                    if_return: true,\n                    join_vars: true\n                },\n                output: {\n                    comments: false\n                }\n            }),\n            new webpack.HashedModuleIdsPlugin(),\n            new webpack.DefinePlugin({\n                'process.env.NODE_ENV': JSON.stringify('production')\n            })\n        ]\n    });\n"
  },
  {
    "path": "demo/webpack.config.shared.js",
    "content": "'use strict';\n\nvar webpack = require('webpack');\n\nmodule.exports = {\n    plugins: [\n        new webpack.NoEmitOnErrorsPlugin(),\n    ],\n    module: {\n        rules: [\n            {\n                test: /\\.css$/,\n                loader: ['style-loader', 'css-loader']\n            }, {\n                test: /\\.(png|jpg|gif|svg|eot|ttf|woff|woff2)$/,\n                loader: 'url-loader',\n                options: {\n                    limit: 20000\n                }\n            }]\n    }\n};\n"
  },
  {
    "path": "demo/webpack.config.test.js",
    "content": "'use strict';\n\nvar webpack = require('webpack');\nvar _ = require('lodash');\n\nmodule.exports = _.merge(\n    require('./webpack.config.shared'),\n    {\n        plugins: [\n            new webpack.DefinePlugin({\n                'process.env.NODE_ENV': JSON.stringify('test')\n            })\n        ],\n    });\n"
  },
  {
    "path": "doc/CHANGELOG-0.1.md",
    "content": "# 0.1.0\n* [Material-ui](http://chandu0101.github.io/sjrc/#materialui/info)\n* [ReactListView](http://chandu0101.github.io/sjrc/#reactlistview/info)\n* [GoogleMap](http://chandu0101.github.io/sjrc/#googlemap/info)\n* [ReactTable](http://chandu0101.github.io/sjrc/#reacttable/info)\n* [ReactTagsInput](http://chandu0101.github.io/sjrc/#reacttagsinput/info)\n* [ReactSelect](http://chandu0101.github.io/sjrc/#reactselect/info)\n* [ReactGeomIcons](http://chandu0101.github.io/sjrc/#reactgeomicons/info)\n"
  },
  {
    "path": "doc/CHANGELOG-1.0.md",
    "content": "# 1.0.0-M1\n* Completely reorganized the project to use sbt-scalajs-bundler\n* Incorporated code generator for material-ui, elemental-ui and semantic-ui, baselined to all their latest versions\n - Semantic \"0.68.5\", Elemental \"0.6.1\", Material \"0.18.1\"\n* React version \"15.5.4\"\n* ReactJS version 1.1.0!\n* ScalaJS version 0.6.20\n* Included an example project"
  },
  {
    "path": "doc/CHANGELOG_0.2.md",
    "content": "# 0.2.0\n* Ported to scalajs-react 0.10\n* Regenerated all material-ui, added heaps of new props and components.\n* Deleted bootstrap wrappers for now\n* Added wrapper for [Elemental UI](http://elemental-ui.com/) - Roberto Leibman\n* [TimerMixin](https://github.com/chandu0101/scalajs-react-components/blob/master/core/src/main/scala/chandu0101/scalajs/react/components/mixins/TimerMixin.scala)\n* Corrected MuiRadioButtonGroup onChange property type - @enijns\n* [ReactInfinite](http://chandu0101.github.io/sjrc/#reactinfinite/info)\n* [Spinner](http://chandu0101.github.io/sjrc/#spinner/info)"
  },
  {
    "path": "doc/CHANGELOG_0.3.md",
    "content": "# 0.3.0\n* Remove accidental dependency upon utest for production code\n* Bumped scalajs-react to 0.10.3\n* Made MuiSpacings and MuiPalette easier to use to specify theme \n* Added Svg icons "
  },
  {
    "path": "doc/CHANGELOG_0.4.md",
    "content": "# 0.4.1\n* Upgraded to Scala-js 0.6.7 since it has important fixes\n* Added a bunch of props to MuiIconButton\n\n# 0.4.0\n* Material-ui bumped from 0.13 to 0.14.4\n* Bumped Scala-js to 0.6.6 to avoid some implicit resolution issues\n* Bumped scalacss dependency\n* Rewrote React Select wrapper, added Async support\n* Added React Slick wrapper\n* Move inference driving implicits to `chandu0101.scalajs.react.components.Implicits`. See `README` for more info\n* Moved `CssProperties` to `chandu0101.scalajs.react.components` as it isnt specific to material-ui\n\n* Big changes in Material-ui 0.14\n  * Removed old menus from default imports, so it's not necessary to override anymore\n  * Changed names of derived enum classes from Component/prop to a name derived from its values.\n    For example `labelPosition: js.UndefOr[MuiCheckboxLabelPosition]` => `labelPosition: js.UndefOr[LeftRight]`\n  * Fixed a bug/common warning with one child wrapped in a js array\n"
  },
  {
    "path": "doc/CHANGELOG_0.5.md",
    "content": "# 0.5.0\n* Bumped to react 0.15.3\n* Material-ui bumped from 0.14.4 to 0.15.2\n* Bumped Scala-js to 0.6.11\n* Bumped Elemental-ui to work with new react, not really tested\n\n* Changes in Material-ui 0.15\n  * There are many small changes in the library as they try to make the API more sane and more composable.\n    It's recommended to read through the [Changelog](https://github.com/callemall/material-ui/blob/master/CHANGELOG.md)\n  * Javascript imports changed (also described in changelog)\n  * Now need to use `MuiThemeProvider` instead of `ThemeInstaller.installMuiContext()`\n  * Added a demo for themes to showcase how to use and adjust current theme\n  * Now some of the components are generic, for example `MuiDropDownMenu[T]`.\n    This means that you can get back sane things in callbacks."
  },
  {
    "path": "doc/CHANGELOG_0.6.md",
    "content": "# 0.6.0\n* Cross built for Scala 2.12 \n* Bumped to react 0.15.4.2\n* Bumped Scala-js to 0.6.14\n* Material-ui bumped to 0.17.0. \n - A lot of the Event handlers changed type, they are all now React*EventI, just to signal that it was never well thought out which type they had."
  },
  {
    "path": "doc/CHANGELOG_0.7.md",
    "content": "# 0.7.0\n\n- Upgraded to scalajs-react 1.0.1. This also involves bumping scala-js to 0.6.17. Usage for most components\n  should be very similar to how it was previously, however callbacks etc. now often take a VdomNode/VdomElement\n  rather than ReactNode/ReactElement.\n\n"
  },
  {
    "path": "doc/CHANGELOG_0.8.md",
    "content": "# 0.8.0\n- scalajs-react 1.1.0\n- new component: react-split-pane (thanks to @aatoni)\n- better ReactTable (thanks @rleibman)"
  },
  {
    "path": "doc/CONTRIBUTE.md",
    "content": "#Contribute\n\n* There are no global rules for this project, follow whatever works for you.\n\n* If you're working on new component please create an [issue](https://github.com/chandu0101/scalajs-react-components/issues), so that we can minimize duplicate works, and you may find other awesome contributors.\n\n* If you want to create a wrapper for third party components (js/jsx world) then follow this tutorial [InteropWithThirdparty](https://github.com/chandu0101/scalajs-react-components/tree/master/doc/InteropWithThirdParty.md)\n\n* To create a demo for your new component(like adding routes /pages /deps/..) check this [changelist](https://github.com/chandu0101/scalajs-react-components/commit/8619624d6de6be91dca7f6761c8ff48199084cf6) as an example.\n\n* That's all , have fun , happy coding :)\n\n* Keep in mind that some code is auto-generated (material-ui for now). File bug reports instead of PR for those"
  },
  {
    "path": "doc/InteropWithThirdParty.md",
    "content": "# Interop With Third Party Components\n\nIf you want to use a reactjs component in your scalajs-react project then you must define a wrapper for js component.\n\n## Example\n Let say we have a JS component , Name : AwesomeJSComp , props ..\n ```js\n   propTypes: {\n     numberOfLines: React.PropTypes.number.isRequired,\n     onPress: React.PropTypes.func, // function with zero args\n     suppressHighlighting: React.PropTypes.bool,\n     testID: React.PropTypes.string,\n   }\n\n   ```\n To create a wrapper first we must map js types to scala types\n\n ```scala\n   numberOfLines: Int,\n   onPress: js.UndefOr[() => Unit] = js.undefined,\n   suppressHighlighting: js.UndefOr[Bool] = js.undefined,\n   testID: js.UndefOr[String] = js.undefined\n ```\n make sure you have js.UndefOr[T]  for non required  fields.we also need a method which converts our scala fields to js.Object\n\n ```scala\n  def toJS = {\n   val p = js.Dynamic.literal()\n   p.updateDynamic(\"numberOfLines\")(numberOfLines)\n   onPress.foreach(v => p.updateDynamic(\"onPress\")(v))\n   suppressHighlighting.foreach(v => p.updateDynamic(\"suppressHighlighting\")(v))\n   testID.foreach(v => p.updateDynamic(\"testID\")(v))\n   p\n  }\n\n ```\n\n that's it, now we have all required bits , just composing bits is pending.lets do that\n\n ```scala\n\n case class AwesomeJSCompWrapper( numberOfLines: Int,\n                                   onPress: js.UndefOr[() => Unit] = js.undefined,\n                                   suppressHighlighting: js.UndefOr[Bool] = js.undefined,\n                                   testID: js.UndefOr[String] = js.undefined) {\n   def toJS = {\n     val p = js.Dynamic.literal()\n     p.updateDynamic(\"numberOfLines\")(numberOfLines)\n     onPress.foreach(v => p.updateDynamic(\"onPress\")(v))\n     suppressHighlighting.foreach(v => p.updateDynamic(\"suppressHighlighting\")(v))\n     testID.foreach(v => p.updateDynamic(\"testID\")(v))\n     p\n    }\n\n    def apply(children : ReactNode*) = {\n     val f = React.asInstanceOf[js.Dynamic].createFactory(js.Dynamic.global.AwesomeJSComp) // access real js component , make sure you wrap with createFactory (this is needed from 0.13 onwards)\n     f(toJS, children.toJsArray).asInstanceOf[ReactComponentU_]\n    }\n\n }\n\n ```\n\n hola you successfully created wrapper! :)\n\n To use this add original js comp source to jsDependencies in sbt build file/or what ever build tool you use.\n\n now you can use AwesomeJSCmpWrapper like a normal scalajs-react component\n\n ```scala\n\n  val component = ReactComponentB.static(\"Demo\",\n     <.div(\n      AwesomeJSCmpWrapper(numberOfLines = 3,testID = \"id\")()\n     )\n   ).build\n\n  ```\n\n## Wrapper Generator\n\n Manual wrapper creation is easy  but its a tedius task!\n\n To generate wrapper automatically go to following link and fill required fields then hit Generate Button.\n\nhttp://chandu0101.github.io/reactjs-scalajs/\n\n 1) Scala component name text field :\n    Enter you scala wrapper name(Example : AwesomeJSCmpWrapper)\n\n 2) Js component text field :\n    Enter full access path to js component (Example :  js.Dynamic.global.AwesomeJSComp)\n\n 3) WithChildren check box :\n    By default it is checked ,uncheck this if your js component doesn't allow children\n\n 4) JS component props textview :\n    Place your js comp props with ``,`` separated\n\n  ```js\n         numberOfLines: React.PropTypes.number.isRequired,\n         onPress: React.PropTypes.func,\n         suppressHighlighting: React.PropTypes.bool,\n         testID: React.PropTypes.string,\n  ```\n\n  Now click on Generate Button :)\n\n\n## Refs\n\n Some times we may want to call public(exposed) methods of mounted react component's , we use refs to achieve this\n\n Lets assume that our AwesomeJSComp has public method hideMe()\n\n JS World :\n\n ```js\n     // pseudo code\n    <div>\n     <AwesomeJSComp ref = \"awesomecomp\",..props > </AwesomeJSComp>\n    </div>\n\n    function test() {\n     this.refs.awesomecomp.hideMe()\n    }\n\n ```\n\n Scala World :\n\n To achieve same thing in scala world ,add a new field ref to our AwesomeJSCompWrapper and then create a facade\n  for public methods of AwesomeJSComp\n\n ```scala\n trait AwesomeJSCompWrapperM extends js.Object {\n   def hideMe() : Unit = js.native\n\n   ... more public methods\n }\n ```\n scala example :\n ```scala\n   class RB(t:BackendScope[_,_]) {\n      def test = {\n        val awesomeJSRef = Ref.toJS[AwesomeJSCompWrapperM](\"awesomescalajs\")(t) // get ref\n        if(awesomeJSRef.isDefined) awesomeJSRef.get.hideMe()\n      }\n    }\n    val C = ReactComponentB[Unit](\"RefsToThirdPartyCompDemo\")\n      .stateless\n      .backend(new RB(_))\n      .render((P,S,B) => {\n        div(\n          AwesomeJSCompWrapper(ref = \"awesomescalajs\",..props)()\n        )\n      })\n      .build\n\n ```\n\n##Real World Examples\n\n https://github.com/japgolly/scalajs-react/blob/master/core/src/main/scala/japgolly/scalajs/react/Addons.scala\n\n https://github.com/chandu0101/scalajs-react-components/tree/master/core/src/main/scala/chandu0101/scalajs/react/components/materialui\n\n https://github.com/chandu0101/scalajs-react-native\n\n\n\n \n"
  },
  {
    "path": "example/.scalafmt.conf",
    "content": "style = defaultWithAlign\n\ndanglingParentheses        = true\nindentOperator             = spray\nmaxColumn                  = 100\nproject.excludeFilters     = [\".*\\\\.sbt\"]\nrewrite.rules              = [RedundantBraces, RedundantParens, SortImports]\nspaces.inImportCurlyBraces = true\nunindentTopLevelOperators  = true\n"
  },
  {
    "path": "example/.travis.yml",
    "content": "language: scala\n\nscala:\n  - 2.12.2\n\njdk:\n  - oraclejdk8\n"
  },
  {
    "path": "example/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "example/NOTICE",
    "content": "Copyright 2017 rleibman\n"
  },
  {
    "path": "example/README.md",
    "content": "# example #\n\nWelcome to the reactjs-component example project!\n\nThis is a dead simple, standalone, \"hello world\" project that shows you how to get started with a\nscalajs-react-components project.\n\nSimply clone this project and run\n\nsbt\nfastOptJS::webpack\nfastOptJS::startWebpackDevServer\n\nFor a much bigger example of all the components, look at the demo project! \n\n## Contribution policy ##\n\nContributions via GitHub pull requests are gladly accepted from their original author. Along with\nany pull requests, please state that the contribution is your original work and that you license\nthe work to the project under the project's open source license. Whether or not you state this\nexplicitly, by submitting any copyrighted material via pull request, email, or other means you\nagree to license the material under the project's open source license and warrant that you have the\nlegal authority to do so.\n\n## License ##\n\nThis code is open source software licensed under the\n[Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0) license.\n"
  },
  {
    "path": "example/build.sbt",
    "content": "// *****************************************************************************\n// Projects\n// *****************************************************************************\n\nlazy val example =\n  project\n    .in(file(\".\"))\n    .enablePlugins(ScalaJSPlugin, ScalaJSBundlerPlugin)\n    .settings(settings)\n    .settings(\n      libraryDependencies ++= Seq(\n        \"com.github.japgolly.scalajs-react\" %%% \"core\"                     % \"1.0.1\",\n        \"com.github.japgolly.scalajs-react\" %%% \"extra\"                    % \"1.0.1\",\n        \"com.olvind\"                        %%% \"scalajs-react-components\" % \"1.0.+\"\n      )\n    )\n\n// *****************************************************************************\n// Settings\n// *****************************************************************************\n\nlazy val settings = commonSettings ++ bundlerSettings\n\nlazy val commonSettings =\n  Seq(\n    scalaVersion := \"2.12.2\",\n    organization := \"net.leibman\",\n    mappings.in(Compile, packageBin) += baseDirectory.in(ThisBuild).value / \"LICENSE\" -> \"LICENSE\",\n    scalacOptions ++= Seq(\n      \"-unchecked\",\n      \"-deprecation\",\n      \"-language:_\",\n      \"-target:jvm-1.8\",\n      \"-encoding\",\n      \"UTF-8\"\n    )\n  )\n\nlazy val SuiVersion   = \"0.68.5\"\nlazy val EuiVersion   = \"0.6.1\"\nlazy val MuiVersion   = \"0.18.1\"\nlazy val reactVersion = \"15.5.4\"\n\nlazy val bundlerSettings =\n  Seq(\n    version in webpack := \"2.6.1\",\n    version in installWebpackDevServer := \"2.4.5\",\n    scalaJSUseMainModuleInitializer := true,\n    scalaJSUseMainModuleInitializer.in(Test) := false,\n    artifactPath.in(Compile, fastOptJS) := ((crossTarget in (Compile, fastOptJS)).value /\n      ((moduleName in fastOptJS).value + \"-opt.js\")),\n    webpackResources :=\n      webpackResources.value +++\n        PathFinder(\n          Seq(\n            baseDirectory.value / \"index.html\"\n          )) ** \"*.*\",\n    webpackEmitSourceMaps := false,\n    enableReloadWorkflow := true,\n    useYarn := true,\n    npmDependencies.in(Compile) := Seq(\n      \"elemental\"                         -> EuiVersion,\n      \"highlight.js\"                      -> \"9.9.0\",\n      \"material-ui\"                       -> MuiVersion,\n      \"react\"                             -> reactVersion,\n      \"react-dom\"                         -> reactVersion,\n      \"react-addons-create-fragment\"      -> reactVersion,\n      \"react-addons-css-transition-group\" -> \"15.0.2\",\n      \"react-addons-pure-render-mixin\"    -> \"15.5.2\",\n      \"react-addons-transition-group\"     -> \"15.0.0\",\n      \"react-addons-update\"               -> \"15.5.2\",\n      \"react-geomicons\"                   -> \"2.1.0\",\n      \"react-infinite\"                    -> \"0.11.0\",\n      \"react-select\"                      -> \"1.0.0-rc.5\",\n      \"react-slick\"                       -> \"0.14.11\",\n      \"react-spinner\"                     -> \"0.2.7\",\n      \"react-tagsinput\"                   -> \"3.16.1\",\n      \"react-tap-event-plugin\"            -> \"2.0.1\",\n      \"semantic-ui-react\"                 -> SuiVersion,\n      \"svg-loader\"                        -> \"0.0.2\"\n    )\n  )\n"
  },
  {
    "path": "example/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>scalajs-react components demo</title>\n<style>\nhtml {\n\tfont-family: sans-serif;\n\t/* 1 */\n\t-ms-text-size-adjust: 100%;\n\t/* 2 */\n\t-webkit-text-size-adjust: 100%;\n\t/* 2 */\n}\n\nbody {\n\tmargin: 0;\n\tfont-size: 13px;\n\tline-height: 20px;\n}\n\na {\n\tcolor: red;\n\tbackground: transparent;\n\ttext-decoration: none;\n}\n/*body.pg-loading {*/\n/*overflow: hidden;*/\n/*}*/\n.pg-loading-screen {\n\tposition: fixed;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\ttop: 0;\n\tz-index: 1000000;\n\topacity: 1;\n\t/*background-color: #d35400;*/\n\tbackground-color: #F76350;\n\t-webkit-transition: background-color 0.4s ease-in-out 0s;\n\t-moz-transition: background-color 0.4s ease-in-out 0s;\n\t-ms-transition: background-color 0.4s ease-in-out 0s;\n\t-o-transition: background-color 0.4s ease-in-out 0s;\n\ttransition: background-color 0.4s ease-in-out 0s;\n}\n\n.spinner {\n\tmargin: 50px auto 0;\n\twidth: 70px;\n\ttext-align: center;\n}\n\n.spinner>div {\n\twidth: 18px;\n\theight: 18px;\n\tbackground-color: white;\n\tborder-radius: 100%;\n\tdisplay: inline-block;\n\t-webkit-animation: bouncedelay 1.4s infinite ease-in-out;\n\tanimation: bouncedelay 1.4s infinite ease-in-out;\n\t/* Prevent first frame from flickering when animation starts */\n\t-webkit-animation-fill-mode: both;\n\tanimation-fill-mode: both;\n}\n\n.spinner .bounce1 {\n\t-webkit-animation-delay: -0.32s;\n\tanimation-delay: -0.32s;\n}\n\n.spinner .bounce2 {\n\t-webkit-animation-delay: -0.16s;\n\tanimation-delay: -0.16s;\n}\n\n@\n-webkit-keyframes bouncedelay { 0%, 80%, 100% {\n\t-webkit-transform: scale(0.0)\n}\n\n40%\n{\n-webkit-transform\n:\n \nscale\n(1\n.0\n)\n \n}\n}\n@\nkeyframes bouncedelay { 0%, 80%, 100% {\n\ttransform: scale(0.0);\n\t-webkit-transform: scale(0.0);\n}\n\n40%\n{\ntransform\n:\n \nscale\n(1\n.0\n);\n\n                  \n-webkit-transform\n:\n \nscale\n(1\n.0\n);\n\n              \n}\n}\n.message {\n\ttext-align: center;\n\tmargin: 100px auto;\n\tcolor: #ffffff;\n\tfont-size: 18px;\n\tfont-weight: 500;\n}\n\nbody>#container {\n\tdisplay: none;\n}\n\nbody.pg-loaded>#container {\n\tdisplay: block;\n}\n\nhr {\n\tborder: none;\n\tborder-bottom: solid 1px #e0e0e0;\n\tmargin-top: 0;\n\tmargin-bottom: 18px;\t\n\tbox-sizing: content-box;\n\theight: 0;\n}\n</style>\n<link rel=\"stylesheet\" type=\"text/css\"\n\thref=\"https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.3.15/slick.css\" />\n<link rel=\"stylesheet\" type=\"text/css\"\n\thref=\"https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.4/semantic.css\" />\n<link rel=\"stylesheet\" type=\"text/css\"\n\thref=\"http://elemental-ui.com/site.css\" />\n \n </head>\n<body>\n\n\t<div id=\"container\"></div>\n\n\t<script type=\"text/javascript\">\n\t\tloadingElement = document.createElement(\"div\");\n\t\tloadingElement.className = \"pg-loading-screen\";\n\t\tloadingElement.innerHTML = \"<div class=\\\"message\\\">\"\n\t\t\t\t+ \"<blockquote>\\\"Why join the navy when you can be a pirate\\\" - Steve Jobs</blockquote>\"\n\t\t\t\t+ \"<div class=\\\"spinner\\\">\" + \"<div class=\\\"bounce1\\\"></div>\"\n\t\t\t\t+ \"<div class=\\\"bounce2\\\"></div>\"\n\t\t\t\t+ \"<div class=\\\"bounce3\\\"></div>\" + \"</div>\" + \"</div>\";\n\t\tdocument.body.appendChild(loadingElement);\n\t\tdocument.body.className += \" pg-loading\"\n\n\t</script>\n\t<script type=\"text/javascript\" src=\"example-opt-bundle.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "example/project/build.properties",
    "content": "sbt.version = 0.13.15\n"
  },
  {
    "path": "example/project/plugins.sbt",
    "content": "addSbtPlugin(\"org.scala-js\"  % \"sbt-scalajs\"         % \"0.6.17\")\naddSbtPlugin(\"ch.epfl.scala\" % \"sbt-scalajs-bundler\" % \"0.6.0\")\n"
  },
  {
    "path": "example/src/main/scala/HelloWorldApp.scala",
    "content": "package demo\n\nimport chandu0101.scalajs.react.components.ReactTapEventPlugin\nimport org.scalajs.dom\n\nimport scala.scalajs.js\nimport scala.scalajs.js.Dynamic.{global => g}\nimport scala.scalajs.js.JSApp\nimport japgolly.scalajs.react._\nimport japgolly.scalajs.react.vdom.html_<^._\nimport chandu0101.scalajs.react.components.elementalui.EuiButton\nimport chandu0101.scalajs.react.components.elementalui.ButtonType\n\nobject HelloWorldApp extends JSApp {\n\n  override def main(): Unit = {\n    // remove waiting page stuff\n    if (!js.isUndefined(g.loadingElement)) {\n      g.document.body.removeChild(g.loadingElement)\n      g.loadingElement = js.undefined\n      dom.document.body.className.replace(\"pg-loading\", \"\")\n      dom.document.body.className += \" pg-loaded\"\n    }\n\n    //todo: dev-server complains that we load several times?\n    ReactTapEventPlugin(js.undefined)\n//    ReactTapEventPlugin\n\n    val component =\n      ScalaComponent\n        .builder[Unit](\"component\")\n        .renderStatic(\n          <.div(^.padding := 100.px, EuiButton(`type` = ButtonType.primary)(\"Hello World!\"))\n        )\n        .build\n\n    component().renderIntoDOM(dom.document.getElementById(\"container\"))\n    ()\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/DomTypes.scala",
    "content": "package com.olvind\n\ncase object DomNode    extends DomType(\"\")\ncase object DomElement extends DomType(\"FromHtml\")\ncase object DomInput extends DomType(\"FromInput\") {\n\n  private val formMethodType =\n    com.olvind.Enum(CompName(\"Input\"), Seq(\"get\", \"post\"), \"FormMethodType\")\n  private val formTarget = com.olvind.Enum(CompName(\"Input\"),\n                                           Seq(\"_blank\", \"_self\", \"_parent\", \"_top\", \"framename\"),\n                                           \"FormTarget\")\n  private val inputAutoComplete =\n    com.olvind.Enum(CompName(\"Input\"), Seq(\"on\", \"off\"), \"AutoComplete\")\n  private val inputType = com.olvind.Enum(\n    CompName(\"Input\"),\n    Seq(\n      \"button\",\n      \"checkbox\",\n      \"color\",\n      \"date\",\n      \"datetime-local\",\n      \"email\",\n      \"file\",\n      \"hidden\",\n      \"image\",\n      \"month\",\n      \"number\",\n      \"password\",\n      \"radio\",\n      \"range\",\n      \"reset\",\n      \"search\",\n      \"submit\",\n      \"tel\",\n      \"text\",\n      \"time\",\n      \"url\",\n      \"week\"\n    ),\n    \"InputType\"\n  )\n  private val inputEncodingType = com.olvind.Enum(\n    CompName(\"Input\"),\n    Seq(\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"),\n    \"InputEncodingType\")\n\n  override val props = super.props ++\n    Seq(\n      ParsedProp(\n        PropName(\"accept\"),\n        baseType = Normal(\"String\"),\n        commentOpt = Some(\n          PropComment(\n            \"Specifies the types of files that the server accepts (only for type='file')\"))\n      ),\n      ParsedProp(PropName(\"alt\"),\n                 baseType = Normal(\"String\"),\n                 commentOpt = Some(\n                   PropComment(\"Specifies an alternate text for images (only for type='image')\"))),\n      ParsedProp(\n        PropName(\"autocomplete\"),\n        baseType = inputAutoComplete,\n        commentOpt =\n          Some(PropComment(\"Specifies whether an <input> element should have autocomplete enabled\"))\n      ),\n      ParsedProp(\n        PropName(\"autofocus\"),\n        baseType = Normal(\"Boolean\"),\n        commentOpt = Some(\n          PropComment(\n            \"Specifies that an <input> element should automatically get focus when the page loads\"))\n      ),\n      ParsedProp(\n        PropName(\"checked\"),\n        baseType = Normal(\"Boolean\"),\n        commentOpt = Some(PropComment(\n          \"Specifies that an <input> element should be pre-selected when the page loads (for type='checkbox' or type='radio')\"))\n      ),\n      ParsedProp(PropName(\"dirname\"),\n                 baseType = Normal(\"Boolean\"),\n                 commentOpt =\n                   Some(PropComment(\"Specifies that the text direction will be submitted\"))),\n      ParsedProp(PropName(\"disabled\"),\n                 baseType = Normal(\"Boolean\"),\n                 commentOpt =\n                   Some(PropComment(\"Specifies that an <input> element should be disabled\"))),\n      ParsedProp(PropName(\"form\"),\n                 baseType = Normal(\"String\"),\n                 commentOpt =\n                   Some(PropComment(\"Specifies one or more forms the <input> element belongs to\"))),\n      ParsedProp(\n        PropName(\"formaction\"),\n        baseType = Normal(\"String\"),\n        commentOpt = Some(PropComment(\n          \"Specifies the URL of the file that will process the input control when the form is submitted (for type='submit' and type='image')\"))\n      ),\n      ParsedProp(\n        PropName(\"formenctype\"),\n        baseType = inputEncodingType,\n        commentOpt = Some(PropComment(\n          \"Specifies how the form-data should be encoded when submitting it to the server (for type='submit' and type='image')\"))\n      ),\n      ParsedProp(\n        PropName(\"formmethod\"),\n        baseType = formMethodType,\n        commentOpt = Some(PropComment(\n          \"Defines the HTTP method for sending data to the action URL (for type='submit' and type='image')\"))\n      ),\n      ParsedProp(\n        PropName(\"formnovalidate\"),\n        baseType = Normal(\"Boolean\"),\n        commentOpt =\n          Some(PropComment(\"Defines that form elements should not be validated when submitted\"))\n      ),\n      ParsedProp(\n        PropName(\"formtarget\"),\n        baseType = formTarget,\n        commentOpt = Some(PropComment(\n          \"Specifies where to display the response that is received after submitting the form (for type='submit' and type='image')\"))\n      ),\n      ParsedProp(\n        PropName(\"height\"),\n        baseType = Normal(\"Int\"),\n        commentOpt =\n          Some(PropComment(\"Specifies the height of an <input> element (only for type='image')\"))),\n      ParsedProp(\n        PropName(\"list\"),\n        baseType = Normal(\"String\"),\n        commentOpt = Some(PropComment(\n          \"Refers to a <datalist> element that contains pre-defined options for an <input> element\"))\n      ),\n      ParsedProp(PropName(\"max\"),\n                 baseType = Normal(\"Long | String\"),\n                 commentOpt =\n                   Some(PropComment(\"Specifies the maximum value for an <input> element\"))),\n      ParsedProp(\n        PropName(\"maxlength\"),\n        baseType = Normal(\"Int\"),\n        commentOpt = Some(\n          PropComment(\"Specifies the maximum number of characters allowed in an <input> element\"))),\n      ParsedProp(\n        PropName(\"min\"),\n        baseType = Normal(\"Long | String\"),\n        commentOpt = Some(PropComment(\"Specifies a minimum value for an <input> element\"))),\n      ParsedProp(\n        PropName(\"multiple\"),\n        baseType = Normal(\"Boolean\"),\n        commentOpt = Some(\n          PropComment(\"Specifies that a user can enter more than one value in an <input> element\"))\n      ),\n      ParsedProp(PropName(\"name\"),\n                 baseType = Normal(\"String\"),\n                 commentOpt = Some(PropComment(\"Specifies the name of an <input> element\"))),\n      ParsedProp(\n        PropName(\"pattern\"),\n        baseType = Normal(\"String\"),\n        commentOpt = Some(\n          PropComment(\n            \"Specifies a regular expression that an <input> element's value is checked against\"))\n      ),\n      ParsedProp(\n        PropName(\"placeholder\"),\n        baseType = Normal(\"String\"),\n        commentOpt = Some(\n          PropComment(\n            \"Specifies a short hint that describes the expected value of an <input> element\"))\n      ),\n      ParsedProp(PropName(\"readonly\"),\n                 baseType = Normal(\"Boolean\"),\n                 commentOpt = Some(PropComment(\"Specifies that an input field is read-only\"))),\n      ParsedProp(\n        PropName(\"required\"),\n        baseType = Normal(\"Boolean\"),\n        commentOpt = Some(\n          PropComment(\n            \"Specifies that an input field must be filled out before submitting the form\"))\n      ),\n      ParsedProp(PropName(\"size\"),\n                 baseType = Normal(\"Int\"),\n                 commentOpt =\n                   Some(PropComment(\"Specifies the width; in characters; of an <input> element\"))),\n      ParsedProp(\n        PropName(\"src\"),\n        baseType = Normal(\"String\"),\n        commentOpt = Some(\n          PropComment(\n            \"Specifies the URL of the image to use as a submit button (only for type='image')\"))\n      ),\n      ParsedProp(PropName(\"step\"),\n                 baseType = Normal(\"Int\"),\n                 commentOpt =\n                   Some(PropComment(\"Specifies the legal number intervals for an input field\"))),\n      ParsedProp(PropName(\"type\"),\n                 baseType = inputType,\n                 commentOpt = Some(PropComment(\"Specifies the type <input> element to display\"))),\n      ParsedProp(PropName(\"value\"),\n                 baseType = Normal(\"String\"),\n                 commentOpt = Some(PropComment(\"Specifies the value of an <input> element \"))),\n      ParsedProp(\n        PropName(\"width\"),\n        baseType = Normal(\"Int\"),\n        commentOpt =\n          Some(PropComment(\"Specifies the width of an <input> element (only for type='image')\")))\n    )\n}\ncase object DomTextArea extends DomType(\"FromTextArea\")\n\nsealed abstract class DomType(val suffix: String) {\n  def props: Seq[ParsedProp] = Seq()\n\n  private def handler(name: String, param: String): ParsedProp = {\n    ParsedProp(\n      name = PropName(name),\n      isRequired = false,\n      baseType = Normal(s\"$param${suffix} => Callback\"),\n      commentOpt = None,\n      deprecatedMsg = None,\n      inheritedFrom = Some(CompName(\"DOM\"))\n    )\n  }\n\n  val handlers: Seq[ParsedProp] =\n    Seq(\n      handler(\"onAnimationEnd\", \"ReactEvent\"),\n      handler(\"onAnimationIteration\", \"ReactEvent\"),\n      handler(\"onAnimationStart\", \"ReactEvent\"),\n      handler(\"onBlur\", \"ReactFocusEvent\"),\n      handler(\"onChange\", \"ReactEvent\"),\n      handler(\"onClick\", \"ReactMouseEvent\"),\n      handler(\"onCompositionEnd\", \"ReactCompositionEvent\"),\n      handler(\"onCompositionStart\", \"ReactCompositionEvent\"),\n      handler(\"onCompositionUpdate\", \"ReactCompositionEvent\"),\n      handler(\"onContextMenu\", \"ReactEvent\"),\n      handler(\"onCopy\", \"ReactClipboardEvent\"),\n      handler(\"onCut\", \"ReactClipboardEvent\"),\n      handler(\"onDoubleClick\", \"ReactMouseEvent\"),\n      handler(\"onDrag\", \"ReactDragEvent\"),\n      handler(\"onDragEnd\", \"ReactDragEvent\"),\n      handler(\"onDragEnter\", \"ReactDragEvent\"),\n      handler(\"onDragExit\", \"ReactDragEvent\"),\n      handler(\"onDragLeave\", \"ReactDragEvent\"),\n      handler(\"onDragOver\", \"ReactDragEvent\"),\n      handler(\"onDragStart\", \"ReactDragEvent\"),\n      handler(\"onDrop\", \"ReactDragEvent\"),\n      handler(\"onFocus\", \"ReactFocusEvent\"),\n      handler(\"onInput\", \"ReactKeyboardEvent\"),\n      handler(\"onKeyDown\", \"ReactKeyboardEvent\"),\n      handler(\"onKeyPress\", \"ReactKeyboardEvent\"),\n      handler(\"onKeyUp\", \"ReactKeyboardEvent\"),\n      handler(\"onMouseDown\", \"ReactMouseEvent\"),\n      handler(\"onMouseEnter\", \"ReactMouseEvent\"),\n      handler(\"onMouseLeave\", \"ReactMouseEvent\"),\n      handler(\"onMouseMove\", \"ReactMouseEvent\"),\n      handler(\"onMouseUp\", \"ReactMouseEvent\"),\n      handler(\"onPaste\", \"ReactClipboardEvent\"),\n      handler(\"onScroll\", \"ReactUIEvent\"),\n      handler(\"onSelect\", \"ReactUIEvent\"),\n      handler(\"onSubmit\", \"ReactEvent\"),\n      handler(\"onTouchCancel\", \"ReactTouchEvent\"),\n      handler(\"onTouchEnd\", \"ReactTouchEvent\"),\n      handler(\"onTouchMove\", \"ReactTouchEvent\"),\n      handler(\"onTouchStart\", \"ReactTouchEvent\"),\n      handler(\"onTransitionEnd\", \"ReactTouchEvent\"),\n      handler(\"onWheel\", \"ReactWheelEvent\")\n    )\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/OutputFolder.scala",
    "content": "package com.olvind\n\nimport ammonite.ops.FileType.Dir\nimport ammonite.ops.{Path, mkdir, pwd}\n\nimport scala.util.{Failure, Success, Try}\n\nobject OutputFolder {\n  def unapply(s: String): Option[Path] =\n    Try {\n      val p = Path(s, pwd)\n      if (!exists(p)) {\n        mkdir(p)\n      }\n\n      (p, p.fileType)\n    } match {\n      case Success((p, Dir)) =>\n        Some(p)\n      case Success((p, other)) =>\n        System.err.println(s\"Illegal argument: s. must be folder\")\n        None\n      case Failure(th) =>\n        System.err.println(s\"Illegal argument $s: ${th.getMessage}\")\n        None\n    }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/Runner.scala",
    "content": "package com.olvind\n\nimport java.io.File\n\nimport ammonite.ops.{Path, RelPath}\nimport com.olvind.requiresjs._\n\nimport scala.collection.mutable\n\nobject Runner {\n\n  def preludeFor(library: Library): String =\n    s\"\"\"package chandu0101.scalajs.react.components\n       |package ${library.name}\n       |\n       |import chandu0101.macros.tojs.JSMacro\n       |import japgolly.scalajs.react._\n       |import japgolly.scalajs.react.raw._\n       |import japgolly.scalajs.react.vdom._\n       |import org.scalajs.dom\n       |import scala.scalajs.js\n       |import scala.scalajs.js.`|`\n       |\n       |/**\n       | * This file is generated - submit issues instead of PR against it\n       | */\n    \"\"\".stripMargin\n\n  def destinationPathFor(outputPath: Path, prefixOpt: Option[String], comp: CompName): Path = {\n    val baseFile = comp.value + \".scala\"\n    val filename = prefixOpt.fold(baseFile)(_ + baseFile)\n    outputPath / filename\n  }\n\n  def foundComponentsFor(library: Library): Seq[FoundComponent] = {\n    val visited = mutable.HashSet.empty[Path]\n\n    def flattenScan(r: Required): Seq[FoundComponent] =\n      r match {\n        case NotFound(path) =>\n          System.err.println(s\"not found required path: $path\")\n          Seq.empty\n\n        case Single(n, c) =>\n          Seq(c)\n\n        case Multiple(path, rs) =>\n          if (visited.contains(path)) {\n            Seq.empty\n          } else {\n            visited += path\n            val requireds: Seq[Required]       = rs.map(_.run).toList\n            val recursive: Seq[FoundComponent] = requireds flatMap flattenScan\n            System.err.println(s\"Found in path $path: ${recursive.map(_.name.value)}\")\n\n            recursive\n          }\n      }\n\n    library.locations.map(requiresjs.Require(_, library.indexNames)).flatMap(flattenScan)\n  }\n\n  def apply(library: Library, outputFolder: Path): Seq[Path] = {\n    val foundComponents: Seq[FoundComponent] = foundComponentsFor(library)\n\n    val allFound: Map[CompName, FoundComponent] = foundComponents.map(c => c.name -> c).toMap\n\n    val (mainFiles: Seq[PrimaryOutFile], secondaryFiles: Seq[SecondaryOutFile]) =\n      library.components.foldLeft((Seq.empty[PrimaryOutFile], Seq.empty[SecondaryOutFile])) {\n        case ((ps, ss), c) =>\n          val parsed: ParsedComponent = ParseComponent(allFound, library, c)\n\n          val (primaryFile, secondaryFile) = Printer(library.prefixOpt.getOrElse(\"\"), parsed)\n\n          (ps :+ primaryFile, ss ++ secondaryFile)\n      }\n\n    val fullOutputPath = outputFolder / RelPath(\n      library.packageName.replaceAll(\"\\\\.\", if (File.separator == \"\\\\\") \"\\\\\\\\\" else File.separator))\n    fullOutputPath.toIO.mkdirs()\n\n    val prelude: String =\n      preludeFor(library)\n\n    val secondary: Path = fullOutputPath / \"gen-types.scala\"\n    printToFile(secondary) { w =>\n      w.println(prelude)\n      secondaryFiles.sortBy(_.content).distinct.foreach {\n        case file =>\n          w.println(file.content)\n          w.println(\"\")\n      }\n    }\n\n    val outs: Seq[(PrimaryOutFile, Path)] =\n      mainFiles map (f => (f, destinationPathFor(fullOutputPath, library.prefixOpt, f.filename)))\n\n    outs.foreach {\n      case (PrimaryOutFile(compName, content, secondaries), file) =>\n        printToFile(file) { w =>\n          w.println(prelude + content)\n          secondaries.foreach {\n            case SecondaryOutFile(_, c) =>\n              w.println(\"\")\n              w.println(c)\n          }\n        }\n    }\n    outs.map(_._2) :+ secondary\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/componentParsers.scala",
    "content": "package com.olvind\n\nobject ParseComponent {\n  val ignoredMembers: Set[String] =\n    Set(\n      \"render\",\n      \"componentDidMount\",\n      \"componentWillMount\",\n      \"componentWillReceiveProps\",\n      \"componentDidUpdate\",\n      \"componentWillUnmount\",\n      \"shouldComponentUpdate\"\n    )\n\n  def apply(\n      scope: Map[CompName, requiresjs.FoundComponent],\n      library: Library,\n      comp: ComponentDef\n  ): ParsedComponent = {\n\n    val propTypes: Map[PropName, PropUnparsed] =\n      scope\n        .get(comp.name)\n        .map(_.props)\n        .getOrElse(\n          panic(s\"No Proptypes found for ${comp.name}\")\n        )\n\n    val inheritedProps: Map[PropName, PropUnparsed] =\n      comp.shared match {\n        case None => Map.empty\n        case Some(shared) =>\n          scope\n            .get(shared.name)\n            .map(_.props)\n            .getOrElse(\n              panic(s\"$comp: No Proptypes found for $shared\")\n            )\n      }\n\n    val methodClassOpt: Option[ParsedMethodClass] =\n      scope\n        .get(comp.name)\n        .flatMap(_.methods)\n        .map(_.filterNot(m ⇒\n          ignoredMembers(m.name) || m.name.startsWith(\"handle\") || m.name.startsWith(\"_\")))\n        .filter(_.nonEmpty)\n        .map(\n          members ⇒\n            ParsedMethodClass(\n              library.prefixOpt.getOrElse(\"\") + comp.name + \"M\",\n              members.toSeq.sortBy(_.name).map(library.memberMapper(comp.name))\n          ))\n\n    val basicFields: Seq[ParsedProp] =\n      Seq(\n        ParsedProp(PropName(\"key\"), isRequired = false, Normal(\"String\"), None, None, None),\n        ParsedProp(PropName(\"ref\"),\n                   isRequired = false,\n                   Normal(methodClassOpt.fold(\"String\")(c => c.className + \" => Unit\")),\n                   None,\n                   None,\n                   None)\n      )\n\n    val parsedProps: Seq[ParsedProp] =\n      (inheritedProps ++ propTypes)\n        .filterNot(t => basicFields.exists(_.name == t._1))\n        .toSeq\n        .sortBy(p => (p._2.fromComp != comp.name, p._1.clean.value))\n        .map {\n          case (propName, PropUnparsed(origComp, tpe, commentOpt)) =>\n            ParseProp(\n              library,\n              comp.name,\n              origComp,\n              propName,\n              tpe,\n              commentOpt\n            )\n        }\n\n    val domProps: Seq[ParsedProp] =\n      comp.domeTypeOpt\n        .map(domType => domType.handlers ++ domType.props)\n        .toSeq\n        .flatten\n        .filterNot(p ⇒ parsedProps.exists(_.name == p.name))\n\n    ParsedComponent(comp, basicFields ++ parsedProps ++ domProps, methodClassOpt)\n  }\n}\n\nobject ParseProp {\n  //  \"Deprecated(string, 'Instead, use a custom `actions` property.')\"\n  val Pattern = \"Deprecated\\\\(([^,]+), '(.+)'\\\\)\".r\n\n  def apply(\n      library: Library,\n      compName: CompName,\n      origCompName: CompName,\n      propName: PropName,\n      propString: PropTypeUnparsed,\n      commentOpt: Option[PropComment]\n  ): ParsedProp = {\n    val _clean: String =\n      propString.value\n        .replace(\"PropTypes.\", \"\")\n        .replace(\".isRequired\", \"\")\n        /* old style */\n        .replace(\"_react2['default'].\", \"\")\n        //TODO: this is fairly mui specific, and actually breaks Sui\n        .replace(\"_utilsPropTypes2['default'].\", \"Mui.\")\n        .replace(\"(0, _utilsDeprecatedPropType2['default'])\", \"Deprecated\")\n        /* new style */\n        .replace(\"_react2.default.\", \"\")\n        .replace(\"_propTypes2.default.\", \"Mui.\")\n        .replace(\"(0, _deprecatedPropType2.default)\", \"Deprecated\")\n        /* even another style*/\n        .replace(\"_react.\", \"\")\n\n    val (typeStr: String, deprecatedOpt: Option[String]) = _clean match {\n      case Pattern(tpe, depMsg) => (tpe, Some(depMsg))\n      case tpe                  => (tpe, None)\n    }\n\n    val mappedType: Type =\n      library.typeMapper(origCompName, propName, typeStr)\n\n    val isRequired: Boolean =\n      propString.value.contains(\".isRequired\")\n\n    val inheritedFrom: Option[CompName] =\n      if (compName == origCompName) None else Some(origCompName)\n\n    ParsedProp(\n      propName,\n      isRequired && inheritedFrom.isEmpty,\n      mappedType,\n      commentOpt,\n      deprecatedOpt,\n      inheritedFrom\n    )\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/eui/EuiLibrary.scala",
    "content": "package com.olvind\npackage eui\n\nimport ammonite.ops._\n\nimport scala.language.implicitConversions\n\ncase class EuiLibrary(base: Path) extends Library {\n  /* todo: make requiresjs clever enough to figure this out by itself */\n  override val locations =\n    Seq(\n      base / 'lib // / 'components\n    )\n\n  override val prefixOpt    = Some(\"Eui\")\n  override val name         = \"elementalui\"\n  override val typeMapper   = EuiTypeMapper\n  override val memberMapper = EuiTypeMemberMethodMapper\n  override val indexNames   = Set(\"Elemental.js\", \"index.js\")\n  override val packageName  = \"chandu0101.scalajs.react.components.elementalui\"\n\n  val formField =\n    ComponentDef(CompName(\"FormField\"), forceChildren = true, domeTypeOpt = Some(DomInput))\n  val components: Seq[ComponentDef] =\n    Seq(\n      //      ComponentDef(CompName(\"BlankState\")),\n      //      ComponentDef(CompName(\"BlankStateHeading\")), //Error, two components in one file\n      //      ComponentDef(CompName(\"Section\")),\n      //      ComponentDef(CompName(\"Body\")),\n      //      ComponentDef(CompName(\"Footer\")),\n      //      ComponentDef(CompName(\"Header\")),\n      ComponentDef(CompName(\"ElementalAlert\")),\n      ComponentDef(CompName(\"ButtonGroup\")),\n      ComponentDef(CompName(\"Button\"), forceChildren = true, domeTypeOpt = Some(DomInput)),\n      ComponentDef(CompName(\"Card\")),\n      ComponentDef(CompName(\"Col\")), // Error, comments\n      ComponentDef(CompName(\"Container\"), forceChildren = true),\n      ComponentDef(CompName(\"Checkbox\"), domeTypeOpt = Some(DomInput)),\n      ComponentDef(CompName(\"Dropdown\")),\n      ComponentDef(CompName(\"EmailInputGroup\"), domeTypeOpt = Some(DomInput)),\n      ComponentDef(CompName(\"Dropzone\")),\n      ComponentDef(CompName(\"FileUpload\"), domeTypeOpt = Some(DomInput)),\n      formField,\n      ComponentDef(CompName(\"FormIconField\"),\n                   forceChildren = true,\n                   shared = Some(formField),\n                   domeTypeOpt = Some(DomInput)),\n      ComponentDef(CompName(\"FormIcon\"), forceChildren = true),\n      ComponentDef(CompName(\"FormInput\"), forceChildren = true, domeTypeOpt = Some(DomInput)),\n      ComponentDef(CompName(\"Form\"), forceChildren = true),\n      ComponentDef(CompName(\"FormLabel\"), forceChildren = true),\n      ComponentDef(CompName(\"FormNote\"), forceChildren = true),\n      ComponentDef(CompName(\"FormRow\"), forceChildren = true),\n      ComponentDef(CompName(\"FormSelect\"), forceChildren = true),\n      ComponentDef(CompName(\"Glyph\"), forceChildren = true),\n      ComponentDef(CompName(\"InputGroup\"), forceChildren = true),\n      ComponentDef(CompName(\"InputGroupSection\"), forceChildren = true),\n      ComponentDef(CompName(\"ModalBody\"), forceChildren = true),\n      ComponentDef(CompName(\"ModalFooter\"), forceChildren = true),\n      ComponentDef(CompName(\"ModalHeader\"), forceChildren = true),\n      ComponentDef(CompName(\"Modal\"), forceChildren = true),\n      //      ComponentDef(CompName(\"Page\")),\n      ComponentDef(CompName(\"Pagination\")),\n      ComponentDef(CompName(\"PasswordInputGroup\"), domeTypeOpt = Some(DomInput)),\n      ComponentDef(CompName(\"Pill\")),\n      ComponentDef(CompName(\"RadioGroup\")),\n      ComponentDef(CompName(\"ResponsiveText\"), domeTypeOpt = Some(DomInput)),\n      ComponentDef(CompName(\"Row\")),\n      ComponentDef(CompName(\"SegmentedControl\")),\n      ComponentDef(CompName(\"Spinner\")),\n      ComponentDef(CompName(\"Table\")),\n      ComponentDef(CompName(\"Radio\"), domeTypeOpt = Some(DomInput))\n    )\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/eui/EuiRunner.scala",
    "content": "package com.olvind\npackage eui\n\nimport ammonite.ops.Path\n\nobject EuiRunner extends App {\n  args.toList match {\n    case OutputFolder(buildFolder) :: OutputFolder(outputFolder) :: Nil =>\n      val outs: Seq[Path] = Runner(EuiLibrary(buildFolder), outputFolder)\n    case _ =>\n      System.err.println(\"Syntax: EuiRunner <directory with transpiled javascript> <output folder>\")\n      System.exit(1)\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/eui/EuiTypeMapper.scala",
    "content": "package com.olvind\npackage eui\n\nobject EuiTypeMapper extends TypeMapper {\n  val typeT   = Normal(\"T\").generic(\"T\")\n  val typeTJs = Normal(\"T\").genericJs(\"T\")\n\n  def apply(compName: CompName, fieldName: PropName, typeString: String): Type = {\n    def is(s: String) =\n      fieldName.value.toLowerCase contains s.toLowerCase\n    def split(drop: Int, s: String) =\n      s.split(\"[\\'\\\"\\\\(\\\\)\\\\[\\\\],\\\\s]\").map(_.trim).filterNot(_.isEmpty).drop(drop)\n\n    (compName.value, fieldName.value, typeString) match {\n      //      /* Double => Int */\n      //      case (_, \"autoHideDuration\", \"number\") => Normal(\"Int\")\n      //\n      //      /* specific */\n      //      case (\"AutoComplete\", \"dataSource\", \"Mui.array\") => Normal(\"js.Array[String]\")\n      //\n      //      /* general */\n      case (\"FormIconField\", \"iconKey\", _)  => Normal(\"Octicons\")\n      case (\"Dropdown\", \"items\", _)         => Normal(\"js.Array[EuiDropdownMenuItem]\")\n      case (\"Modal\", \"width\", _)            => Normal(\"ModalSize | Double\")\n      case (_, _, \"array\")                  => Normal(\"js.Array[js.Any]\")\n      case (_, \"children\", \"any\")           => Normal(\"VdomNode\")\n      case (_, _, \"any\")                    => Normal(\"js.Any\")\n      case (_, _, \"bool\")                   => Normal(\"Boolean\")\n      case (_, _, \"Form\")                   => Normal(\"Form\")\n      case (_, _, \"React.bool\")             => Normal(\"Boolean\")\n      case (_, _, \"string\")                 => Normal(\"String\")\n      case (_, _, \"React.string\")           => Normal(\"String\")\n      case (_, _, \"React.object\")           => Normal(\"js.Object\")\n      case (_, _, \"object\")                 => Normal(\"js.Object\")\n      case (_, \"children\", \"React.node\")    => Normal(\"VdomNode\")\n      case (_, \"children\", \"node\")          => Normal(\"VdomNode\")\n      case (_, _, \"React.node\")             => Normal(\"ReactNode\")\n      case (_, \"children\", \"React.element\") => Normal(\"VdomNode\")\n      case (_, _, \"React.element\")          => Normal(\"ReactElement\")\n      case (_, _, \"number\")                 => Normal(\"Double\")\n      case (_, _, \"React.number\")           => Normal(\"Double\")\n      case (\"Glyph\", \"icon\", _)             => Normal(\"Octicons\")\n\n      case (\"FormField\", \"width\", enum) => Enum(compName, split(1, enum), \"FormFieldWidth\")\n      case (\"Glyph\", \"type\", enum)      => Enum(compName, split(1, enum), \"GlyphType\")\n      case (\"Form\", \"type\", enum)       => Enum(compName, split(1, enum), \"FormType\")\n      case (_, _, \"React.oneOf(COLOR_VARIANTS)\") =>\n        Enum(\n          compName,\n          Seq(\"danger\", \"default\", \"primary\", \"success\", \"warning\"),\n          \"ColorVariant\"\n        )\n\n      case (_, _, \"React.oneOf(BUTTON_SIZES)\") =>\n        Enum(\n          compName,\n          Seq(\"lg\", \"sm\", \"xs\"),\n          \"ButtonSize\"\n        )\n      case (_, _, \"React.oneOf(NOTE_TYPES)\") =>\n        Enum(\n          compName,\n          Seq(\"default\", \"primary\", \"success\", \"warning\", \"danger\"),\n          \"NoteType\"\n        )\n      case (_, _, \"React.oneOf(BUTTON_TYPES)\") =>\n        Enum(\n          compName,\n          Seq(\n            \"default\",\n            \"default-primary\",\n            \"default-success\",\n            \"default-warning\",\n            \"default-danger\",\n            \"hollow-primary\",\n            \"hollow-success\",\n            \"hollow-warning\",\n            \"hollow-danger\",\n            \"primary\",\n            \"success\",\n            \"warning\",\n            \"danger\",\n            \"link\",\n            \"link-text\",\n            \"link-primary\",\n            \"link-success\",\n            \"link-warning\",\n            \"link-danger\",\n            \"link-cancel\",\n            \"link-delete\"\n          ),\n          \"ButtonType\"\n        )\n      case (_, _, \"React.oneOf(ALERT_TYPES)\") =>\n        Enum(compName,\n             Seq(\"danger\", \"error\", \"info\", \"primary\", \"success\", \"warning\", \"success_inverted\"),\n             \"AlertType\")\n      case (_, _, enum) if enum.contains(\"oneOfType\") =>\n        Normal(split(1, enum) map (t => apply(compName, fieldName, t)) map (_.name) mkString \" | \")\n      case (_, _, enum) if enum.contains(\"oneOf\")          => Enum(compName, split(1, enum))\n      case (_, \"children\", \"React.arrayOf(React.element)\") => Normal(\"js.Array[VdomElement]\")\n      case (_, _, \"React.array\")                           => Normal(\"js.Array[js.Object]\")\n      case (\"FormSelect\", \"options\", array)                => Normal(\"js.Array[FormSelectOption]\")\n      case (_, _, \"func\")                                  => Normal(EuiTypeMapperFunction(compName, fieldName))\n      case (_, _, \"React.func\")                            => Normal(EuiTypeMapperFunction(compName, fieldName))\n      //      case a=>\n      //        println(a)\n      //        throw new Error()\n\n    }\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/eui/EuiTypeMapperFunction.scala",
    "content": "package com.olvind\npackage eui\n\nobject EuiTypeMapperFunction {\n  val Callback = \"Callback\"\n\n  def apply(compName: CompName, name: PropName): String =\n    (compName.value, name.value) match {\n      case (\"Dropzone\", \"onDrop\")                     => \"js.Array[File] => Callback\" //TODO\n      case (\"Page\", \"onSelect\")                       => Callback //TODO\n      case (\"Dropdown\", \"onSelect\")                   => Callback //TODO\n      case (\"EmailInputGroup\", \"onChange\")            => \"ReactEventFromInput => Callback\"\n      case (\"FileUpload\", \"onChange\")                 => Callback //TODO\n      case (\"FormInput\", \"onChange\")                  => \"ReactEventFromInput => Callback\"\n      case (\"FormSelect\", \"onChange\")                 => \"String => Callback\"\n      case (\"ModalHeader\", \"onClose\")                 => \"ReactEventFromHtml => Callback\"\n      case (\"Modal\", \"onCancel\")                      => \"ReactEventFromHtml => Callback\"\n      case (\"Pagination\", \"onPageSelect\")             => \"Int => Callback\" //TODO\n      case (\"PasswordInputGroup\", \"onChange\")         => \"ReactEventFromInput => Callback\" //TODO\n      case (\"PasswordInputGroup\", \"validatePassword\") => \"String => CallbackTo[Boolean]\"\n      case (\"Pill\", \"onClear\")                        => \"ReactEvent => Callback\"\n      case (\"Pill\", \"onClick\")                        => \"ReactEventFromHtml => Callback\"\n      case (\"RadioGroup\", \"onChange\")                 => \"String => Callback\"\n      case (\"SegmentedControl\", \"onChange\")           => Callback\n      case _ =>\n        throw new Error(\n          s\"\"\"case (\"${compName.value}\", \"${name.value}\") => Callback  //TODO: Add function type mapping in ${getClass().getName}\"\"\")\n    }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/eui/EuiTypeMemberMethodMapper.scala",
    "content": "package com.olvind\npackage eui\n\nobject EuiTypeMemberMethodMapper extends MemberMapper {\n\n  override def apply(compName: CompName)(memberMethod: MemberMethod): ParsedMethod =\n    ParsedMethod(\n      apply(compName, memberMethod.paramNames, memberMethod.name),\n      None\n    )\n\n  private def apply(c: CompName, args: Seq[String], m: String) =\n    (c.value, args.size, m) match {\n      //      case (\"TimePicker\", 0, \"isControlled\") => \"isControlled(): Boolean\"\n\n      case other ⇒\n        println(\"missing types for method: \" + other)\n        m + args.map(sanitize(_) + \": js.Any\").mkString(\"(\", \", \", \")\") + \": js.Dynamic\"\n    }\n  def sanitize(s: String) =\n    if (s == \"val\") \"`val`\" else s\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/libraries.scala",
    "content": "package com.olvind\n\nimport ammonite.ops.Path\n\nfinal case class ComponentDef(\n    name: CompName,\n    shared: Option[ComponentDef] = None,\n    multipleChildren: Boolean = true,\n    domeTypeOpt: Option[DomType] = None, //Some(DomElement),\n    forceChildren: Boolean = false\n)\n\ntrait TypeMapper {\n  def apply(compName: CompName, fieldName: PropName, typeString: String): Type\n}\n\ntrait MemberMapper {\n  def apply(compName: CompName)(memberMethod: MemberMethod): ParsedMethod\n}\n\ntrait Library {\n  def name: String\n  def prefixOpt: Option[String]\n  def locations: Seq[Path]\n  def components: Seq[ComponentDef]\n  def typeMapper: TypeMapper\n  def memberMapper: MemberMapper\n  def indexNames: Set[String]\n  def packageName: String\n\n  @deprecated(\"\", \"\")\n  final def prefix: String =\n    prefixOpt getOrElse \"\"\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/mui/MuiLibrary.scala",
    "content": "package com.olvind\npackage mui\n\nimport ammonite.ops._\n\nimport scala.language.implicitConversions\n\ncase class MuiLibrary(base: Path) extends Library {\n  /* todo: make requiresjs clever enough to figure this out by itself */\n  override val locations =\n    Seq(\n      base,\n      base / 'styles,\n      base / 'internal / 'EnhancedButton,\n      base / 'internal / 'EnhancedSwitch,\n      base / 'TextField / 'EnhancedTextarea\n    )\n\n  override val prefixOpt    = Some(\"Mui\")\n  override val name         = \"materialui\"\n  override val typeMapper   = MuiTypeMapper\n  override val memberMapper = MuiTypeMemberMethodMapper\n  override val indexNames   = Set(\"index.js\")\n  override val packageName  = \"chandu0101.scalajs.react.components.materialui\"\n\n  case object Internal {\n    val AppCanvas          = ComponentDef(CompName(\"AppCanvas\"))\n    val BeforeAfterWrapper = ComponentDef(CompName(\"BeforeAfterWrapper\"))\n    val EnhancedButton     = ComponentDef(CompName(\"EnhancedButton\"))\n    val EnhancedSwitch     = ComponentDef(CompName(\"EnhancedSwitch\"))\n    val Overlay            = ComponentDef(CompName(\"Overlay\"))\n    val CircleRipple       = ComponentDef(CompName(\"CircleRipple\"))\n    val FocusRipple        = ComponentDef(CompName(\"FocusRipple\"))\n    val TouchRipple        = ComponentDef(CompName(\"TouchRipple\"))\n    val RenderToLayer      = ComponentDef(CompName(\"RenderToLayer\"))\n    val EnhancedTextarea   = ComponentDef(CompName(\"EnhancedTextarea\"))\n    val Tooltip            = ComponentDef(CompName(\"Tooltip\"))\n  }\n\n  val DropDownMenu = ComponentDef(CompName(\"DropDownMenu\"))\n  val List_        = ComponentDef(CompName(\"List\"))\n  val ListItem     = ComponentDef(CompName(\"ListItem\"), Some(Internal.EnhancedButton))\n  val Menu         = ComponentDef(CompName(\"Menu\"), Some(List_))\n  val Paper        = ComponentDef(CompName(\"Paper\"))\n  val RadioButton  = ComponentDef(CompName(\"RadioButton\"), Some(Internal.EnhancedSwitch))\n  val TextField = ComponentDef(CompName(\"TextField\"),\n                               Some(Internal.EnhancedTextarea),\n                               domeTypeOpt = Some(DomInput))\n\n  val components: Seq[ComponentDef] =\n    Seq(\n      ComponentDef(CompName(\"AppBar\"), Option(Paper)),\n      ComponentDef(CompName(\"AutoComplete\"), Some(TextField)),\n      ComponentDef(CompName(\"Avatar\"), multipleChildren = false),\n      ComponentDef(CompName(\"Badge\")),\n      ComponentDef(CompName(\"Card\"), Some(Paper)),\n      ComponentDef(CompName(\"CardActions\")),\n      //      ComponentDef(CompName(\"CardExpandable\"), None),\n      ComponentDef(CompName(\"CardHeader\")),\n      ComponentDef(CompName(\"CardMedia\")),\n      ComponentDef(CompName(\"CardText\")),\n      ComponentDef(CompName(\"CardTitle\")),\n      ComponentDef(CompName(\"Checkbox\"), Some(Internal.EnhancedSwitch)),\n      ComponentDef(CompName(\"Chip\"), Some(Internal.EnhancedButton)),\n      ComponentDef(CompName(\"CircularProgress\")),\n      ComponentDef(CompName(\"DatePicker\"), Option(TextField), domeTypeOpt = Some(DomInput)),\n      ComponentDef(CompName(\"Dialog\"), None),\n      ComponentDef(CompName(\"Divider\")),\n      ComponentDef(CompName(\"Drawer\"), None),\n      DropDownMenu,\n      ComponentDef(CompName(\"FlatButton\"), Some(Internal.EnhancedButton)),\n      ComponentDef(CompName(\"FloatingActionButton\"), Some(Internal.EnhancedButton)),\n      ComponentDef(CompName(\"FontIcon\")),\n      ComponentDef(CompName(\"GridList\")),\n      ComponentDef(CompName(\"GridTile\")),\n      ComponentDef(CompName(\"IconButton\"), Some(Internal.EnhancedButton)),\n      ComponentDef(CompName(\"IconMenu\"), Option(Menu)),\n      ComponentDef(CompName(\"LinearProgress\")),\n      List_,\n      ListItem,\n      Menu,\n      ComponentDef(CompName(\"MenuItem\"), Option(ListItem)),\n      ComponentDef(CompName(\"MuiThemeProvider\")),\n      Paper,\n      ComponentDef(CompName(\"Popover\")),\n      //      ComponentDef(CompName(\"PopoverAnimationVertical\")),\n      RadioButton,\n      ComponentDef(CompName(\"RadioButtonGroup\"), Some(RadioButton)),\n      ComponentDef(CompName(\"RaisedButton\"), Some(Internal.EnhancedButton)),\n      ComponentDef(CompName(\"RefreshIndicator\")),\n      ComponentDef(CompName(\"SelectField\"), Option(DropDownMenu)),\n      ComponentDef(CompName(\"Slider\")),\n      ComponentDef(CompName(\"Snackbar\")),\n      ComponentDef(CompName(\"Step\")),\n      ComponentDef(CompName(\"StepContent\")),\n      ComponentDef(CompName(\"StepLabel\")),\n      ComponentDef(CompName(\"Stepper\")),\n      ComponentDef(CompName(\"Subheader\")),\n      ComponentDef(CompName(\"Tab\"), Some(Internal.EnhancedButton)),\n      ComponentDef(CompName(\"Table\")),\n      ComponentDef(CompName(\"TableBody\")),\n      ComponentDef(CompName(\"TableFooter\")),\n      ComponentDef(CompName(\"TableHeader\")),\n      ComponentDef(CompName(\"TableHeaderColumn\")),\n      ComponentDef(CompName(\"TableRow\")),\n      ComponentDef(CompName(\"TableRowColumn\")),\n      ComponentDef(CompName(\"Tabs\")),\n      TextField,\n      ComponentDef(CompName(\"TimePicker\"), Option(TextField), domeTypeOpt = Some(DomInput)),\n      ComponentDef(CompName(\"Toggle\"), Some(Internal.EnhancedSwitch)),\n      ComponentDef(CompName(\"Toolbar\")),\n      ComponentDef(CompName(\"ToolbarGroup\")),\n      ComponentDef(CompName(\"ToolbarSeparator\")),\n      ComponentDef(CompName(\"ToolbarTitle\"))\n    )\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/mui/MuiRunner.scala",
    "content": "package com.olvind\npackage mui\n\nimport ammonite.ops.Path\n\nobject MuiRunner extends App {\n  args.toList match {\n    case OutputFolder(buildFolder) :: OutputFolder(outputFolder) :: Nil =>\n      val outs: Seq[Path] = Runner(MuiLibrary(buildFolder), outputFolder)\n    case _ =>\n      System.err.println(\"Syntax: MuiRunner <directory with transpiled javascript> <output folder>\")\n      System.exit(1)\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/mui/MuiTypeMapper.scala",
    "content": "package com.olvind\npackage mui\n\nobject MuiTypeMapper extends TypeMapper {\n  val typeT   = Normal(\"T\").generic(\"T\")\n  val typeTJs = Normal(\"T\").genericJs(\"T\")\n\n  def apply(compName: CompName, fieldName: PropName, typeString: String): Type = {\n    def is(s: String) =\n      fieldName.value.toLowerCase contains s.toLowerCase\n    def split(drop: Int, s: String) =\n      s.split(\"[\\'\\\"\\\\(\\\\)\\\\[\\\\],\\\\s]\").map(_.trim).filterNot(_.isEmpty).drop(drop)\n\n    //Please note that the following match statement is incredibly order-sensitive, if you change order around you can break things\n    (compName.value, fieldName.value, typeString) match {\n      // i dont have patience to do this properly (GridList)\n      case (_, \"cellHeight\", _) => Normal(\"Int\")\n\n      case (_, _, e) if e.contains(\"oneOfType\") =>\n        Normal(split(1, e) map (t => apply(compName, fieldName, t)) map (_.name) mkString \" | \")\n      case (_, _, enum) if enum.startsWith(\"Mui.oneOf\") =>\n        Enum(compName, split(1, enum))\n\n      /* Double => Int */\n      case (_, \"autoHideDuration\", \"number\")            => Normal(\"Int\")\n      case (_, \"cols\", \"number\")                        => Normal(\"Int\")\n      case (_, \"columnNumber\", \"number\")                => Normal(\"Int\")\n      case (_, \"columnId\", \"number\")                    => Normal(\"Int\")\n      case (_, \"initialSelectedIndex\", \"number\")        => Normal(\"Int\")\n      case (_, \"left\", \"number\")                        => Normal(\"Int\")\n      case (_, \"maxHeight\", \"number\")                   => Normal(\"Int\")\n      case (_, \"nestedLevel\", \"number\")                 => Normal(\"Int\")\n      case (_, \"padding\", \"number\")                     => Normal(\"Int\")\n      case (_, \"rowNumber\", \"number\")                   => Normal(\"Int\")\n      case (_, \"rows\", \"number\")                        => Normal(\"Int\")\n      case (_, \"rowsMax\", \"number\")                     => Normal(\"Int\")\n      case (_, \"selectedIndex\", \"number\")               => Normal(\"Int\")\n      case (\"Avatar\", \"size\", \"number\")                 => Normal(\"Int\")\n      case (\"RefreshIndicator\", \"size\", \"number\")       => Normal(\"Int\")\n      case (_, \"top\", \"number\")                         => Normal(\"Int\")\n      case (_, \"touchTapCloseDelay\", \"number\")          => Normal(\"Int\")\n      case (_, _, e) if e.toLowerCase.contains(\"index\") => Normal(\"Int\")\n\n      /* specific */\n      case (\"AutoComplete\", \"dataSource\", \"Mui.array\")        => Normal(\"js.Array[String]\")\n      case (\"DatePicker\", \"value\", _)                         => Normal(\"js.Date\")\n      case (\"DatePicker\", \"defaultDate\", \"Mui.object\")        => Normal(\"js.Date\")\n      case (\"DatePicker\", \"maxDate\", \"Mui.object\")            => Normal(\"js.Date\")\n      case (\"DatePicker\", \"minDate\", \"Mui.object\")            => Normal(\"js.Date\")\n      case (\"DatePicker\", \"initialDate\", \"Mui.object\")        => Normal(\"js.Date\")\n      case (\"Dialog\", \"width\", \"Mui.any\")                     => Normal(\"Int\")\n      case (\"DropDownMenu\", \"value\", \"Mui.any\")               => typeT\n      case (\"EnhancedSwitch\", \"value\", \"Mui.any\")             => typeT\n      case (\"RadioButtonGroup\", \"defaultSelected\", \"Mui.any\") => typeT\n      case (\"RadioButtonGroup\", \"valueSelected\", \"Mui.any\")   => typeT\n      case (\"RadioButton\", \"value\", \"Mui.any\")                => typeT\n      case (\"Tab\", \"index\", \"Mui.any\")                        => Normal(\"js.Any\")\n      case (\"ListItem\", \"nestedItems\", \"Mui.arrayOf(Mui.element)\") =>\n        Normal(\"js.Array[VdomElement]\")\n      case (\"Menu\", \"value\", \"Mui.any\")                             => Normal(\"T | js.Array[T]\").generic(\"T\")\n      case (\"MenuItem\", \"value\", \"Mui.any\")                         => typeT\n      case (\"SelectField\", \"selectFieldRoot\", \"Mui.object\")         => Normal(\"CssProperties\")\n      case (\"SelectField\", \"value\", \"Mui.any\")                      => typeT\n      case (\"Slider\", \"defaultValue\", \"valueInRangePropType\")       => Normal(\"Double\")\n      case (\"Slider\", \"max\", \"minMaxPropType\")                      => Normal(\"Double\")\n      case (\"Slider\", \"min\", \"minMaxPropType\")                      => Normal(\"Double\")\n      case (\"Slider\", \"value\", \"valueInRangePropType\")              => Normal(\"Double\")\n      case (\"Step\", \"controlButtonsGroup\", \"Mui.arrayOf(Mui.node)\") => Normal(\"js.Array[VdomNode]\")\n      case (\"Step\", \"actions\", \"Mui.arrayOf(Mui.node)\")             => Normal(\"js.Array[VdomNode]\")\n      case (\"Tab\", \"value\", \"Mui.any\")                              => typeTJs\n      case (\"Tabs\", \"value\", \"Mui.any\")                             => typeTJs\n      case (\"TextField\", \"value\", \"Mui.any\")                        => Normal(\"String\")\n      case (\"TextField\", \"defaultValue\", \"Mui.any\")                 => Normal(\"String\")\n      case (\"TimePicker\", \"defaultTime\", \"Mui.object\")              => Normal(\"js.Date\")\n      case (\"TimePicker\", \"value\", \"Mui.object\")                    => Normal(\"js.Date\")\n      case (\"DatePicker\", \"utils\", \"Mui.object\")                    => Normal(\"DatePickerUtils\") //TODO ???\n      case (\"SelectField\", \"dropDownMenuProps\", \"Mui.object\") =>\n        Normal(\"DropDownMenuProps\") //TODO ???\n\n      /* TODO: dubious */\n      case (\"EnhancedTextarea\", \"defaultValue\", \"Mui.any\")        => Normal(\"js.Any\")\n      case (\"GridTile\", \"rootClass\", \"Mui.object\")                => Normal(\"js.Any\")\n      case (\"Popover\", \"anchorEl\", \"Mui.object\")                  => Normal(\"js.Any\")\n      case (\"Stepper\", \"createIcon\", \"Mui.func\")                  => Normal(\"js.Function\")\n      case (\"Stepper\", \"updateAvatarBackgroundColor\", \"Mui.func\") => Normal(\"js.Function\")\n      case (_, \"valueLink\", \"Mui.object\")                         => Normal(\"js.Any\")\n\n      /* mui general */\n      case (_, _, \"Mui.string\") if is(\"color\")            => Normal(\"MuiColor\")\n      case (_, _, \"Mui.object\") if is(\"style\")            => Normal(\"CssProperties\")\n      case (_, _, \"Mui.object\") if is(\"muiTheme\")         => Normal(\"MuiTheme\")\n      case (_, _, \"Mui.object\")                           => Normal(\"js.Object\")\n      case (_, _, \"Mui.any\")                              => Normal(\"js.Any\")\n      case (_, \"label\", \"validateLabel\")                  => Normal(\"String\")\n      case (_, \"zDepth\", _)                               => Normal(\"ZDepth\")\n      case (_, _, \"Mui.origin\")                           => Normal(\"Origin\")\n      case (_, _, \"_propTypes4.default.origin\")           => Normal(\"Origin\") //TODO???\n      case (_, _, \"_propTypes4.default.cornersAndCenter\") => Normal(\"CornersAndCenter\") //TODO???\n      case (_, _, \"_propTypes4.default.stringOrNumber\")   => Normal(\"String | Double\") //TODO???\n      case (_, _, \"Mui.cornersAndCenter\")                 => Normal(\"CornersAndCenter\")\n      case (_, _, \"Mui.corners\")                          => Normal(\"Corners\")\n      case (_, _, \"Mui.stringOrNumber\")                   => Normal(\"String | Double\")\n\n      /* general */\n      case (_, _, \"Mui.string\")                        => Normal(\"String\")\n      case (_, _, \"Mui.bool\")                          => Normal(\"Boolean\")\n      case (_, \"children\", \"Mui.element\")              => Normal(\"VdomElement\")\n      case (_, _, \"Mui.element\")                       => Normal(\"VdomElement\")\n      case (_, \"children\", \"Mui.node\")                 => Normal(\"VdomNode\")\n      case (_, _, \"Mui.node\")                          => Normal(\"VdomNode\")\n      case (_, _, \"Mui.number\")                        => Normal(\"Double\")\n      case (_, \"children\", \"Mui.arrayOf(Mui.element)\") => Normal(\"js.Array[VdomElement]\")\n\n      case (\"Stepper\", \"children\", \"Mui.arrayOf(Mui.node)\") => Normal(\"js.Any\")\n\n      case (_, _, \"Mui.func\") =>\n        Normal(MuiTypeMapperFunction(compName, fieldName))\n\n    }\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/mui/MuiTypeMapperFunction.scala",
    "content": "package com.olvind\npackage mui\n\nobject MuiTypeMapperFunction {\n  val TouchTapEventHandler = \"TouchTapEvent => Callback\"\n  val TouchEventHandler    = \"ReactTouchEvent => Callback\"\n  val MouseEventHandler    = \"ReactMouseEvent => Callback\"\n  val FocusEventhandler    = \"ReactFocusEvent => Callback\"\n  val KeyboardEventHandler = \"ReactKeyboardEvent => Callback\"\n  val Callback             = \"Callback\"\n\n  def apply(compName: CompName, name: PropName): String =\n    (compName.value, name.value) match {\n      case (\"AppBar\", \"onTitleClick\")                 => \"ReactEvent => Callback\"\n      case (\"AppBar\", \"onLeftIconButtonClick\")        => \"ReactEvent => Callback\"\n      case (\"AppBar\", \"onRightIconButtonClick\")       => \"ReactEvent => Callback\"\n//      case (\"AppBar\", \"onLeftIconButtonTouchTap\")     => TouchTapEventHandler\n//      case (\"AppBar\", \"onRightIconButtonTouchTap\")    => TouchTapEventHandler\n//      case (\"AppBar\", \"onTitleTouchTap\")              => TouchTapEventHandler\n      case (\"AutoComplete\", \"onBlur\")                 => \"ReactFocusEventFromInput => Callback\"\n      case (\"AutoComplete\", \"onFocus\")                => \"ReactFocusEventFromInput => Callback\"\n      case (\"AutoComplete\", \"onNewRequest\")           => \"(String, Int) => Callback\"\n      case (\"AutoComplete\", \"onUpdateInput\")          => \"(String, js.Array[String], js.Object) => Callback\"\n      case (\"AutoComplete\", \"filter\")                 => \"(String, String, String) => Boolean\"\n      case (\"AutoComplete\", \"animation\")              => \"js.Function\"\n      case (\"AutoComplete\", \"onClose\")                => Callback\n      case (\"Card\", \"onExpandChange\")                 => \"Boolean => Callback\"\n      case (\"CardExpandable\", \"onExpanding\")          => Callback\n      case (\"Checkbox\", \"onCheck\")                    => \"(ReactMouseEvent, Boolean) => Callback\"\n      case (\"Chip\", \"onRequestDelete\")                => TouchEventHandler\n      case (\"DatePicker\", \"DateTimeFormat\")           => \"js.Function\"\n      case (\"DatePicker\", \"formatDate\")               => \"js.Date => String\"\n      case (\"DatePicker\", \"onChange\")                 => \"(js.UndefOr[Nothing], js.Date) => Callback\"\n      case (\"DatePicker\", \"onDismiss\")                => Callback\n      case (\"DatePicker\", \"onShow\")                   => Callback\n      case (\"DatePicker\", \"shouldDisableDate\")        => \"js.Date => Boolean\"\n      case (\"DatePickerDialog\", \"onAccept\")           => \"js.Date => Callback\"\n      case (\"DatePickerDialog\", \"DateTimeFormat\")     => \"js.Function\"\n      case (\"DatePickerDialog\", \"shouldDisableDate\")  => \"js.Date => Boolean\"\n      case (\"Dialog\", \"onRequestClose\")               => \"Boolean => Callback\"\n      case (\"DialogInline\", \"onRequestClose\")         => \"Boolean => Callback\"\n      case (\"Drawer\", \"onRequestChange\")              => \"(Boolean, String) => Callback\"\n      case (\"DropDownMenu\", \"onChange\")               => \"(TouchTapEvent, Int, T) => Callback\"\n      case (\"DropDownMenu\", \"animation\")              => \"js.Function\"\n      case (\"DropDownMenu\", \"onClose\")                => Callback\n      case (\"EnhancedSwitch\", \"onParentShouldUpdate\") => \"Boolean => Callback\"\n      case (\"EnhancedSwitch\", \"onSwitch\")             => \"(ReactMouseEvent, Boolean) => Callback\"\n      case (\"EnhancedTextarea\", \"onChange\")           => \"ReactEvent => Callback\"\n      case (\"EnhancedTextarea\", \"onHeightChange\")     => \"(ReactEvent, Int)=> Callback\"\n      case (\"IconButton\", \"onMouseOut\")               => MouseEventHandler\n      case (\"IconMenu\", \"animation\")                  => \"js.Function\"\n      case (\"IconMenu\", \"onChange\")                   => \"(ReactEvent, js.UndefOr[T]) => Callback\"\n      case (\"IconMenu\", \"onItemTouchTap\")             => \"(ReactTouchEvent, ReactElement) => Callback\"\n      case (\"IconMenu\", \"onItemClick\")                => \"(ReactEvent, ReactElement) => Callback\"\n      case (\"IconMenu\", \"onRequestChange\")            => \"(Boolean, String) => Callback\"\n      case (\"ListItem\", \"onNestedListToggle\")         => \"js.Any => Callback\"\n      case (\"Menu\", \"onItemClick\")                    => \"(ReactEvent, js.Object) => Callback\"\n      case (\"Menu\", \"onEscKeyDown\")                   => KeyboardEventHandler\n      case (\"Menu\", \"onChange\")                       => \"(TouchTapEvent, T | js.Array[T]) => Callback\"\n      case (\"Menu\", \"onMenuItemFocusChange\")          => \"(js.UndefOr[ReactEvent], Int) => Callback\"\n      case (\"Menu\", \"onItemTouchTap\")                 => \"(TouchTapEvent, js.Object) => Callback\"\n      case (\"MenuItem\", \"animation\")                  => \"js.Function\"\n      case (\"Popover\", \"onRequestClose\")              => \"String => Callback\"\n      case (\"Popover\", \"animation\")                   => \"js.Function\"\n      case (\"RadioButton\", \"onCheck\")                 => \"(ReactEvent, T) => Callback\"\n      case (\"RadioButtonGroup\", \"onCheck\")            => \"(ReactEvent, T) => Callback\"\n      case (\"RadioButtonGroup\", \"onChange\")           => \"(ReactEvent, T) => Callback\"\n      case (\"SelectField\", \"onChange\")                => \"(TouchTapEvent, Int, T) => Callback\"\n      case (\"Snackbar\", \"onActionClick\")              => \"ReactEvent => Callback\"\n      case (\"Slider\", \"onChange\")                     => \"(ReactMouseEvent, Double) => Callback\"\n      case (\"Slider\", \"onDragStart\")                  => \"ReactDragEvent => Callback\"\n      case (\"Slider\", \"onDragStop\")                   => \"ReactDragEvent => Callback\"\n      case (\"Slider\", \"onFocus\")                      => FocusEventhandler\n//      case (\"Snackbar\", \"onActionTouchTap\")           => TouchEventHandler\n      case (\"Snackbar\", \"onRequestClose\")             => \"String => Callback\"\n      case (\"StepContent\", \"transition\")              => \"js.Any\"\n      case (\"Stepper\", \"updateCompletedStatus\")       => \"(Int, ReactNode) => CallbackTo[Boolean]\"\n      case (\"Table\", \"onCellClick\")                   => \"(RowId, ColumnId) => Callback\"\n      case (\"Table\", \"onCellHover\")                   => \"(RowId, ColumnId) => Callback\"\n      case (\"Table\", \"onCellHoverExit\")               => \"(RowId, ColumnId) => Callback\"\n      case (\"Table\", \"onRowHover\")                    => \"RowId => Callback\"\n      case (\"Table\", \"onRowHoverExit\")                => \"RowId => Callback\"\n      case (\"Table\", \"onRowSelection\")                => \"String | js.Array[RowId] => Callback\"\n      case (\"TableBody\", \"onCellClick\")               => \"(RowId, ColumnId) => Callback\"\n      case (\"TableBody\", \"onCellHover\")               => \"(RowId, ColumnId) => Callback\"\n      case (\"TableBody\", \"onCellHoverExit\")           => \"(RowId, ColumnId) => Callback\"\n      case (\"TableBody\", \"onRowHoverExit\")            => \"RowId => Callback\"\n      case (\"TableBody\", \"onRowHover\")                => \"RowId => Callback\"\n      case (\"TableBody\", \"onRowSelection\")            => \"String | js.Array[RowId] => Callback\"\n      case (\"TableHeader\", \"onSelectAll\")             => \"Boolean => Callback\"\n      case (\"TableHeaderColumn\", \"onHover\")           => Callback\n      case (\"TableHeaderColumn\", \"onHoverExit\")       => Callback\n      case (\"TableHeaderColumn\", \"onClick\")           => \"(ReactMouseEvent, ColumnId) => Callback\"\n      case (\"TableRow\", \"onCellClick\")                => \"(ReactMouseEvent, RowId, ColumnId) => Callback\"\n      case (\"TableRow\", \"onCellHover\")                => \"(ReactMouseEvent, RowId, ColumnId) => Callback\"\n      case (\"TableRow\", \"onCellHoverExit\")            => \"(ReactMouseEvent, RowId, ColumnId) => Callback\"\n      case (\"TableRow\", \"onRowHover\")                 => \"(ReactMouseEvent, RowId) => Callback\"\n      case (\"TableRow\", \"onRowClick\")                 => \"(ReactMouseEvent, RowId) => Callback\"\n      case (\"TableRow\", \"onRowHoverExit\")             => \"(ReactMouseEvent, RowId) => Callback\"\n      case (\"TableRowColumn\", \"onClick\")              => \"(ReactMouseEvent, ColumnId) => Callback\"\n      case (\"TableRowColumn\", \"onHover\")              => \"(ReactMouseEvent, ColumnId) => Callback\"\n      case (\"TableRowColumn\", \"onHoverExit\")          => \"(ReactMouseEvent, ColumnId) => Callback\"\n      case (\"Tab\", \"onActive\")                        => \"ReactElement => Callback\"\n      case (\"Tabs\", \"onChange\")                       => \"(T, ReactEventFromHtml, ReactElement) => Callback\"\n      case (\"Tabs\", \"tabTemplate\")                    => \"js.Any\"\n      case (\"TextField\", \"onChange\")                  => \"(ReactEventFromInput, String) => Callback\"\n      case (\"TextField\", \"onEnterKeyDown\")            => \"ReactKeyboardEventFromInput => Callback\"\n      case (\"TextField\", \"onBlur\")                    => \"ReactFocusEventFromInput => Callback\"\n      case (\"TextField\", \"onFocus\")                   => \"ReactFocusEventFromInput => Callback\"\n      case (\"TimePicker\", \"onChange\")                 => \"(js.UndefOr[Nothing], js.Date) => Callback\"\n      case (\"TimePicker\", \"onShow\")                   => Callback\n      case (\"TimePicker\", \"onDismiss\")                => Callback\n      case (\"Toggle\", \"onToggle\")                     => \"(ReactMouseEvent, Boolean) => Callback\"\n\n      case (_, \"onBlur\")          => FocusEventhandler\n      case (_, \"onFocus\")         => FocusEventhandler\n      case (_, \"onKeyDown\")       => KeyboardEventHandler\n      case (_, \"onKeyUp\")         => KeyboardEventHandler\n      case (_, \"onKeyboardFocus\") => \"(ReactFocusEvent, Boolean) => Callback\"\n      case (_, \"onMouseEnter\")    => MouseEventHandler\n      case (_, \"onMouseLeave\")    => MouseEventHandler\n      case (_, \"onMouseUp\")       => MouseEventHandler\n      case (_, \"onMouseDown\")     => MouseEventHandler\n      case (_, \"onTouchStart\")    => TouchEventHandler\n      case (_, \"onTouchEnd\")      => TouchEventHandler\n      case (_, \"onClick\")         => \"ReactEvent => Callback\"\n\n      /*Added by roberto@leibman.net*/\n      case (\"DropDownMenu\", \"selectionRenderer\") => Callback //TODO ???\n      case (\"SelectField\", \"selectionRenderer\")  => Callback //TODO ???\n      case _ =>\n        throw new Error(\n          s\"\"\"case (\"${compName.value}\", \"${name.value}\") => Callback  //TODO: Add function type mapping in ${getClass().getName}\"\"\")\n    }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/mui/MuiTypeMemberMethodMapper.scala",
    "content": "package com.olvind\npackage mui\n\nobject MuiTypeMemberMethodMapper extends MemberMapper {\n\n  override def apply(compName: CompName)(memberMethod: MemberMethod): ParsedMethod =\n    ParsedMethod(\n      apply(compName, memberMethod.paramNames, memberMethod.name),\n      None\n    )\n\n  private def apply(c: CompName, args: Seq[String], m: String) =\n    (c.value, args.size, m) match {\n      case (\"DatePicker\", 0, \"getDate\")                => \"getDate(): js.Date\"\n      case (\"DatePicker\", 1, \"setDate\")                => \"setDate(d: js.Date): Unit\"\n      case (\"DatePicker\", 0, \"openDialog\")             => \"openDialog(): Unit\"\n      case (\"DatePicker\", 0, \"focus\")                  => \"focus(): Unit\"\n      case (\"Dialog\", 0, \"dismiss\")                    => \"dismiss(): Unit\"\n      case (\"Dialog\", 0, \"show\")                       => \"show(): Unit\"\n      case (\"Dialog\", 0, \"isOpen\")                     => \"isOpen(): Boolean\"\n      case (\"Drawer\", 0, \"open\")                       => \"open(): Unit\"\n      case (\"Drawer\", 0, \"close\")                      => \"close(): Unit\"\n      case (\"Drawer\", 0, \"toggle\")                     => \"toggle(): Unit\"\n      case (\"Snackbar\", 0, \"dismiss\")                  => \"dismiss(): Unit\"\n      case (\"Snackbar\", 0, \"show\")                     => \"show(): Unit\"\n      case (\"Checkbox\", 0, \"isChecked\")                => \"isChecked(): Boolean\"\n      case (\"Checkbox\", 1, \"setChecked\")               => \"isChecked(newCheckedValue: Boolean): Unit\"\n      case (\"RadioButtonGroup\", 0, \"getSelectedValue\") => \"getSelectedValue(): String\"\n      case (\"RadioButtonGroup\", 1, \"setSelectedValue\") =>\n        \"setSelectedValue(newSelectionValue: String): Unit\"\n      case (\"RadioButtonGroup\", 0, \"clearValue\") => \"clearValue(): Unit\"\n      case (\"Slider\", 2, \"onDragUpdate\") =>\n        \"onDragUpdate(event: js.Any, `type`: js.Any): js.Dynamic\"\n      case (\"Toggle\", 0, \"isToggled\")       => \"isToggled(): Boolean\"\n      case (\"Toggle\", 1, \"setToggled\")      => \"setToggled(newToggledValue: Boolean): Unit\"\n      case (\"TextField\", 0, \"blur\")         => \"blur(): Unit\"\n      case (\"TextField\", 0, \"clearValue\")   => \"clearValue(): Unit\"\n      case (\"TextField\", 0, \"focus\")        => \"focus(): Unit\"\n      case (\"TextField\", 0, \"getValue\")     => \"getValue(): String\"\n      case (\"TextField\", 1, \"setErrorText\") => \"setErrorText(newErrorText: String): Unit\"\n      case (\"TextField\", 1, \"setValue\")     => \"setValue(newValue: String): Unit\"\n      case (\"TimePicker\", 0, \"getTime\")     => \"getTime(): js.Date\"\n      case (\"TimePicker\", 1, \"setTime\")     => \"setTime(d: js.Date): Unit\"\n      case (\"TimePicker\", 1, \"formatTime\")  => \"formatTime(d: js.Date): String\"\n      case (\"TimePicker\", 0, \"openDialog\")  => \"openDialog(): Unit\"\n      case (\"TimePicker\", 0, \"focus\")       => \"focus(): Unit\"\n\n      /* Added by roberto@leibman.net for material-ui */\n      case (\"AutoComplete\", 0, \"blur\")              => \"blur(): Unit\"\n      case (\"AutoComplete\", 0, \"close\")             => \"close(): Unit\"\n      case (\"AutoComplete\", 0, \"focus\")             => \"focus(): Unit\"\n      case (\"CircularProgress\", 1, \"rotateWrapper\") => \"rotateWrapper(wrapper: Wrapper): Unit\"\n      case (\"CircularProgress\", 1, \"scalePath\")     => \"scalePath(path: CircularProgressPath): Unit\"\n      case (\"DatePicker\", 0, \"getControlledDate\")   => \"getControlledDate(): js.Date\"\n      case (\"DatePicker\", 0, \"isControlled\")        => \"isControlled(): Unit\"\n      case (\"Drawer\", 0, \"removeBodyTouchListeners\")=> \"removeBodyTouchListeners(): Unit\"\n      case (\"Drawer\", 1, \"close\")                   => \"close(reason: String): Unit\"\n      case (\"Drawer\", 0, \"disableSwipeHandling\")    => \"disableSwipeHandling(): Unit\"\n      case (\"Drawer\", 0, \"enableSwipeHandling\")     => \"enableSwipeHandling(): Unit\"\n      case (\"Drawer\", 0, \"getMaxTranslateX\")        => \"getMaxTranslateX(): Int\"\n      case (\"Drawer\", 0, \"getStyles\")               => \"getStyles(): CssProperties\"\n      case (\"Drawer\", 0, \"getTranslateMultiplier\")  => \"getTranslateMultiplier(): Int\"\n      case (\"Drawer\", 1, \"getTranslateX\")           => \"getTranslateX(currentX: Int): Int\"\n      case (\"Drawer\", 0, \"getTranslatedWidth\")      => \"getTranslatedWidth(): Double\"\n      case (\"Drawer\", 1, \"open\")                    => \"open(reason: String): Unit\"\n      case (\"Drawer\", 1, \"setPosition\")             => \"setPosition(position: Int): Unit\"\n      case (\"Drawer\", 0, \"shouldShow\")              => \"shouldShow(): Boolean\"\n      case (\"DropDownMenu\", 0, \"getInputNode\")      => \"getInputNode(): js.Any\"\n      case (\"DropDownMenu\", 0, \"setWidth\")          => \"setWidth(): Unit\"\n      case (\"GridTile\", 0, \"ensureImageCover\")      => \"ensureImageCover(): Unit\"\n      case (\"IconButton\", 0, \"hideTooltip\")         => \"hideTooltip(): Unit\"\n      case (\"IconButton\", 0, \"setKeyboardFocus\")    => \"setKeyboardFocus(): Unit\"\n      case (\"IconButton\", 0, \"showTooltip\")         => \"showTooltip(): Unit\"\n      case (\"IconMenu\", 2, \"close\")                 => \"close(): Unit\"\n      case (\"IconMenu\", 0, \"isOpen\")                => \"isOpen(): Boolean\"\n      case (\"IconMenu\", 2, \"open\")                  => \"open(reason: String, event: js.Any): Unit\"\n      case (\"LinearProgress\", 5, \"barUpdate\") =>\n        \"barUpdate(id: String, step: Integer, barElement: String, stepValues: Array[Array[Int]], timeToNextStep: Long): Unit\"\n      case (\"ListItem\", 1, \"applyFocusState\") =>\n        \"applyFocusState(focusState: MuiFocusedState): Unit /*One of none, focused, keyboardfocused*/\"\n      case (\"ListItem\", 3, \"createDisabledElement\") =>\n        \"createDisabledElement(styles: CssProperties, contentChildren: Array[CtorType.ChildArg], additionalProps: js.Any): Unit\"\n      case (\"ListItem\", 3, \"createLabelElement\") =>\n        \"createLabelElement(styles: CssProperties, contentChildren: Array[CtorType.ChildArg], additionalProps: js.Any): Unit\"\n      case (\"ListItem\", 3, \"createTextElement\") =>\n        \"createTextElement(styles: CssProperties, data: js.Any, key: String): Unit\"\n      case (\"ListItem\", 4, \"pushElement\") =>\n        \"pushElement(children: Array[CtorType.ChildArg], element: js.Any, baseStyles: CssProperties, additionalProps: js.Any): Unit\"\n      case (\"Menu\", 1, \"cancelScrollEvent\") => \"cancelScrollEvent(event: js.Any): Unit\"\n      case (\"Menu\", 4, \"cloneMenuItem\") =>\n        \"cloneMenuItem(child: js.Any, childIndex: Int, styles: CssProperties, index: Int): Unit\"\n      case (\"Menu\", 1, \"decrementKeyboardFocusIndex\") =>\n        \"decrementKeyboardFocusIndex(event: js.Any): Unit\"\n      case (\"Menu\", 1, \"getFilteredChildren\") => \"getFilteredChildren(): Array[js.Any]\"\n      case (\"Menu\", 2, \"getLastSelectedIndex\") =>\n        \"getLastSelectedIndex(props: js.Any, filteredChildren: Array[CtorType.ChildArg]): Unit\"\n      case (\"Menu\", 1, \"getMenuItemCount\") => \"getMenuItemCount(): Int\"\n      case (\"Menu\", 1, \"getValueLink\")     => \"getValueLink(): Unit\" //Deprecated\n      case (\"Menu\", 2, \"incrementKeyboardFocusIndex\") =>\n        \"incrementKeyboardFocusIndex(event: js.Any, filteredChildren: Array[CtorType.ChildArg]): Unit\"\n      case (\"Menu\", 2, \"isChildSelected\") =>\n        \"isChildSelected(child: js.Any, props: js.Any): Boolean\"\n      case (\"Menu\", 3, \"setFocusIndex\") =>\n        \"setFocusIndex(event: js.Any, newIndex: Int, isKeyboardFocused: Boolean): Unit\"\n      case (\"Menu\", 2, \"setFocusIndexStartsWith\") =>\n        \"setFocusIndexStartsWith(event: js.Any, keys: String): Unit\"\n      case (\"Menu\", 1, \"setKeyboardFocused\")          => \"setKeyboardFocused(value: Boolean): Unit\"\n      case (\"Menu\", 0, \"setScollPosition\")            => \"setScollPosition(): Unit\"\n      case (\"Menu\", 0, \"setWidth\")                    => \"setWidth(): Unit\"\n      case (\"Menu\", 3, \"setFocusIndexStartsWith\")     => \"setFocusIndexStartsWith(event: js.Any, keys: js.Any, filteredChildren: js.Any): Unit\"\n      case (\"MenuItem\", 0, \"applyFocusState\")         => \"applyFocusState(): Unit\"\n      case (\"MuiThemeProvider\", 0, \"getChildContext\") => \"getChildContext(): MuiTheme\"\n      case (\"Popover\", 5, \"applyAutoPositionIfNeeded\") =>\n        \"applyAutoPositionIfNeeded(anchor: js.Any, target: js.Any, targetOrigin: js.Any, anchorOrigin: js.Any, targetPosition: js.Any): Unit\"\n      case (\"Popover\", 1, \"autoCloseWhenOffScreen\") =>\n        \"autoCloseWhenOffScreen(anchorPosition: js.Any): Unit\"\n      case (\"Popover\", 1, \"getAnchorPosition\") => \"getAnchorPosition(): Position\"\n      case (\"Popover\", 3, \"getOverlapMode\") =>\n        \"getOverlapMode(anchor: js.Any, target: js.Any, median: js.Any): Unit\"\n      case (\"Popover\", 2, \"getPositions\")      => \"getPositions(anchor: js.Any, target: js.Any): Unit\"\n      case (\"Popover\", 1, \"getTargetPosition\") => \"getTargetPosition(): Position\"\n      case (\"Popover\", 1, \"requestClose\") =>\n        \"requestClose(reason: String): Unit\" //clickaway or offScren\n      case (\"RadioButton\", 0, \"getValue\")   => \"getValue(): js.Any\"\n      case (\"RadioButton\", 0, \"isChecked\")  => \"isChecked(): Boolean\"\n      case (\"RadioButton\", 1, \"setChecked\") => \"setChecked(value: Boolean): Unit\"\n      case (\"RadioButtonGroup\", 1, \"hasCheckAttribute\") =>\n        \"hasCheckAttribute(radioButton: js.Any): Boolean\"\n      case (\"RadioButtonGroup\", 1, \"updateRadioButtons\") =>\n        \"updateRadioButtons(newSelection: js.Any): Unit\"\n      case (\"RefreshIndicator\", 0, \"getArcDeg\")         => \"getArcDeg(): Double\"\n      case (\"RefreshIndicator\", 0, \"getCircleAttr\")     => \"getCircleAttr(): Double\"\n      case (\"RefreshIndicator\", 0, \"getCircleStyle\")    => \"getCircleStyle(): CssProperties\"\n      case (\"RefreshIndicator\", 0, \"getFactor\")         => \"getFactor(): Double\"\n      case (\"RefreshIndicator\", 0, \"getPaddingSize\")    => \"getPaddingSize(): Double\"\n      case (\"RefreshIndicator\", 0, \"getPaperSize\")      => \"getPaperSize(): Double\"\n      case (\"RefreshIndicator\", 0, \"getPolygonStyle\")   => \"getPolygonStyle(): CssProperties\"\n      case (\"RefreshIndicator\", 0, \"getTheme\")          => \"getTheme(): MuiTheme\"\n      case (\"RefreshIndicator\", 0, \"renderChildren\")    => \"renderChildren(): Unit\"\n      case (\"RefreshIndicator\", 1, \"rotateWrapper\")     => \"rotateWrapper(wrapper: js.Any): Unit\"\n      case (\"RefreshIndicator\", 2, \"scalePath\")         => \"scalePath(path: js.Any, step: Int): Unit\"\n      case (\"Slider\", 0, \"clearValue\")                  => \"clearValue(): Unit\"\n      case (\"Slider\", 0, \"getTrackOffset\")              => \"getTrackOffset(): Unit\" //TODO\n      case (\"Slider\", 0, \"getValue\")                    => \"getValue(): Unit\" //TODO\n      case (\"Slider\", 1, \"onDragStart\")                 => \"onDragStart(): Unit\" //TODO\n      case (\"Slider\", 1, \"onDragStop\")                  => \"onDragStop(): Unit\" //TODO\n      case (\"Slider\", 2, \"setValueFromPosition\")        => \"setValueFromPosition(): Unit\" //TODO\n      case (\"Snackbar\", 0, \"setAutoHideTimer\")          => \"setAutoHideTimer(): Unit\" //TODO\n      case (\"Snackbar\", 0, \"setTransitionTimer\")        => \"setTransitionTimer(): Unit\" //TODO\n      case (\"Stepper\", 0, \"getChildContext\")            => \"getChildContext(): Unit\" //TODO\n      case (\"Table\", 1, \"createTableBody\")              => \"createTableBody(): Unit\" //TODO\n      case (\"Table\", 1, \"createTableFooter\")            => \"createTableFooter(): Unit\" //TODO\n      case (\"Table\", 1, \"createTableHeader\")            => \"createTableHeader(): Unit\" //TODO\n      case (\"Table\", 0, \"isScrollbarVisible\")           => \"isScrollbarVisible(): Boolean\"\n      case (\"TableBody\", 1, \"createRowCheckboxColumn\")  => \"createRowCheckboxColumn(): Unit\" //TODO\n      case (\"TableBody\", 0, \"createRows\")               => \"createRows(): Unit\"\n      case (\"TableBody\", 1, \"flattenRanges\")            => \"flattenRanges(): Unit\" //TODO\n      case (\"TableBody\", 2, \"genRangeOfValues\")         => \"genRangeOfValues(): Unit\" //TODO\n      case (\"TableBody\", 1, \"getColumnId\")              => \"getColumnId(): Unit\" //TODO\n      case (\"TableBody\", 1, \"getSelectedRows\")          => \"getSelectedRows(): Unit\" //TODO\n      case (\"TableBody\", 1, \"isRowSelected\")            => \"isRowSelected(): Unit\" //TODO\n      case (\"TableBody\", 2, \"isValueInRange\")           => \"isValueInRange(): Unit\" //TODO\n      case (\"TableBody\", 2, \"processRowSelection\")      => \"processRowSelection(): Unit\" //TODO\n      case (\"TableBody\", 2, \"splitRange\")               => \"splitRange(): Unit\" //TODO\n      case (\"TableHeader\", 0, \"createBaseHeaderRow\")    => \"createBaseHeaderRow(): Unit\" //TODO\n      case (\"TableHeader\", 2, \"createSuperHeaderRow\")   => \"createSuperHeaderRow(): Unit\" //TODO\n      case (\"TableHeader\", 0, \"createSuperHeaderRows\")  => \"createSuperHeaderRows(): Unit\" //TODO\n      case (\"TableHeader\", 1, \"getCheckboxPlaceholder\") => \"getCheckboxPlaceholder(): Unit\" //TODO\n      case (\"TableHeader\", 1, \"getSelectAllCheckboxColumn\") =>\n        \"getSelectAllCheckboxColumn(): Unit\" //TODO\n      case (\"TableRow\", 1, \"onRowClick\")          => \"onRowClick(): Unit\" //TODO\n      case (\"TableRow\", 1, \"onRowHover\")          => \"onRowHover(): Unit\" //TODO\n      case (\"TableRow\", 1, \"onRowHoverExit\")      => \"onRowHoverExit(): Unit\" //TODO\n      case (\"Tabs\", 2, \"getSelected\")             => \"getSelected(): Unit\" //TODO\n      case (\"Tabs\", 1, \"getSelectedIndex\")        => \"getSelectedIndex(): Int\"\n      case (\"Tabs\", 0, \"getTabCount\")             => \"getTabCount(): Int\"\n      case (\"Tabs\", 0, \"getTabs\")                 => \"getTabs(): Unit\" //TODO\n      case (\"Tabs\", 1, \"getValueLink\")            => \"getValueLink(): Unit\" //TODO\n      case (\"TextField\", 0, \"getInputNode\")       => \"getInputNode(): Unit\" //TODO\n      case (\"TextField\", 0, \"select\")             => \"select(): Unit\"\n      case (\"TimePicker\", 0, \"getControlledTime\") => \"getControlledTime(): js.Date\"\n      case (\"TimePicker\", 0, \"isControlled\")      => \"isControlled(): Boolean\"\n\n      case other ⇒\n        println(\"missing types for method: \" + other)\n        m + args.map(sanitize(_) + \": js.Any\").mkString(\"(\", \", \", \")\") + \": js.Dynamic\"\n    }\n  def sanitize(s: String) =\n    if (s == \"val\") \"`val`\" else s\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/package.scala",
    "content": "package com\n\nimport java.io.File\n\nimport ammonite.ops.Path\n\npackage object olvind {\n  private[olvind] def panic(s: String): Nothing =\n    throw new RuntimeException(s)\n\n  def padTo(s: String)(n: Int): String =\n    s + (\" \" * (n - s.length))\n\n  def indent(n: Int): String =\n    \"  \" * n\n\n  def add(_p: Path, frags: String): Path =\n    frags.split(\"/\").filterNot(_.isEmpty).foldLeft(_p) {\n      case (p, \".\")  ⇒ p\n      case (p, \"..\") ⇒ p.copy(segments = p.segments.dropRight(1))\n      case (p, frag) ⇒ p / frag\n    }\n\n  def exists(path: Path): Boolean =\n    new File(path.toString).exists\n\n  def printToFile(f: Path)(op: java.io.PrintWriter => Unit): Unit = {\n    val p = new java.io.PrintWriter(f.toIO, \"UTF-8\")\n    try { op(p) } finally { p.close() }\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/printers.scala",
    "content": "package com.olvind\n\nsealed trait OutFile\ncase class PrimaryOutFile(filename: CompName, content: String, secondaries: Seq[SecondaryOutFile])\n    extends OutFile\ncase class SecondaryOutFile(filename: String, content: String) extends OutFile\n\nobject Printer {\n  case class FieldStats(maxFieldNameLen: Int, maxTypeNameLen: Int)\n\n  def apply(prefix: String, comp: ParsedComponent): (PrimaryOutFile, Seq[SecondaryOutFile]) = {\n    val fs: FieldStats =\n      FieldStats(\n        maxFieldNameLen = comp.fields.map(_.name.value.length).max,\n        maxTypeNameLen = comp.fields.map(_.typeName.length).max\n      )\n\n    val p =\n      PrimaryOutFile(\n        comp.name,\n        Seq(\n          s\"\\ncase class ${comp.nameDef(prefix, withBounds = true)}(\",\n          comp.fields\n            .filterNot(_.name == PropName(\"children\"))\n            .map(\n              p => outProp(p, fs)\n            )\n            .mkString(\"\", \",\\n\", \")\") + bodyChildren(prefix, comp)\n        ) mkString \"\\n\",\n        comp.methodClassOpt.toSeq map outMethodClass\n      )\n\n    (p, comp.enumClases map outEnumClass)\n  }\n\n  def hack(comp: ParsedComponent): String =\n    comp.genericParams\n      .map { p ⇒\n        s\"\"\"implicit def ev${p.name}(${p.name.toLowerCase}: ${p.name}): js.Any = ${p.name.toLowerCase}.asInstanceOf[js.Any]\nimplicit def ev2${p.name}(${p.name.toLowerCase}: ${p.name} | js.Array[${p.name}]): js.Any = ${p.name.toLowerCase}.asInstanceOf[js.Any]\"\"\"\n      }\n      .mkString(\";\")\n\n  def bodyChildren(prefix: String, comp: ParsedComponent): String =\n    (comp.childrenOpt, comp.definition.multipleChildren) match {\n      case (None, _) =>\n        s\"\"\"{\n          |\n          |${indent(1)}def apply() = {\n          |${indent(2)}${hack(comp)}\n          |${indent(2)}val props = JSMacro[${comp.nameDef(prefix)}](this)\n          |${indent(2)}val f = JsComponent[js.Object, Children.None, Null]($prefix.${comp.name.value})\n          |${indent(2)}f(props)\n          |${indent(1)}}\n          |}\n        \"\"\".stripMargin\n\n      case (Some(childrenProp), true) =>\n        s\"\"\"{\n           |\n           |${outChildrenComment(childrenProp.commentOpt)}\n           |${indent(1)}def apply(children: ${childrenProp.baseType.name}*) = {\n           |${indent(2)}${hack(comp)}\n           |${indent(2)}val props = JSMacro[${comp.nameDef(prefix)}](this)\n           |${indent(2)}val f = JsComponent[js.Object, Children.Varargs, Null]($prefix.${comp.name.value})\n           |${indent(2)}f(props)(children: _*)\n           |${indent(1)}}\n           |}\"\"\".stripMargin\n\n      case (Some(childrenProp), false) =>\n        s\"\"\"{\n           |\n           |${outChildrenComment(childrenProp.commentOpt)}\n           |${indent(1)}def apply(child: ${childrenProp.typeName} = js.undefined) = {\n           |${indent(2)}${if (!childrenProp.isRequired) \"import js.UndefOr._\"}\n           |${indent(2)}${hack(comp)}\n           |${indent(2)}val props = JSMacro[${comp.nameDef(prefix)}](this)\n           |${indent(2)}val f = JsComponent[js.Object, Children.Varargs, Null]($prefix.${comp.name.value})\n           |${indent(2)}${if (childrenProp.isRequired) \"f(props)(child)\"\n           else \"child.fold(f(props)())(ch => f(props)(ch))\"}\n           |${indent(1)}}\n           |}\"\"\".stripMargin\n    }\n\n  def outChildrenComment(oc: Option[PropComment]): String =\n    oc.flatMap(_.value) match {\n      case Some(c) =>\n        c.split(\"\\n\")\n          .mkString(\n            s\"${indent(1)}/**\\n ${indent(1)} * @param children \",\n            \"\\n\" + indent(2),\n            s\"\\n${indent(1)} */\"\n          )\n      case None => \"\"\n    }\n\n  def outComment(_commentOpt: Option[PropComment], inheritedFrom: Option[CompName]): String = {\n    val inheritedLine: Option[String] =\n      inheritedFrom.map(i => s\"(Passed on to $i)\")\n\n    val lines: Seq[String] =\n      _commentOpt match {\n        case None => inheritedLine.toSeq\n        case Some(comment) =>\n          val anns: Seq[String] =\n            comment.anns.collect {\n              case Param(value) => s\"@param $value\"\n            }\n\n          comment.value.toSeq ++ inheritedLine ++ (if (anns.isEmpty) Nil else Seq(\"\\n\")) ++ anns\n      }\n\n    if (lines.isEmpty) \"\"\n    else lines.flatMap(_.split(\"\\n\")).mkString(s\"${indent(1)}/** \", s\"\\n${indent(2)} \", \" */\\n\")\n  }\n\n  def safeName(name: String): String = {\n    val safeSubstitutions = Map(\n      (\"super\" -> \"`super`\"),\n      (\"type\"  -> \"`type`\")\n    )\n    safeSubstitutions.get(name).getOrElse(name)\n  }\n\n  def outProp(p: ParsedProp, fs: FieldStats): String = {\n    val comment = outComment(p.commentOpt, p.inheritedFrom)\n\n    val intro: String = {\n      val fixedName: String = safeName(p.name.value)\n      val deprecation: String =\n        (p.deprecatedMsg, p.commentOpt.exists(_.anns.contains(Ignore))) match {\n          case (Some(msg), _) => s\"\"\"${indent(1)}@deprecated(\"$msg\", \"\")\\n\"\"\"\n          case (None, true)   => \"\" //s\"\"\"${indent(1)}@deprecated(\"Internal API\", \"\")\\n\"\"\"\n          case _              => \"\"\n        }\n      s\"$comment$deprecation${indent(1)}${padTo(fixedName + \": \")(fs.maxFieldNameLen + 2)}\"\n    }\n\n    p.isRequired match {\n      case true  => intro + p.typeName\n      case false => intro + padTo(p.typeName)(fs.maxTypeNameLen) + \" = js.undefined\"\n    }\n  }\n\n  def outEnumClass(c: ParsedEnumClass): SecondaryOutFile =\n    SecondaryOutFile(\n      c.name,\n      s\"\"\"\n         |class ${c.name}(val value: String) extends AnyVal\n         |object ${c.name} {\n         |${c.identifiers\n           .map {\n             case (ident, original) =>\n               s\"\"\"${indent(1)}val ${safeName(ident.value)} = new ${c.name}(\"$original\")\"\"\"\n           }\n           .mkString(\"\\n\")}\n         |${indent(1)}val values = ${c.identifiers.map(_._1.value).map(safeName).toList}\n         |}\"\"\".stripMargin\n    )\n\n  def outMethodClass(c: ParsedMethodClass): SecondaryOutFile =\n    SecondaryOutFile(\n      c.className,\n      s\"\"\"\n         |@js.native\n         |trait ${c.className} extends js.Object {\n         |${c.methods\n           .map { m =>\n             val deprecated: String =\n               if (m.toString.toLowerCase.contains(\"deprecated\"))\n                 s\"\"\"${indent(1)}@deprecated(\"\", \"\")\\n\"\"\"\n               else \"\"\n             val comment = outComment(m.commentOpt, None)\n             s\"$comment$deprecated${indent(1)}def ${m.definition} = js.native\"\n           }\n           .mkString(\"\\n\\n\")}\n         |}\"\"\".stripMargin\n    )\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/props.scala",
    "content": "package com.olvind\n\nfinal case class ParsedComponent(\n    definition: ComponentDef,\n    fields: Seq[ParsedProp],\n    methodClassOpt: Option[ParsedMethodClass]\n) {\n\n  val name = definition.name\n\n  val childrenOpt: Option[ParsedProp] = {\n    val field = fields.find(_.name.value == \"children\")\n    if (field.isEmpty && definition.forceChildren) {\n      Some(\n        ParsedProp(\n          name = PropName(\"chidren\"),\n          isRequired = true,\n          baseType = Normal(\"VdomNode\"),\n          commentOpt = None,\n          deprecatedMsg = None,\n          inheritedFrom = None\n        ))\n    } else {\n      field\n    }\n  }\n\n  val genericParams: Seq[ParsedGeneric] =\n    fields\n      .foldLeft(Map.empty[String, Boolean]) {\n        case (m, ParsedProp(_, _, Normal(_, Some(Generic(name, jsObject))), _, _, _)) ⇒\n          m.updated(name, m.getOrElse(name, jsObject) || jsObject)\n        case (m, other) ⇒\n          m\n      }\n      .map(ParsedGeneric.tupled)\n      .toSeq\n\n  val enumClases: Seq[ParsedEnumClass] =\n    fields.map(_.baseType).collect {\n      case o: Enum => o.enumClass\n    }\n\n  def nameDef(prefix: String, withBounds: Boolean = false): String = {\n    val tpeParam =\n      if (genericParams.isEmpty) \"\"\n      else\n        genericParams\n          .map { p ⇒\n            val bounds: String =\n              (p.jsObject, withBounds) match {\n                case (_, false)    ⇒ \"\"\n                case (true, true)  ⇒ \"\" //\" <% js.Any\" //todo: revisit\n                case (false, true) ⇒ \"\" // <% js.Any\"\n              }\n            s\"${p.name}$bounds\"\n          }\n          .mkString(\"[\", \", \", \"]\")\n\n    s\"$prefix$name$tpeParam\"\n  }\n}\n\nfinal case class ParsedMethodClass(\n    className: String,\n    methods: Seq[ParsedMethod]\n)\n\nfinal case class ParsedEnumClass(\n    name: String,\n    identifiers: Seq[(Identifier, String)]\n)\n\nsealed trait Annotation\ncase class Deprecated(reason: String) extends Annotation\ncase class Param(value: String)       extends Annotation\ncase object Ignore                    extends Annotation\n\nfinal case class ParsedProp(\n    name: PropName,\n    isRequired: Boolean = false,\n    baseType: Type = Normal(\"js.Any\"),\n    commentOpt: Option[PropComment] = None,\n    deprecatedMsg: Option[String] = None,\n    inheritedFrom: Option[CompName] = None\n) {\n\n  val typeName: String =\n    if (isRequired) baseType.name\n    else s\"js.UndefOr[${baseType.name}]\"\n}\n\nfinal case class ParsedGeneric(name: String, jsObject: Boolean)\n\nsealed trait Type {\n  def name: String\n}\n\ncase class Generic(name: String, jsObject: Boolean = false)\n\ncase class Normal(name: String, genericOpt: Option[Generic] = None) extends Type {\n  def generic(name: String) =\n    copy(genericOpt = Some(Generic(name)))\n\n  def genericJs(name: String) =\n    copy(genericOpt = Some(Generic(name, jsObject = true)))\n}\n\ncase class Enum(component: CompName, ss: Seq[String], specialName: String = \"\") extends Type {\n  val fixedNames: Seq[(Identifier, String)] =\n    ss.map { m =>\n      (Identifier.safe(m), m)\n    }\n\n  override val name: String =\n    if (specialName.isEmpty()) fixedNames.map(_._1.value.capitalize).mkString(\"\") else specialName\n\n  def enumClass: ParsedEnumClass =\n    ParsedEnumClass(name, fixedNames)\n}\n\nfinal case class ParsedMethod(definition: String, commentOpt: Option[PropComment]) {\n  require(!definition.contains(\"=\"))\n  require(!definition.startsWith(\"def \"))\n}\n\nfinal case class PropUnparsed(\n    fromComp: CompName,\n    unparsed: PropTypeUnparsed,\n    commentOpt: Option[PropComment]\n)\n\nfinal case class PropTypeUnparsed(value: String) extends Wrapper[String]\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/JsParser.scala",
    "content": "package com.olvind\npackage requiresjs\n\nimport ammonite.ops.{Path, read}\nimport jdk.nashorn.internal.parser.Parser\nimport jdk.nashorn.internal.runtime.options.Options\nimport jdk.nashorn.internal.runtime.{Context, ErrorManager, Source}\n\nobject JsParser {\n\n  val options = new Options(\"nashorn\")\n  options.set(\"anon.functions\", true)\n  options.set(\"parse.only\", true)\n  options.set(\"scripting\", true)\n  options.set(\"optimistic.types\", true)\n\n  def cleanupLine(str: String) =\n    str.replaceAll(\"//.*$\", \"\") //remove end line (//) comments here, they break stuff, particularly in the middle of a declaration.\n\n  def apply(jsFile: Path): ParsedFile = {\n    val content = read.lines(jsFile).map(cleanupLine).toList.mkString(\"\\n\")\n\n    /* setup */\n    val errors  = new ErrorManager()\n    val context = new Context(options, errors, Thread.currentThread().getContextClassLoader)\n    val source  = Source.sourceFor(jsFile.toString, content)\n    val parser  = new Parser(context.getEnv, source, errors)\n    val parsed  = parser.parse()\n\n    ParsedFile(jsFile, content, parsed)\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/Lazy.scala",
    "content": "package com.olvind.requiresjs\n\n// semi-solves circular dependencies\nfinal class Lazy[+T](_t: => T) {\n  lazy val run: T = _t\n\n  def map[U](f: T => U): Lazy[U] =\n    new Lazy(f(_t))\n\n  def flatMap[U](f: T => Lazy[U]) =\n    new Lazy(f(_t).run)\n}\n\nobject Lazy {\n  def apply[T](_t: => T) =\n    new Lazy(_t)\n}"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/Require.scala",
    "content": "package com.olvind\npackage requiresjs\n\nimport ammonite.ops._\nimport jdk.nashorn.internal.ir.{FunctionNode, Node, ObjectNode}\n\nimport scala.language.postfixOps\n\nobject Require {\n  def apply(p: Path, indexNames: Set[String]): Required = {\n    val ctx = new ScanCtx\n\n    def recurse(requiredPath: Path, ctx: ScanCtx): Lazy[Required] =\n      ctx.required(requiredPath, doRecurse(requiredPath))\n\n    def doRecurse(requiredPath: Path)(ctx: ScanCtx): Lazy[Required] = {\n      val ResolvedPath(filePath: Path, folderPath: Path) =\n        ResolvePath(requiredPath, indexNames)\n\n      ctx.parsedFile(filePath) match {\n        case ParsedFile(_, fileStr: String, fileParsed: FunctionNode) =>\n          val imports: Seq[Import]                  = VisitorImports(fileParsed, folderPath).value\n          val components: Map[CompName, ObjectNode] = VisitorComponents(fileParsed).value\n          val memberMethods\n            : Map[CompName, Set[MemberMethod]] = VisitorComponentMembers(fileParsed).value\n          val exports: Seq[Node]               = VisitorExports(fileParsed).value\n\n          //todo: split require/react parsing!\n          def component(compName: CompName, o: ObjectNode) =\n            Single(\n              compName,\n              FoundComponent(\n                name = compName,\n                file = filePath,\n                jsContent = fileStr.substring(o.getStart, o.getFinish),\n                props = VisitorPropType(compName, o, fileStr, imports).value,\n                methods = memberMethods.get(compName)\n              )\n            )\n\n          components.toList.distinct match {\n            case Nil ⇒\n              /* todo: Parse exports! */\n              val modules: Seq[Lazy[Required]] =\n                imports.collect {\n                  case Import(varName, Left(innerPath: Path)) =>\n                    recurse(innerPath, ctx)\n                }.distinct\n\n              Required(requiredPath, modules)\n\n            case (compName, o) :: Nil ⇒\n              Lazy(component(compName, o))\n\n            case many ⇒\n              Required(filePath, many map {\n                case (name, obj) => Lazy(component(name, obj))\n              })\n          }\n\n        case other =>\n          println(other)\n          Required(requiredPath, Nil)\n      }\n    }\n\n    recurse(p, ctx).run\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/ResolvePath.scala",
    "content": "package com.olvind\npackage requiresjs\n\nimport ammonite.ops.{Path, exists}\n\ncase class ResolvedPath(file: Path, folder: Path)\n\nobject ResolvePath {\n  def apply(p: Path, indexNames: Set[String]): ResolvedPath =\n    if (exists(p)) {\n      if (p.isDir) {\n        val file = indexNames.find { name =>\n          (p / name).toIO.exists\n        }\n        ResolvedPath(p / file.get, p)\n      } else {\n        panic(\"handle this when it happens\")\n      }\n\n    } else {\n      val withExtension: Path =\n        p.copy(segments = p.segments.dropRight(1) :+ p.segments.last + \".js\")\n\n      if (exists(withExtension)) {\n        ResolvedPath(withExtension, p.copy(segments = p.segments.dropRight(1)))\n      } else {\n        panic(s\"Could not resolve path: $p\")\n      }\n    }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/ScanCtx.scala",
    "content": "package com.olvind.requiresjs\n\nimport ammonite.ops.Path\nimport com.olvind.CompName\n\nimport scala.collection.mutable\n\nclass ScanCtx {\n\n  private val parsedFiles   = mutable.Map.empty[Path, ParsedFile]\n  private val requiredFiles = mutable.Map.empty[Path, Lazy[Required]]\n  private val comps         = mutable.Map.empty[CompName, FoundComponent]\n\n  def parsedFile(p: Path): ParsedFile =\n    parsedFiles.getOrElseUpdate(p, JsParser(p))\n\n  def required(p: Path, require: ScanCtx ⇒ Lazy[Required]): Lazy[Required] =\n    requiredFiles.getOrElseUpdate(p, new Lazy(this).flatMap(require))\n\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/VisitorComponentMembers.scala",
    "content": "package com.olvind\npackage requiresjs\n\nimport jdk.nashorn.internal.ir._\n\nimport scala.collection.JavaConverters._\nimport scala.collection.mutable\n\ncase class VisitorComponentMembers(n: FunctionNode)\n    extends VisitorHelper[FunctionNode, Map[CompName, Set[MemberMethod]]](n) {\n  private val ret: mutable.Map[CompName, Set[MemberMethod]] =\n    mutable.Map.empty[CompName, Set[MemberMethod]]\n\n  /* dig out all member methods from a class variant */\n  override def enterCallNode(n: CallNode): Boolean =\n    matcher((n.getFunction, n.getArgs.asScala.toList)) {\n      case (createClassName,\n            (compName: IdentNode) :: (members: LiteralNode.ArrayLiteralNode) :: Nil)\n          if createClassName.toString.contains(\"createClass\") ⇒\n        members.getValue.collect {\n          case member: ObjectNode ⇒\n            matcher(member.getElements.asScala.toList) {\n              case (name: PropertyNode) :: (value: PropertyNode) :: Nil ⇒\n                matcher((name.getValue, value.getValue)) {\n                  case (fi: LiteralNode[_], f: FunctionNode) ⇒\n                    val m         = MemberMethod(fi.getString, f.getParameters.asScala.map(_.getName))\n                    val compName_ = CompName(compName.getName)\n                    ret.get(compName_) match {\n                      case Some(existing) ⇒\n                        ret(compName_) = existing + m\n                      case None ⇒\n                        ret(compName_) = Set(m)\n                    }\n                }\n                name.getKeyName\n            }\n        }\n    }\n\n  override protected def fetchValue(): Map[CompName, Set[MemberMethod]] =\n    ret.toMap\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/VisitorComponents.scala",
    "content": "package com.olvind\npackage requiresjs\n\nimport jdk.nashorn.internal.ir._\nimport jdk.nashorn.internal.parser.TokenType\n\nimport scala.collection.JavaConverters._\nimport scala.collection.mutable\n\ncase class VisitorComponents(n: FunctionNode)\n  extends VisitorHelperNameStack[FunctionNode, Map[CompName, ObjectNode]](n) {\n  private val ret: mutable.Map[CompName, ObjectNode] =\n    mutable.Map.empty[CompName, ObjectNode]\n\n  override def enterBinaryNode(bn: BinaryNode): Boolean = {\n    bn.lhs match {\n      case a: AccessNode if a.getProperty == \"exports\" =>\n        bn.rhs match {\n          case right: CallNode =>\n            right.getArgs.asScala.collect {\n              case o: ObjectNode =>\n                o.getElements.asScala.collect {\n                  case a: PropertyNode if a.getKeyName == \"displayName\" =>\n                    val name = a.getValue.asInstanceOf[LiteralNode[String]].getValue\n                    nameStack = VarName(name) :: nameStack\n                  //                    ret(CompName(name)) = o\n                }\n            }\n          case right =>\n            println(right)\n        }\n      case a: AccessNode if a.getProperty == \"propTypes\" ⇒\n        bn.rhs match {\n          /* inline object*/\n          case o: ObjectNode ⇒\n            ret(CompName(a.getBase.asInstanceOf[IdentNode].getName)) = o\n\n          /* referencing variable in scope, so search upwards */\n          case i: IdentNode ⇒\n            val founds = lc.getBlocks.asScala.toList.flatMap { block ⇒\n              block.getStatements.asScala.collect {\n                case v: VarNode if v.getName.getName == i.getName ⇒ v.getInit\n              }\n            }\n            val foundOpt = founds collectFirst {\n              case o: ObjectNode ⇒ o\n            }\n            foundOpt.foreach(found ⇒\n              ret(CompName(a.getBase.asInstanceOf[IdentNode].getName)) = found)\n\n          /* Similar to the above, but we have a ternary node*/\n          case ternary: TernaryNode =>\n            ternary.getTest match {\n              case testNode: BinaryNode =>\n                testNode.rhs match {\n                  case test: LiteralNode[String] =>\n                    if ((test.getValue == \"production\" && testNode.tokenType() == TokenType.NE_STRICT) ||\n                      (test.getValue == \"development\" && testNode.tokenType() == TokenType.EQ_STRICT)) {\n                      //Use the true Expression\n                      ternary.getTrueExpression.getExpression match {\n                        case o: ObjectNode ⇒\n                          ret(CompName(a.getBase.asInstanceOf[IdentNode].getName)) = o\n                      }\n                    }\n                    else {\n                      //Use the false Expression\n                      ternary.getFalseExpression.getExpression match {\n                        case o: ObjectNode ⇒\n                          ret(CompName(a.getBase.asInstanceOf[IdentNode].getName)) = o\n                      }\n                    }\n                }\n            }\n        }\n      case other =>\n        ()\n    }\n    true\n  }\n\n  /* old style createClass way of creating react components.\n      We dig out `propTypes` out of the structure */\n  override def enterCallNode(n: CallNode): Boolean =\n    matcher((n.getFunction, n.getArgs.asScala.toList)) {\n      case (a: AccessNode, List(o: ObjectNode)) if a.getProperty == \"createClass\" =>\n        o.getElements.asScala\n          .collect {\n            case p: PropertyNode ⇒ (p.getKey, p.getValue)\n          }\n          .collectFirst {\n            case (i: IdentNode, o: ObjectNode) if i.getName == \"propTypes\" =>\n              nameStack.headOption match {\n                case Some(name) => ret(CompName(name.value)) = o\n                case None => ()\n              }\n          }\n    }\n\n  override protected def fetchValue(): Map[CompName, ObjectNode] =\n    ret.toMap\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/VisitorExports.scala",
    "content": "package com.olvind\npackage requiresjs\n\nimport jdk.nashorn.internal.ir._\n\nimport scala.collection.mutable\n\ncase class VisitorExports(n: FunctionNode) extends VisitorHelper[FunctionNode, Seq[Node]](n) {\n  // Left if something is exported at `exported.default` for now\n  private var ret: Either[Node, mutable.ArrayBuffer[Node]] =\n    Right(mutable.ArrayBuffer.empty)\n\n  def filterNode(rhs: Node): Option[Node] =\n    rhs match {\n      case a: AccessNode if a.getProperty == \"default\" ⇒\n        Some(a.getBase.asInstanceOf[Node])\n      case _: FunctionNode | _: ObjectNode | _: IdentNode ⇒\n        Some(rhs)\n      case other ⇒\n        None\n    }\n\n  override def enterBinaryNode(bn: BinaryNode): Boolean = {\n    matcher(bn.lhs) {\n      case a: AccessNode ⇒\n        matcher(a.getBase) {\n          case base: IdentNode if base.getName == \"exports\" ⇒\n            (ret, filterNode(bn.rhs), a.getProperty == \"default\") match {\n              case (_, None, _) ⇒\n                ()\n              case (_, Some(node), true) ⇒\n                ret = Left(node)\n              case (Right(existing), Some(node), false) ⇒\n                existing += node\n              case other ⇒\n                ???\n            }\n        }\n    }\n  }\n\n  override protected def fetchValue(): Seq[Node] =\n    ret.fold(Seq(_), _.toSeq)\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/VisitorHelper.scala",
    "content": "package com.olvind\npackage requiresjs\n\nimport jdk.nashorn.internal.ir.visitor.NodeVisitor\nimport jdk.nashorn.internal.ir.{BlockLexicalContext, Node}\n\nabstract class VisitorHelper[N <: Node, Out](n: N) extends NodeVisitor(new BlockLexicalContext) {\n  protected def matcher[M](m: M)(f: PartialFunction[M, Unit]): Boolean =\n    if (f.isDefinedAt(m)) {\n      f(m)\n      true\n    } else true\n\n  protected def assertions(): Unit = ()\n  protected def fetchValue(): Out\n\n  lazy val value: Out = {\n    n accept this\n    //    assertions()\n    fetchValue()\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/VisitorHelperNameStack.scala",
    "content": "package com.olvind\npackage requiresjs\n\nimport jdk.nashorn.internal.ir._\n\nabstract class VisitorHelperNameStack[N <: Node, Out](n: N) extends VisitorHelper[N, Out](n) {\n  protected var nameStack: List[VarName] = Nil\n\n  override def enterPropertyNode(n: PropertyNode): Boolean =\n    matcher(n.getKey) {\n      case (i: IdentNode) =>\n        nameStack = VarName(i.getName) :: nameStack\n    }\n\n  override def leavePropertyNode(n: PropertyNode): Node = {\n    (nameStack.headOption, n.getKey) match {\n      case (Some(n1), n2: IdentNode) if n1.value == n2.getName =>\n        nameStack = nameStack drop 1\n      case _ => ()\n    }\n    n\n  }\n\n  override def enterVarNode(n: VarNode): Boolean =\n    matcher(n.getName) {\n      case name =>\n        nameStack = VarName(name.getName) :: nameStack\n    }\n\n  override def leaveVarNode(n: VarNode): Node = {\n    (nameStack.headOption, n.getName) match {\n      case (Some(n1), n2) if n1.value == n2.getName =>\n        nameStack = nameStack drop 1\n      case _ => ()\n    }\n    n\n  }\n\n  override protected def assertions(): Unit =\n    require(nameStack.isEmpty)\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/VisitorImports.scala",
    "content": "package com.olvind\npackage requiresjs\n\nimport ammonite.ops.Path\nimport jdk.nashorn.internal.ir._\n\nimport scala.collection.JavaConverters._\nimport scala.collection.mutable\n\ncase class VisitorImports(n: FunctionNode, currentPath: Path)\n    extends VisitorHelperNameStack[FunctionNode, Seq[Import]](n) {\n  private val ret: mutable.Map[VarName, Import] =\n    mutable.Map.empty[VarName, Import]\n\n  override def enterCallNode(n: CallNode): Boolean =\n    matcher((n.getFunction, n.getArgs.asScala.toList)) {\n      case (i: IdentNode, List(o: LiteralNode[_])) if i.getName == \"require\" =>\n        val target =\n          if (o.getString.startsWith(\".\")) Left(add(currentPath, o.getString))\n          else Right(o.getString)\n\n        val name = nameStack.headOption.getOrElse(VarName(o.getString))\n        ret(name) = Import(name, target)\n\n      case (i: IdentNode, List(arg: IdentNode)) if i.getName.contains(\"interopRequireDefault\") =>\n        ret(VarName(arg.getName)) = ret(VarName(arg.getName)).copy(varName = nameStack.head)\n    }\n\n  override protected def fetchValue(): Seq[Import] = {\n    ret.values.toSeq\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/VisitorPropType.scala",
    "content": "package com.olvind\npackage requiresjs\n\nimport jdk.nashorn.internal.ir._\n\nimport scala.collection.JavaConverters._\n\ncase class VisitorPropType(\n    n: CompName,\n    o: ObjectNode,\n    jsContent: String,\n    is: Seq[Import]\n) extends VisitorHelper[ObjectNode, Map[PropName, PropUnparsed]](o) {\n\n  private var ret: Option[Map[PropName, PropUnparsed]] = None\n\n  def mapPropType(\n      start: Int,\n      ps: List[PropertyNode]\n  ): List[(PropName, PropUnparsed)] = {\n    ps match {\n      case Nil => Nil\n      case p :: pt =>\n        val commentOS: Option[PropComment] =\n          Some(jsContent.substring(start, p.getStart).trim)\n            .filterNot(_.isEmpty) map PropComment.clean\n\n        val typeS: PropTypeUnparsed =\n          PropTypeUnparsed(jsContent.substring(p.getValue.getStart, p.getValue.getFinish))\n\n        (PropName(p.getKeyName) -> PropUnparsed(n, typeS, commentOS)) +: mapPropType(\n          p.getValue.getFinish + 1,\n          pt)\n    }\n  }\n\n  override def enterObjectNode(o: ObjectNode): Boolean = {\n    ret = Some(\n      mapPropType(o.getStart + 1, o.getElements.asScala.toList).toMap\n    )\n    false\n  }\n\n  override protected def fetchValue(): Map[PropName, PropUnparsed] =\n    ret.getOrElse(panic(s\"Count not find $n\"))\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/requiresjs/types.scala",
    "content": "package com.olvind\npackage requiresjs\n\nimport ammonite.ops.Path\nimport jdk.nashorn.internal.ir.FunctionNode\n\ncase class ParsedFile(path: Path, content: String, result: FunctionNode)\n\nobject Required {\n  def apply(path: Path, rs: Seq[Lazy[Required]]): Lazy[Required] =\n    rs.size match {\n      case 0 ⇒ Lazy(NotFound(path))\n      case 1 ⇒ rs.head\n      case n ⇒ Lazy(Multiple(path, rs))\n    }\n}\n\nsealed trait Required\n\ncase class Multiple(path: Path, rs: Seq[Lazy[Required]]) extends Required\n\ncase class Single(compName: CompName, c: FoundComponent) extends Required\n\ncase class NotFound(path: Path) extends Required\n\ncase class FoundComponent(\n                           name: CompName,\n                           file: Path,\n                           jsContent: String,\n                           props: Map[PropName, PropUnparsed],\n                           methods: Option[Set[MemberMethod]]\n                         )\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/sui/SuiLibrary.scala",
    "content": "package com.olvind\npackage sui\n\nimport ammonite.ops._\n\nimport scala.language.implicitConversions\n\ncase class SuiLibrary(base: Path) extends Library {\n  /* todo: make requiresjs clever enough to figure this out by itself */\n  override val locations =\n    Seq(\n      base\n    )\n\n  override val prefixOpt    = Some(\"Sui\")\n  override val name         = \"semanticui\"\n  override val typeMapper   = SuiTypeMapper\n  override val memberMapper = SuiTypeMemberMethodMapper\n  override val indexNames   = Set(\"index.js\")\n  override val packageName  = \"chandu0101.scalajs.react.components.semanticui\"\n\n  val icon = ComponentDef(CompName(\"Icon\"))\n\n  val components: Seq[ComponentDef] =\n    Seq(\n      //      ComponentDef(CompName(\"AutoControlledComponent\")),\n      //      ComponentDef(CompName(\"Embed\")), //has weird enum for screen res\n      //      ComponentDef(CompName(\"keyboardKey\")),\n      //      ComponentDef(CompName(\"leven\")),\n      //      ComponentDef(CompName(\"Select\")),\n\n      //      ComponentDef(CompName(\"Accordion\")),\n      //      ComponentDef(CompName(\"AccordionContent\")),\n      //      ComponentDef(CompName(\"AccordionTitle\")),\n      //      ComponentDef(CompName(\"Advertisement\")),\n      //      ComponentDef(CompName(\"Breadcrumb\")),\n      //      ComponentDef(CompName(\"BreadcrumbDivider\")),\n      //      ComponentDef(CompName(\"BreadcrumbSection\")),\n      ComponentDef(CompName(\"Button\"), domeTypeOpt = Some(DomInput)),\n      //      ComponentDef(CompName(\"ButtonContent\")),\n      //      ComponentDef(CompName(\"ButtonGroup\")),\n      //      ComponentDef(CompName(\"ButtonOr\")),\n      //      ComponentDef(CompName(\"Card\")),\n      //      ComponentDef(CompName(\"CardContent\")),\n      //      ComponentDef(CompName(\"CardDescription\")),\n      //      ComponentDef(CompName(\"CardGroup\")),\n      //      ComponentDef(CompName(\"CardHeader\")),\n      //      ComponentDef(CompName(\"CardMeta\")),\n      //      ComponentDef(CompName(\"Checkbox\")),\n      //      ComponentDef(CompName(\"Comment\")),\n      //      ComponentDef(CompName(\"CommentAction\")),\n      //      ComponentDef(CompName(\"CommentActions\")),\n      //      ComponentDef(CompName(\"CommentAuthor\")),\n      //      ComponentDef(CompName(\"CommentAvatar\")),\n      //      ComponentDef(CompName(\"CommentContent\")),\n      //      ComponentDef(CompName(\"CommentGroup\")),\n      //      ComponentDef(CompName(\"CommentMetadata\")),\n      //      ComponentDef(CompName(\"CommentText\")),\n      //      ComponentDef(CompName(\"Confirm\")),\n      ComponentDef(CompName(\"Container\")),\n      //      ComponentDef(CompName(\"Dimmer\")),\n      //      ComponentDef(CompName(\"DimmerDimmable\")),\n      ComponentDef(CompName(\"Divider\")),\n      //      ComponentDef(CompName(\"Dropdown\")),\n      //      ComponentDef(CompName(\"DropdownDivider\")),\n      //      ComponentDef(CompName(\"DropdownHeader\")),\n      //      ComponentDef(CompName(\"DropdownItem\")),\n      //      ComponentDef(CompName(\"DropdownMenu\")),\n      //      ComponentDef(CompName(\"Feed\")),\n      //      ComponentDef(CompName(\"FeedContent\")),\n      //      ComponentDef(CompName(\"FeedDate\")),\n      //      ComponentDef(CompName(\"FeedEvent\")),\n      //      ComponentDef(CompName(\"FeedExtra\")),\n      //      ComponentDef(CompName(\"FeedLabel\")),\n      //      ComponentDef(CompName(\"FeedLike\")),\n      //      ComponentDef(CompName(\"FeedMeta\")),\n      //      ComponentDef(CompName(\"FeedSummary\")),\n      //      ComponentDef(CompName(\"FeedUser\")),\n      ComponentDef(CompName(\"Flag\")),\n      //      ComponentDef(CompName(\"Form\")),\n      //      ComponentDef(CompName(\"FormButton\")),\n      //      ComponentDef(CompName(\"FormCheckbox\")),\n      //      ComponentDef(CompName(\"FormDropdown\")),\n      //      ComponentDef(CompName(\"FormField\")),\n      //      ComponentDef(CompName(\"FormGroup\")),\n      //      ComponentDef(CompName(\"FormInput\")),\n      //      ComponentDef(CompName(\"FormRadio\")),\n      //      ComponentDef(CompName(\"FormSelect\")),\n      //      ComponentDef(CompName(\"FormTextArea\")),\n      ComponentDef(CompName(\"Grid\")),\n      ComponentDef(CompName(\"GridColumn\")),\n      //      ComponentDef(CompName(\"GridRow\")),\n      ComponentDef(CompName(\"Header\")),\n      //      ComponentDef(CompName(\"HeaderContent\")),\n      //      ComponentDef(CompName(\"HeaderSubheader\")),\n      icon,\n      ComponentDef(CompName(\"IconGroup\")),\n      ComponentDef(CompName(\"Image\")),\n      //      ComponentDef(CompName(\"ImageGroup\")),\n      ComponentDef(CompName(\"Input\"), domeTypeOpt = Some(DomInput)),\n      //      ComponentDef(CompName(\"Item\")),\n      //      ComponentDef(CompName(\"ItemContent\")),\n      //      ComponentDef(CompName(\"ItemDescription\")),\n      //      ComponentDef(CompName(\"ItemExtra\")),\n      //      ComponentDef(CompName(\"ItemGroup\")),\n      //      ComponentDef(CompName(\"ItemHeader\")),\n      //      ComponentDef(CompName(\"ItemImage\")),\n      //      ComponentDef(CompName(\"ItemMeta\")),\n      //      ComponentDef(CompName(\"Label\")),\n      //      ComponentDef(CompName(\"LabelDetail\")),\n      //      ComponentDef(CompName(\"LabelGroup\")),\n      ComponentDef(CompName(\"List\")),\n      ComponentDef(CompName(\"ListContent\")),\n      //      ComponentDef(CompName(\"ListDescription\")),\n      //      ComponentDef(CompName(\"ListHeader\")),\n      ComponentDef(CompName(\"ListIcon\"), shared = Some(icon)),\n      ComponentDef(CompName(\"ListItem\")),\n      //      ComponentDef(CompName(\"ListList\")),\n      //      ComponentDef(CompName(\"Loader\")),\n            ComponentDef(CompName(\"Menu\")),\n            ComponentDef(CompName(\"MenuHeader\")),\n            ComponentDef(CompName(\"MenuItem\")),\n            ComponentDef(CompName(\"MenuMenu\")),\n      //      ComponentDef(CompName(\"Message\")),\n      //      ComponentDef(CompName(\"MessageContent\")),\n      //      ComponentDef(CompName(\"MessageHeader\")),\n      //      ComponentDef(CompName(\"MessageItem\")),\n      //      ComponentDef(CompName(\"MessageList\")),\n      //      ComponentDef(CompName(\"Modal\")),\n      //      ComponentDef(CompName(\"ModalActions\")),\n      //      ComponentDef(CompName(\"ModalContent\")),\n      //      ComponentDef(CompName(\"ModalDescription\")),\n      //      ComponentDef(CompName(\"ModalHeader\")),\n      //      ComponentDef(CompName(\"Popup\")),\n      //      ComponentDef(CompName(\"PopupContent\")),\n      //      ComponentDef(CompName(\"PopupHeader\")),\n      //      ComponentDef(CompName(\"Portal\")),\n      //      ComponentDef(CompName(\"Progress\")),\n      //      ComponentDef(CompName(\"Radio\")),\n      //      ComponentDef(CompName(\"Rail\")),\n      //      ComponentDef(CompName(\"Rating\")),\n      //      ComponentDef(CompName(\"RatingIcon\")),\n      //      ComponentDef(CompName(\"Reveal\")),\n      //      ComponentDef(CompName(\"RevealContent\")),\n      //      ComponentDef(CompName(\"Search\")),\n      //      ComponentDef(CompName(\"SearchCategory\")),\n      //      ComponentDef(CompName(\"SearchResult\")),\n      //      ComponentDef(CompName(\"SearchResults\")),\n      ComponentDef(CompName(\"Segment\")),\n      //      ComponentDef(CompName(\"SegmentGroup\")),\n      //      ComponentDef(CompName(\"Sidebar\")),\n      //      ComponentDef(CompName(\"SidebarPushable\")),\n      //      ComponentDef(CompName(\"SidebarPusher\")),\n      //      ComponentDef(CompName(\"Statistic\")),\n      //      ComponentDef(CompName(\"StatisticGroup\")),\n      //      ComponentDef(CompName(\"StatisticLabel\")),\n      //      ComponentDef(CompName(\"StatisticValue\")),\n      //      ComponentDef(CompName(\"Step\")),\n      //      ComponentDef(CompName(\"StepContent\")),\n      //      ComponentDef(CompName(\"StepDescription\")),\n      //      ComponentDef(CompName(\"StepGroup\")),\n      //      ComponentDef(CompName(\"StepTitle\")),\n      //      ComponentDef(CompName(\"Table\")),\n      //      ComponentDef(CompName(\"TableBody\")),\n      //      ComponentDef(CompName(\"TableCell\")),\n      //      ComponentDef(CompName(\"TableFooter\")),\n      //      ComponentDef(CompName(\"TableHeader\")),\n      //      ComponentDef(CompName(\"TableHeaderCell\")),\n      //      ComponentDef(CompName(\"TableRow\")),\n      ComponentDef(CompName(\"TextArea\")) //      ComponentDef(CompName(\"Visibility\"))\n    )\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/sui/SuiRunner.scala",
    "content": "package com.olvind\npackage sui\n\nimport ammonite.ops.Path\n\nobject SuiRunner extends App {\n  args.toList match {\n    case OutputFolder(buildFolder) :: OutputFolder(outputFolder) :: Nil =>\n      val outs: Seq[Path] = Runner(SuiLibrary(buildFolder), outputFolder)\n\n    case _ =>\n      System.err.println(\"Syntax: SuiRunner <directory with transpiled javascript> <output folder>\")\n      System.exit(1)\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/sui/SuiTypeMapper.scala",
    "content": "package com.olvind\npackage sui\n\nobject SuiTypeMapper extends TypeMapper {\n  val typeT   = Normal(\"T\").generic(\"T\")\n  val typeTJs = Normal(\"T\").genericJs(\"T\")\n\n  def apply(compName: CompName, fieldName: PropName, typeString: String): Type = {\n    def is(s: String) =\n      fieldName.value.toLowerCase contains s.toLowerCase\n    def split(drop: Int, s: String) =\n      s.split(\"[\\'\\\"\\\\(\\\\)\\\\[\\\\],\\\\s]\").map(_.trim).filterNot(_.isEmpty).drop(drop)\n\n    (compName.value, fieldName.value, typeString) match {\n      case (\"Input\", \"icon\", _)      => Normal(\"SuiIconType\")\n      case (\"Flag\", \"name\", _)       => Normal(\"String | SuiCountry\")\n      case (\"Header\", \"as\", _)       => Normal(\"String | js.Function\")\n      case (\"Header\", \"image\", _)    => Normal(\"String | ReactElement\")\n      case (\"Header\", \"icon\", _)     => Normal(\"String | js.Object | ReactElement\")\n      case (\"Button\", \"children\", _) => Normal(\"VdomNode\")\n      case (\"Button\", \"animated\", _) => Normal(\"Boolean | ButtonAnimatedType\")\n      case (\"Icon\", \"name\", \"_lib.customsuggest(_lib.SUI.ALL_ICONS_IN_ALL_CONTEXTS)\") =>\n        Normal(\"SuiIconType\")\n      case (_, \"textAlign\", _) =>\n        Enum(compName, Seq(\"left\", \"center\", \"right\", \"justified\"), \"SuiTextAlignment\")\n\n      case (_, \"size\", _) =>\n        Enum(compName,\n             Seq(\"mini\", \"tiny\", \"small\", \"medium\", \"large\", \"big\", \"huge\", \"massive\"),\n             \"SuiSize\")\n      case (\"IconGroup\", \"name\", \"_lib.customsuggest(_lib.SUI.ALL_ICONS_IN_ALL_CONTEXTS)\") =>\n        Normal(\"SuiIconType\")\n      case (_, _, e) if e.contains(\"oneOfType\") || e.contains(\"some(\") => {\n        val splitted = split(1, e)\n        Normal(splitted.map(t => apply(compName, fieldName, t)) map (_.name) mkString \" | \")\n      }\n      case (_, _, \"Mui.oneOf(_lib.SUI.WIDTHS)\") => Normal(\"Double\")\n      case (_, _, \"Mui.oneOf(_lib.SUI.COLORS)\") =>\n        Enum(compName,\n             Seq(\"red\",\n                 \"orange\",\n                 \"yellow\",\n                 \"olive\",\n                 \"green\",\n                 \"teal\",\n                 \"blue\",\n                 \"violet\",\n                 \"purple\",\n                 \"pink\",\n                 \"brown\",\n                 \"grey\",\n                 \"black\"),\n             \"SuiColor\")\n      case (_, _, \"Mui.oneOf(_lib.SUI.FLOATS)\") => Enum(compName, Seq(\"left\", \"right\"), \"SuiFloat\")\n      case (_, _, \"Mui.oneOf(_lib.SUI.SIZES)\") =>\n        Enum(compName,\n             Seq(\"mini\", \"tiny\", \"small\", \"medium\", \"large\", \"big\", \"huge\", \"massive\"),\n             \"SuiSize\")\n      case (_, _, \"Mui.oneOf(_lib.SUI.TEXT_ALIGNMENTS)\") =>\n        Enum(compName, Seq(\"left\", \"center\", \"right\", \"justified\"), \"SuiTextAlignment\")\n      case (_, _, \"Mui.oneOf(_lib.SUI.VERTICAL_ALIGNMENTS)\") =>\n        Enum(compName, Seq(\"bottom\", \"middle\", \"top\"), \"SuiVerticalAlignment\")\n\n      case (a, b, enum) if enum.contains(\"oneOf(\") && enum.contains(']') =>\n        val found = \"(\\\\[.*?\\\\])\".r.findAllIn(enum).toList\n        val array =\n          found.last.replaceAll(\"\\\\[|\\\\]\", \"\").split(\", \").map(_.replace(\"'\", \"\").replace(\" \", \"\"))\n        Enum(compName, array)\n      case (a, b, enum) if enum.contains(\"oneOf(\") && !enum.contains(']') =>\n        Enum(compName, split(1, enum))\n\n      case (_, _, \"_lib.customas\") => Normal(\"js.Any\") //TODO: what to do with this?\n\n      /* general */\n      case (_, \"valueLink\", \"object\")          => Normal(\"js.Any\")\n      case (_, _, \"string\")                    => Normal(\"String\")\n      case (_, _, \"bool\")                      => Normal(\"Boolean\")\n      case (_, \"children\", \"element\")          => Normal(\"VdomElement\")\n      case (_, _, \"element\")                   => Normal(\"ReactElement\")\n      case (_, \"children\", \"node\")             => Normal(\"VdomNode\")\n      case (_, _, \"node\")                      => Normal(\"ReactNode\")\n      case (_, _, \"number\")                    => Normal(\"Double\")\n      case (_, \"children\", \"arrayOf(element)\") => Normal(\"js.Array[ReactElement]\")\n\n      case (_, _, \"Mui.arrayOf\")                       => Normal(\"js.Array[js.Any]\")\n      case (_, \"valueLink\", \"Mui.object\")              => Normal(\"js.Any\")\n      case (_, _, \"Mui.string\")                        => Normal(\"String\")\n      case (_, _, \"Mui.bool\")                          => Normal(\"Boolean\")\n      case (_, \"children\", \"Mui.element\")              => Normal(\"VdomElement\")\n      case (_, _, \"Mui.element\")                       => Normal(\"ReactElement\")\n      case (_, \"children\", \"Mui.node\")                 => Normal(\"VdomNode\")\n      case (_, _, \"Mui.node\")                          => Normal(\"ReactNode\")\n      case (_, _, \"Mui.object\")                        => Normal(\"js.Object\")\n      case (_, _, \"Mui.number\")                        => Normal(\"Double\")\n      case (_, \"children\", \"Mui.arrayOf(Mui.element)\") => Normal(\"js.Array[ReactElement]\")\n\n      case (\"AutoComplete\", \"popoverProps\", \"object\")     => Normal(\"js.Any\")\n      case (\"RadioButtonGroup\", \"defaultSelected\", \"any\") => Normal(\"js.Any\")\n      case (\"RadioButtonGroup\", \"valueSelected\", \"any\")   => Normal(\"js.Any\")\n      case (\"Stepper\", \"children\", \"arrayOf(node)\")       => Normal(\"js.Any\")\n      /*Added by roberto@leibman.net*/\n      case (\"DatePicker\", \"utils\", \"object\")              => Normal(\"DatePickerUtils\")   //TODO ???\n      case (\"SelectField\", \"dropDownMenuProps\", \"object\") => Normal(\"DropDownMenuProps\") //TODO ???\n\n      case (_, _, \"Mui.func\") =>\n        Normal(SuiTypeMapperFunction(compName, fieldName))\n      case (_, _, \"func\") =>\n        Normal(SuiTypeMapperFunction(compName, fieldName))\n      case (a, b, c) =>\n        println(s\"\"\"case (\"$a\",\"$b\",\"$c\") => Normal(\"\") //TODO write this Missing in TypeMapper\"\"\")\n        Normal(\"js.Any /*//TODO: fix this in the TypeMapper*/\")\n\n    }\n  }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/sui/SuiTypeMapperFunction.scala",
    "content": "package com.olvind\npackage sui\n\nobject SuiTypeMapperFunction {\n  val Callback = \"Callback\"\n\n  def apply(compName: CompName, name: PropName): String =\n    (compName.value, name.value) match {\n      case (_, \"onClick\")  => \"ReactMouseEventFromInput => Callback\"\n      case (_, \"onChange\") => \"ReactEventFromInput => Callback\"\n      case _ =>\n        throw new Error(\n          s\"\"\"case (\"${compName.value}\", \"${name.value}\") => Callback  //TODO: Add function type mapping in ${getClass().getName}\"\"\")\n    }\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/sui/SuiTypeMemberMethodMapper.scala",
    "content": "package com.olvind\npackage sui\n\nobject SuiTypeMemberMethodMapper extends MemberMapper {\n\n  override def apply(compName: CompName)(memberMethod: MemberMethod): ParsedMethod =\n    ParsedMethod(\n      apply(compName, memberMethod.paramNames, memberMethod.name),\n      None\n    )\n\n  private def apply(c: CompName, args: Seq[String], m: String) =\n    (c.value, args.size, m) match {\n      case (\"DatePicker\", 0, \"getDate\") => \"getDate(): js.Date\"\n\n      case other ⇒\n        println(\"missing types for method: \" + other)\n        m + args.map(sanitize(_) + \": js.Any\").mkString(\"(\", \", \", \")\") + \": js.Dynamic\"\n    }\n  def sanitize(s: String) =\n    if (s == \"val\") \"`val`\" else s\n}\n"
  },
  {
    "path": "gen/src/main/scala/com/olvind/types.scala",
    "content": "package com.olvind\n\nimport ammonite.ops.Path\n\ntrait Wrapper[A] {\n  def value: A\n  override def toString = value.toString\n}\ncase class MemberMethod(name: String, paramNames: Seq[String])\n\nfinal case class CompName(value: String) extends Wrapper[String] {\n  def map(f: String => String) =\n    CompName(f(value))\n}\n\nfinal case class PropName(value: String) extends AnyVal {\n  def clean: PropName =\n    PropName(value.replaceAll(\"Deprecated:\", \"\").replaceAll(\"or children\", \"\").trim)\n}\n\nfinal case class PropComment(value: Option[String], anns: Seq[Annotation] = Seq.empty)\n\nobject PropComment {\n\n  def clean(s: String): PropComment = {\n    val cleanLines =\n      s.split(\"\\n\")\n        .map(\n          _.trim\n            .replaceAll(\"(^/\\\\*\\\\*?|^//|\\\\*?\\\\*/$|^\\\\*)\", \"\")\n            .trim)\n        .filterNot(_.isEmpty)\n\n    val (_ans: List[Annotation], _lines: List[String]) =\n      cleanLines.foldLeft[(List[Annotation], List[String])]((Nil, Nil)) {\n        case ((as, lines), line) if line.toLowerCase.startsWith(\"@ignore\") => (Ignore :: as, lines)\n        case ((as, lines), line) if line.toLowerCase.startsWith(\"@param\") =>\n          (Param(line.drop(\"@param\".length).trim) :: as, lines)\n        case ((Param(value) :: as, lines), line) => (Param(value + \"\\n\" + line) :: as, lines)\n        case ((as, lines), line)                 => (as, lines :+ line)\n      }\n\n    PropComment(if (_lines.nonEmpty) Some(_lines.mkString(\"\\n\")) else None, _ans.reverse)\n  }\n\n  def apply(str: String) = new PropComment(Some(str), Seq.empty)\n}\n\nfinal case class VarName(value: String) extends Wrapper[String]\n\nfinal case class Import(\n    varName: VarName,\n    target: Either[Path, String]\n)\n\ncase class Identifier private (value: String) extends Wrapper[String]\n\nobject Identifier {\n  def safe(m: String): Identifier = {\n    val memberName = if (m.head.isDigit) \"_\" + m else m\n    Identifier(memberName.replaceAll(\"[-/]\", \"_\"))\n  }\n}\n"
  },
  {
    "path": "gen/src/test/resources/mui15/Paper/Paper.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _simpleAssign = require('simple-assign');\n\nvar _simpleAssign2 = _interopRequireDefault(_simpleAssign);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('../utils/propTypes');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _transitions = require('../styles/transitions');\n\nvar _transitions2 = _interopRequireDefault(_transitions);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction getStyles(props, context) {\n  var circle = props.circle;\n  var rounded = props.rounded;\n  var transitionEnabled = props.transitionEnabled;\n  var zDepth = props.zDepth;\n  var _context$muiTheme = context.muiTheme;\n  var baseTheme = _context$muiTheme.baseTheme;\n  var paper = _context$muiTheme.paper;\n\n\n  return {\n    root: {\n      color: paper.color,\n      backgroundColor: paper.backgroundColor,\n      transition: transitionEnabled && _transitions2.default.easeOut(),\n      boxSizing: 'border-box',\n      fontFamily: baseTheme.fontFamily,\n      WebkitTapHighlightColor: 'rgba(0,0,0,0)', // Remove mobile color flashing (deprecated)\n      boxShadow: paper.zDepthShadows[zDepth - 1], // No shadow for 0 depth papers\n      borderRadius: circle ? '50%' : rounded ? '2px' : '0px'\n    }\n  };\n}\n\nvar Paper = function (_Component) {\n  _inherits(Paper, _Component);\n\n  function Paper() {\n    _classCallCheck(this, Paper);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Paper).apply(this, arguments));\n  }\n\n  _createClass(Paper, [{\n    key: 'render',\n    value: function render() {\n      var _props = this.props;\n      var children = _props.children;\n      var style = _props.style;\n\n      var other = _objectWithoutProperties(_props, ['children', 'style']);\n\n      var prepareStyles = this.context.muiTheme.prepareStyles;\n\n      var styles = getStyles(this.props, this.context);\n\n      return _react2.default.createElement(\n        'div',\n        _extends({}, other, { style: prepareStyles((0, _simpleAssign2.default)(styles.root, style)) }),\n        children\n      );\n    }\n  }]);\n\n  return Paper;\n}(_react.Component);\n\nPaper.propTypes = {\n  /**\n   * Children passed into the paper element.\n   */\n  children: _react.PropTypes.node,\n  /**\n   * Set to true to generate a circlular paper container.\n   */\n  circle: _react.PropTypes.bool,\n  /**\n   * By default, the paper container will have a border radius.\n   * Set this to false to generate a container with sharp corners.\n   */\n  rounded: _react.PropTypes.bool,\n  /**\n   * Override the inline-styles of the root element.\n   */\n  style: _react.PropTypes.object,\n  /**\n   * Set to false to disable CSS transitions for the paper element.\n   */\n  transitionEnabled: _react.PropTypes.bool,\n  /**\n   * This number represents the zDepth of the paper shadow.\n   */\n  zDepth: _propTypes2.default.zDepth\n};\nPaper.defaultProps = {\n  circle: false,\n  rounded: true,\n  transitionEnabled: true,\n  zDepth: 1\n};\nPaper.contextTypes = {\n  muiTheme: _react.PropTypes.object.isRequired\n};\nexports.default = Paper;"
  },
  {
    "path": "gen/src/test/resources/mui15/Paper/index.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = undefined;\n\nvar _Paper = require('./Paper');\n\nvar _Paper2 = _interopRequireDefault(_Paper);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Paper2.default;"
  },
  {
    "path": "gen/src/test/resources/mui15/comps/Divider.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _simpleAssign = require('simple-assign');\n\nvar _simpleAssign2 = _interopRequireDefault(_simpleAssign);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar propTypes = {\n  /**\n   * The css class name of the root element.\n   */\n  className: _react.PropTypes.string,\n  /**\n   * If true, the `Divider` will be indented `72px`.\n   */\n  inset: _react.PropTypes.bool,\n  /**\n   * Override the inline-styles of the root element.\n   */\n  style: _react.PropTypes.object\n};\n\nvar defaultProps = {\n  inset: false\n};\n\nvar contextTypes = {\n  muiTheme: _react.PropTypes.object.isRequired\n};\n\nvar Divider = function Divider(props, context) {\n  var inset = props.inset;\n  var style = props.style;\n\n  var other = _objectWithoutProperties(props, ['inset', 'style']);\n\n  var muiTheme = context.muiTheme;\n  var prepareStyles = muiTheme.prepareStyles;\n\n\n  var styles = {\n    root: {\n      margin: 0,\n      marginTop: -1,\n      marginLeft: inset ? 72 : 0,\n      height: 1,\n      border: 'none',\n      backgroundColor: muiTheme.baseTheme.palette.borderColor\n    }\n  };\n\n  return _react2.default.createElement('hr', _extends({}, other, { style: prepareStyles((0, _simpleAssign2.default)({}, styles.root, style)) }));\n};\n\nDivider.muiName = 'Divider';\nDivider.propTypes = propTypes;\nDivider.defaultProps = defaultProps;\nDivider.contextTypes = contextTypes;\n\nexports.default = Divider;"
  },
  {
    "path": "gen/src/test/resources/mui15/comps/Drawer.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _simpleAssign = require('simple-assign');\n\nvar _simpleAssign2 = _interopRequireDefault(_simpleAssign);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactEventListener = require('react-event-listener');\n\nvar _reactEventListener2 = _interopRequireDefault(_reactEventListener);\n\nvar _keycode = require('keycode');\n\nvar _keycode2 = _interopRequireDefault(_keycode);\n\nvar _autoPrefix = require('../utils/autoPrefix');\n\nvar _autoPrefix2 = _interopRequireDefault(_autoPrefix);\n\nvar _transitions = require('../styles/transitions');\n\nvar _transitions2 = _interopRequireDefault(_transitions);\n\nvar _Overlay = require('../internal/Overlay');\n\nvar _Overlay2 = _interopRequireDefault(_Overlay);\n\nvar _Paper = require('../Paper');\n\nvar _Paper2 = _interopRequireDefault(_Paper);\n\nvar _propTypes = require('../utils/propTypes');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar openNavEventHandler = null;\n\nvar Drawer = function (_Component) {\n  _inherits(Drawer, _Component);\n\n  function Drawer() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, Drawer);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(Drawer)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.handleTouchTapOverlay = function (event) {\n      event.preventDefault();\n      _this.close('clickaway');\n    }, _this.handleKeyUp = function (event) {\n      if (_this.state.open && !_this.props.docked && (0, _keycode2.default)(event) === 'esc') {\n        _this.close('escape');\n      }\n    }, _this.onBodyTouchStart = function (event) {\n      var swipeAreaWidth = _this.props.swipeAreaWidth;\n\n      var touchStartX = event.touches[0].pageX;\n      var touchStartY = event.touches[0].pageY;\n\n      // Open only if swiping from far left (or right) while closed\n      if (swipeAreaWidth !== null && !_this.state.open) {\n        if (_this.props.openSecondary) {\n          // If openSecondary is true calculate from the far right\n          if (touchStartX < document.body.offsetWidth - swipeAreaWidth) return;\n        } else {\n          // If openSecondary is false calculate from the far left\n          if (touchStartX > swipeAreaWidth) return;\n        }\n      }\n\n      if (!_this.state.open && (openNavEventHandler !== _this.onBodyTouchStart || _this.props.disableSwipeToOpen)) {\n        return;\n      }\n\n      _this.maybeSwiping = true;\n      _this.touchStartX = touchStartX;\n      _this.touchStartY = touchStartY;\n\n      document.body.addEventListener('touchmove', _this.onBodyTouchMove);\n      document.body.addEventListener('touchend', _this.onBodyTouchEnd);\n      document.body.addEventListener('touchcancel', _this.onBodyTouchEnd);\n    }, _this.onBodyTouchMove = function (event) {\n      var currentX = event.touches[0].pageX;\n      var currentY = event.touches[0].pageY;\n\n      if (_this.state.swiping) {\n        event.preventDefault();\n        _this.setPosition(_this.getTranslateX(currentX));\n      } else if (_this.maybeSwiping) {\n        var dXAbs = Math.abs(currentX - _this.touchStartX);\n        var dYAbs = Math.abs(currentY - _this.touchStartY);\n        // If the user has moved his thumb ten pixels in either direction,\n        // we can safely make an assumption about whether he was intending\n        // to swipe or scroll.\n        var threshold = 10;\n\n        if (dXAbs > threshold && dYAbs <= threshold) {\n          _this.swipeStartX = currentX;\n          _this.setState({\n            swiping: _this.state.open ? 'closing' : 'opening'\n          });\n          _this.setPosition(_this.getTranslateX(currentX));\n        } else if (dXAbs <= threshold && dYAbs > threshold) {\n          _this.onBodyTouchEnd();\n        }\n      }\n    }, _this.onBodyTouchEnd = function (event) {\n      if (_this.state.swiping) {\n        var currentX = event.changedTouches[0].pageX;\n        var translateRatio = _this.getTranslateX(currentX) / _this.getMaxTranslateX();\n\n        _this.maybeSwiping = false;\n        var swiping = _this.state.swiping;\n        _this.setState({\n          swiping: null\n        });\n\n        // We have to open or close after setting swiping to null,\n        // because only then CSS transition is enabled.\n        if (translateRatio > 0.5) {\n          if (swiping === 'opening') {\n            _this.setPosition(_this.getMaxTranslateX());\n          } else {\n            _this.close('swipe');\n          }\n        } else {\n          if (swiping === 'opening') {\n            _this.open('swipe');\n          } else {\n            _this.setPosition(0);\n          }\n        }\n      } else {\n        _this.maybeSwiping = false;\n      }\n\n      document.body.removeEventListener('touchmove', _this.onBodyTouchMove);\n      document.body.removeEventListener('touchend', _this.onBodyTouchEnd);\n      document.body.removeEventListener('touchcancel', _this.onBodyTouchEnd);\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(Drawer, [{\n    key: 'componentWillMount',\n    value: function componentWillMount() {\n      this.maybeSwiping = false;\n      this.touchStartX = null;\n      this.touchStartY = null;\n      this.swipeStartX = null;\n\n      this.setState({\n        open: this.props.open !== null ? this.props.open : this.props.docked,\n        swiping: null\n      });\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.enableSwipeHandling();\n    }\n  }, {\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(nextProps) {\n      // If controlled then the open prop takes precedence.\n      if (nextProps.open !== null) {\n        this.setState({\n          open: nextProps.open\n        });\n        // Otherwise, if docked is changed, change the open state for when uncontrolled.\n      } else if (this.props.docked !== nextProps.docked) {\n          this.setState({\n            open: nextProps.docked\n          });\n        }\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate() {\n      this.enableSwipeHandling();\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.disableSwipeHandling();\n    }\n  }, {\n    key: 'getStyles',\n    value: function getStyles() {\n      var muiTheme = this.context.muiTheme;\n      var theme = muiTheme.navDrawer;\n\n      var x = this.getTranslateMultiplier() * (this.state.open ? 0 : this.getMaxTranslateX());\n\n      var styles = {\n        root: {\n          height: '100%',\n          width: this.props.width || theme.width,\n          position: 'fixed',\n          zIndex: muiTheme.zIndex.navDrawer,\n          left: 0,\n          top: 0,\n          transform: 'translate3d(' + x + 'px, 0, 0)',\n          transition: !this.state.swiping && _transitions2.default.easeOut(null, 'transform', null),\n          backgroundColor: theme.color,\n          overflow: 'auto',\n          WebkitOverflowScrolling: 'touch' },\n        // iOS momentum scrolling\n        overlay: {\n          zIndex: muiTheme.zIndex.drawerOverlay,\n          pointerEvents: this.state.open ? 'auto' : 'none' },\n        // Bypass mouse events when left nav is closing.\n        rootWhenOpenRight: {\n          left: 'auto',\n          right: 0\n        }\n      };\n\n      return styles;\n    }\n  }, {\n    key: 'shouldShow',\n    value: function shouldShow() {\n      return this.state.open || !!this.state.swiping; // component is swiping\n    }\n  }, {\n    key: 'close',\n    value: function close(reason) {\n      if (this.props.open === null) this.setState({ open: false });\n      if (this.props.onRequestChange) this.props.onRequestChange(false, reason);\n      return this;\n    }\n  }, {\n    key: 'open',\n    value: function open(reason) {\n      if (this.props.open === null) this.setState({ open: true });\n      if (this.props.onRequestChange) this.props.onRequestChange(true, reason);\n      return this;\n    }\n  }, {\n    key: 'getMaxTranslateX',\n    value: function getMaxTranslateX() {\n      var width = this.props.width || this.context.muiTheme.navDrawer.width;\n      return width + 10;\n    }\n  }, {\n    key: 'getTranslateMultiplier',\n    value: function getTranslateMultiplier() {\n      return this.props.openSecondary ? 1 : -1;\n    }\n  }, {\n    key: 'enableSwipeHandling',\n    value: function enableSwipeHandling() {\n      if (!this.props.docked) {\n        document.body.addEventListener('touchstart', this.onBodyTouchStart);\n        if (!openNavEventHandler) {\n          openNavEventHandler = this.onBodyTouchStart;\n        }\n      } else {\n        this.disableSwipeHandling();\n      }\n    }\n  }, {\n    key: 'disableSwipeHandling',\n    value: function disableSwipeHandling() {\n      document.body.removeEventListener('touchstart', this.onBodyTouchStart);\n      if (openNavEventHandler === this.onBodyTouchStart) {\n        openNavEventHandler = null;\n      }\n    }\n  }, {\n    key: 'setPosition',\n    value: function setPosition(translateX) {\n      var drawer = _reactDom2.default.findDOMNode(this.refs.clickAwayableElement);\n      var transformCSS = 'translate3d(' + this.getTranslateMultiplier() * translateX + 'px, 0, 0)';\n      this.refs.overlay.setOpacity(1 - translateX / this.getMaxTranslateX());\n      _autoPrefix2.default.set(drawer.style, 'transform', transformCSS);\n    }\n  }, {\n    key: 'getTranslateX',\n    value: function getTranslateX(currentX) {\n      return Math.min(Math.max(this.state.swiping === 'closing' ? this.getTranslateMultiplier() * (currentX - this.swipeStartX) : this.getMaxTranslateX() - this.getTranslateMultiplier() * (this.swipeStartX - currentX), 0), this.getMaxTranslateX());\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props;\n      var children = _props.children;\n      var className = _props.className;\n      var containerClassName = _props.containerClassName;\n      var containerStyle = _props.containerStyle;\n      var docked = _props.docked;\n      var openSecondary = _props.openSecondary;\n      var overlayClassName = _props.overlayClassName;\n      var overlayStyle = _props.overlayStyle;\n      var style = _props.style;\n      var zDepth = _props.zDepth;\n\n\n      var styles = this.getStyles();\n\n      var overlay = void 0;\n      if (!docked) {\n        overlay = _react2.default.createElement(_Overlay2.default, {\n          ref: 'overlay',\n          show: this.shouldShow(),\n          className: overlayClassName,\n          style: (0, _simpleAssign2.default)(styles.overlay, overlayStyle),\n          transitionEnabled: !this.state.swiping,\n          onTouchTap: this.handleTouchTapOverlay\n        });\n      }\n\n      return _react2.default.createElement(\n        'div',\n        {\n          className: className,\n          style: style\n        },\n        _react2.default.createElement(_reactEventListener2.default, { elementName: 'window', onKeyUp: this.handleKeyUp }),\n        overlay,\n        _react2.default.createElement(\n          _Paper2.default,\n          {\n            ref: 'clickAwayableElement',\n            zDepth: zDepth,\n            rounded: false,\n            transitionEnabled: !this.state.swiping,\n            className: containerClassName,\n            style: (0, _simpleAssign2.default)(styles.root, openSecondary && styles.rootWhenOpenRight, containerStyle)\n          },\n          children\n        )\n      );\n    }\n  }]);\n\n  return Drawer;\n}(_react.Component);\n\nDrawer.propTypes = {\n  /**\n   * The contents of the `Drawer`\n   */\n  children: _react.PropTypes.node,\n  /**\n   * The CSS class name of the root element.\n   */\n  className: _react.PropTypes.string,\n  /**\n   * The CSS class name of the container element.\n   */\n  containerClassName: _react.PropTypes.string,\n  /**\n   * Override the inline-styles of the container element.\n   */\n  containerStyle: _react.PropTypes.object,\n  /**\n   * If true, swiping sideways when the `Drawer` is closed will not open it.\n   */\n  disableSwipeToOpen: _react.PropTypes.bool,\n  /**\n   * If true, the `Drawer` will be docked. In this state, the overlay won't show and\n   * clicking on a menu item will not close the `Drawer`.\n   */\n  docked: _react.PropTypes.bool,\n  /**\n   * Callback function fired when the `open` state of the `Drawer` is requested to be changed.\n   *\n   * @param {boolean} open If true, the `Drawer` was requested to be opened.\n   * @param {string} reason The reason for the open or close request. Possible values are\n   * 'swipe' for open requests; 'clickaway' (on overlay clicks),\n   * 'escape' (on escape key press), and 'swipe' for close requests.\n   */\n  onRequestChange: _react.PropTypes.func,\n  /**\n   * If true, the `Drawer` is opened.  Providing a value will turn the `Drawer`\n   * into a controlled component.\n   */\n  open: _react.PropTypes.bool,\n  /**\n   * If true, the `Drawer` is positioned to open from the opposite side.\n   */\n  openSecondary: _react.PropTypes.bool,\n  /**\n   * The CSS class name to add to the `Overlay` component that is rendered behind the `Drawer`.\n   */\n  overlayClassName: _react.PropTypes.string,\n  /**\n   * Override the inline-styles of the `Overlay` component that is rendered behind the `Drawer`.\n   */\n  overlayStyle: _react.PropTypes.object,\n  /**\n   * Override the inline-styles of the root element.\n   */\n  style: _react.PropTypes.object,\n  /**\n   * The width of the left most (or right most) area in pixels where the `Drawer` can be\n   * swiped open from. Setting this to `null` spans that area to the entire page\n   * (**CAUTION!** Setting this property to `null` might cause issues with sliders and\n   * swipeable `Tabs`: use at your own risk).\n   */\n  swipeAreaWidth: _react.PropTypes.number,\n  /**\n   * The width of the `Drawer` in pixels. Defaults to using the values from theme.\n   */\n  width: _react.PropTypes.number,\n  /**\n   * The zDepth of the `Drawer`.\n   */\n  zDepth: _propTypes2.default.zDepth\n\n};\nDrawer.defaultProps = {\n  disableSwipeToOpen: false,\n  docked: true,\n  open: null,\n  openSecondary: false,\n  swipeAreaWidth: 30,\n  width: null,\n  zDepth: 2\n};\nDrawer.contextTypes = {\n  muiTheme: _react.PropTypes.object.isRequired\n};\nexports.default = Drawer;"
  },
  {
    "path": "gen/src/test/resources/mui15/internal/AutoLockScrolling.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar originalBodyOverflow = null;\nvar lockingCounter = 0;\n\nvar AutoLockScrolling = function (_Component) {\n  _inherits(AutoLockScrolling, _Component);\n\n  function AutoLockScrolling() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, AutoLockScrolling);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(AutoLockScrolling)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.locked = false, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(AutoLockScrolling, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      if (this.props.lock === true) this.preventScrolling();\n    }\n  }, {\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(nextProps) {\n      if (this.props.lock !== nextProps.lock) {\n        if (nextProps.lock) {\n          this.preventScrolling();\n        } else {\n          this.allowScrolling();\n        }\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.allowScrolling();\n    }\n\n    // force to only lock/unlock once\n\n  }, {\n    key: 'preventScrolling',\n    value: function preventScrolling() {\n      if (this.locked === true) return;\n      lockingCounter = lockingCounter + 1;\n      this.locked = true;\n\n      // only lock the first time the component is mounted.\n      if (lockingCounter === 1) {\n        var body = document.getElementsByTagName('body')[0];\n        originalBodyOverflow = body.style.overflow;\n        body.style.overflow = 'hidden';\n      }\n    }\n  }, {\n    key: 'allowScrolling',\n    value: function allowScrolling() {\n      if (this.locked === true) {\n        lockingCounter = lockingCounter - 1;\n        this.locked = false;\n      }\n\n      if (lockingCounter === 0 && originalBodyOverflow !== null) {\n        var body = document.getElementsByTagName('body')[0];\n        body.style.overflow = originalBodyOverflow || '';\n        originalBodyOverflow = null;\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return null;\n    }\n  }]);\n\n  return AutoLockScrolling;\n}(_react.Component);\n\nAutoLockScrolling.propTypes = {\n  lock: _react.PropTypes.bool.isRequired\n};\nexports.default = AutoLockScrolling;"
  },
  {
    "path": "gen/src/test/resources/mui15/internal/Overlay.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _simpleAssign = require('simple-assign');\n\nvar _simpleAssign2 = _interopRequireDefault(_simpleAssign);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _transitions = require('../styles/transitions');\n\nvar _transitions2 = _interopRequireDefault(_transitions);\n\nvar _AutoLockScrolling = require('./AutoLockScrolling');\n\nvar _AutoLockScrolling2 = _interopRequireDefault(_AutoLockScrolling);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction getStyles(props, context) {\n  var overlay = context.muiTheme.overlay;\n\n\n  var style = {\n    root: {\n      position: 'fixed',\n      height: '100%',\n      width: '100%',\n      top: 0,\n      left: '-100%',\n      opacity: 0,\n      backgroundColor: overlay.backgroundColor,\n      WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)', // Remove mobile color flashing (deprecated)\n\n      // Two ways to promote overlay to its own render layer\n      willChange: 'opacity',\n      transform: 'translateZ(0)',\n\n      transition: props.transitionEnabled && _transitions2.default.easeOut('0ms', 'left', '400ms') + ', ' + _transitions2.default.easeOut('400ms', 'opacity')\n    }\n  };\n\n  if (props.show) {\n    (0, _simpleAssign2.default)(style.root, {\n      left: 0,\n      opacity: 1,\n      transition: _transitions2.default.easeOut('0ms', 'left') + ', ' + _transitions2.default.easeOut('400ms', 'opacity')\n    });\n  }\n\n  return style;\n}\n\nvar Overlay = function (_Component) {\n  _inherits(Overlay, _Component);\n\n  function Overlay() {\n    _classCallCheck(this, Overlay);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Overlay).apply(this, arguments));\n  }\n\n  _createClass(Overlay, [{\n    key: 'setOpacity',\n    value: function setOpacity(opacity) {\n      this.refs.overlay.style.opacity = opacity;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props;\n      var autoLockScrolling = _props.autoLockScrolling;\n      var show = _props.show;\n      var style = _props.style;\n\n      var other = _objectWithoutProperties(_props, ['autoLockScrolling', 'show', 'style']);\n\n      var prepareStyles = this.context.muiTheme.prepareStyles;\n\n      var styles = getStyles(this.props, this.context);\n\n      return _react2.default.createElement(\n        'div',\n        _extends({}, other, { ref: 'overlay', style: prepareStyles((0, _simpleAssign2.default)(styles.root, style)) }),\n        autoLockScrolling && _react2.default.createElement(_AutoLockScrolling2.default, { lock: show })\n      );\n    }\n  }]);\n\n  return Overlay;\n}(_react.Component);\n\nOverlay.propTypes = {\n  autoLockScrolling: _react.PropTypes.bool,\n  show: _react.PropTypes.bool.isRequired,\n  /**\n   * Override the inline-styles of the root element.\n   */\n  style: _react.PropTypes.object,\n  transitionEnabled: _react.PropTypes.bool\n};\nOverlay.defaultProps = {\n  autoLockScrolling: true,\n  transitionEnabled: true,\n  style: {}\n};\nOverlay.contextTypes = {\n  muiTheme: _react.PropTypes.object.isRequired\n};\nexports.default = Overlay;"
  },
  {
    "path": "gen/src/test/resources/mui15/styles/transitions.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n\n  easeOutFunction: 'cubic-bezier(0.23, 1, 0.32, 1)',\n  easeInOutFunction: 'cubic-bezier(0.445, 0.05, 0.55, 0.95)',\n\n  easeOut: function easeOut(duration, property, delay, easeFunction) {\n    easeFunction = easeFunction || this.easeOutFunction;\n\n    if (property && Object.prototype.toString.call(property) === '[object Array]') {\n      var transitions = '';\n      for (var i = 0; i < property.length; i++) {\n        if (transitions) transitions += ',';\n        transitions += this.create(duration, property[i], delay, easeFunction);\n      }\n\n      return transitions;\n    } else {\n      return this.create(duration, property, delay, easeFunction);\n    }\n  },\n  create: function create(duration, property, delay, easeFunction) {\n    duration = duration || '450ms';\n    property = property || 'all';\n    delay = delay || '0ms';\n    easeFunction = easeFunction || 'linear';\n\n    return property + ' ' + duration + ' ' + easeFunction + ' ' + delay;\n  }\n};"
  },
  {
    "path": "gen/src/test/resources/mui15/utils/autoPrefix.js",
    "content": "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  set: function set(style, key, value) {\n    style[key] = value;\n  }\n};"
  },
  {
    "path": "gen/src/test/resources/mui15/utils/propTypes.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar horizontal = _react.PropTypes.oneOf(['left', 'middle', 'right']);\nvar vertical = _react.PropTypes.oneOf(['top', 'center', 'bottom']);\n\nexports.default = {\n\n  corners: _react.PropTypes.oneOf(['bottom-left', 'bottom-right', 'top-left', 'top-right']),\n\n  horizontal: horizontal,\n\n  vertical: vertical,\n\n  origin: _react.PropTypes.shape({\n    horizontal: horizontal,\n    vertical: vertical\n  }),\n\n  cornersAndCenter: _react.PropTypes.oneOf(['bottom-center', 'bottom-left', 'bottom-right', 'top-center', 'top-left', 'top-right']),\n\n  stringOrNumber: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.number]),\n\n  zDepth: _react.PropTypes.oneOf([0, 1, 2, 3, 4, 5])\n\n};"
  },
  {
    "path": "gen/src/test/scala/com/olvind/JsParserTest.scala",
    "content": "package com.olvind\n\nimport ammonite.ops._\nimport com.olvind.requiresjs._\n\nclass JsParserTest extends org.scalatest.FunSuite with org.scalatest.Matchers {\n\n  private val mui15 = cwd / \"src\" / \"test\" / \"resources\" / \"mui15\" / \"comps\"\n\n  test(\"Divider.propTypes = propTypes;\") {\n    val result = Require(mui15 / \"Divider.js\", Set(\"index.js\"))\n    println(result)\n  }\n\n//  test(\"Drawer.propTypes = {...}\") {\n//    val result: Required = Require(mui15 / \"Drawer.js\")\n//    println(result)\n//  }\n}\n"
  },
  {
    "path": "gen/src/test/scala/com/olvind/PropCommentTest.scala",
    "content": "package com.olvind\n\nclass PropCommentTest extends org.scalatest.FunSuite with org.scalatest.Matchers {\n\n  test(\"comment 0\") {\n    val inputs: Seq[String] =\n      Seq(\n        \"\"\"//arne\"\"\",\n        \"\"\"/*arne*/\"\"\",\n        \"\"\"/**arne*/\"\"\",\n        \"\"\" /** arne */\"\"\",\n        \"\"\" /** arne **/\"\"\"\n      )\n    inputs map PropComment.clean map (_ should equal(PropComment(Some(\"arne\"), Seq.empty)))\n  }\n\n  test(\"comment 1\") {\n    val input = \"\"\"  /**\n      |   * @ignore\n      |   * The material-ui theme applied to this component.\n      |   */\n      |\"\"\".stripMargin\n\n    PropComment.clean(input) should equal(\n      PropComment(Some(\"The material-ui theme applied to this component.\"), Seq(Ignore)))\n  }\n\n  test(\"comment 2\") {\n    val input = \"\"\"    /**\n                  |     * Callback function that is fired when the header of step is touched.\n                  |     *\n                  |     * @param {number} stepIndex - The index of step is being touched.\n                  |     * @param {node} Step component which is being touched\n                  |     */\n                  |\"\"\".stripMargin\n\n    PropComment.clean(input) should equal(\n      PropComment(\n        Some(\"Callback function that is fired when the header of step is touched.\"),\n        Seq(\n          Param(\"{number} stepIndex - The index of step is being touched.\"),\n          Param(\"{node} Step component which is being touched\")\n        )\n      ))\n  }\n\n  test(\"comment 3\") {\n    val input =\n      \"\"\"    /**\n                  |     * Fired when the `Snackbar` is requested to be closed by a click outside the `Snackbar`, or after the\n                  |     * `autoHideDuration` timer expires.\n                  |     *\n                  |     * Typically `onRequestClose` is used to set state in the parent component, which is used to control the `Snackbar`\n                  |     * `open` prop.\n                  |     *\n                  |     * The `reason` parameter can optionally be used to control the response to `onRequestClose`,\n                  |     * for example ignoring `clickaway`.\n                  |     *\n                  |     * @param {string} reason Can be:`\"timeout\"` (`autoHideDuration` expired) or: `\"clickaway\"`\n                  |     */\"\"\".stripMargin\n    val expected = PropComment(\n      Some(\n        \"\"\"Fired when the `Snackbar` is requested to be closed by a click outside the `Snackbar`, or after the\n        |`autoHideDuration` timer expires.\n        |Typically `onRequestClose` is used to set state in the parent component, which is used to control the `Snackbar`\n        |`open` prop.\n        |The `reason` parameter can optionally be used to control the response to `onRequestClose`,\n        |for example ignoring `clickaway`.\"\"\".stripMargin),\n      Seq(\n        Param(\n          \"\"\"{string} reason Can be:`\"timeout\"` (`autoHideDuration` expired) or: `\"clickaway\"`\"\"\"))\n    )\n\n    val actual = PropComment.clean(input)\n\n    expected.value should equal(actual.value)\n    expected.anns should equal(actual.anns)\n  }\n\n  test(\"comment 4\") {\n    val input = \"\"\"  /**\n                  |   * @param 1\n                  |   * 2\n                  |   * @param 3\n                  |   * 4\n                  |   */\n                  |\"\"\".stripMargin\n\n    PropComment.clean(input).anns should equal(Seq(Param(\"1\\n2\"), Param(\"3\\n4\")))\n  }\n\n  test(\"comment 5\") {\n    val input = \"\"\"  /**\n                  |   * @ignore\n                  |   */\n                  |\"\"\".stripMargin\n\n    PropComment.clean(input) should equal(PropComment(None, Seq(Ignore)))\n  }\n\n}\n"
  },
  {
    "path": "macros/src/main/scala/chandu0101/macros/tojs/GhPagesMacros.scala",
    "content": "package chandu0101.macros.tojs\n\nimport java.util.regex.Pattern\nimport scala.reflect.macros.blackbox.Context\nimport scala.language.experimental.macros\n\n/**\n  * Shamelessly stolen from https://github.com/japgolly/scalajs-react/blob/master/gh-pages-macros/src/main/scala/ghpages/GhPagesMacros.scala\n  */\nobject GhPagesMacros {\n  def exampleSource: String = macro GhPagesMacroImpls.exampleSource\n}\n\nobject GhPagesMacroImpls {\n  val trimRight = \"\\\\s+$\".r\n\n  def blankLine(s: String) =\n    s.trim.isEmpty\n\n  @annotation.tailrec\n  def trimLeftAll(ls: Stream[String]): Stream[String] =\n    if (ls.nonEmpty && ls.forall(_.headOption forall Character.isWhitespace))\n      trimLeftAll(ls.map(s => if (s.isEmpty) s else s.tail))\n    else\n      ls\n\n  val exampleStart = \"EXAMPLE:START\"\n  val exampleEnd   = \"EXAMPLE:END\"\n}\n\nclass GhPagesMacroImpls(val c: Context) extends ReactMacroUtils {\n  import GhPagesMacroImpls._\n  import c.universe._\n\n  def splitOnce(marker: String)(s: String): (String, String) = {\n    val r = s\"\"\"\\n[ \\t]*//[ \\t]*${Pattern quote marker}[ \\t]*\"\"\".r\n    val x = r.split(s)\n    if (x.length < 2)\n      fail(s\"Marker not found: // $marker\")\n    else if (x.length > 2)\n      fail(s\"Duplicate marker found: // $marker\")\n    (x(0), x(1))\n  }\n\n  def betweenMarkers(s: String, a: String, b: String): String = {\n    val tmp = splitOnce(a)(s)._2\n    splitOnce(b)(tmp)._1\n  }\n\n  def exampleSource: c.Expr[String] = {\n    val fileContent = String valueOf c.enclosingPosition.source.content\n    val egContent   = betweenMarkers(fileContent, exampleStart, exampleEnd)\n\n    val lines =\n      egContent\n        .split('\\n')\n        .toStream\n        .map(trimRight.replaceFirstIn(_, \"\"))\n        .dropWhile(blankLine)\n        .reverse\n        .dropWhile(blankLine)\n        .reverse\n\n    val output = trimLeftAll(lines) mkString \"\\n\"\n\n    c.Expr[String](Literal(Constant(output)))\n  }\n}\n"
  },
  {
    "path": "macros/src/main/scala/chandu0101/macros/tojs/JSMacro.scala",
    "content": "package chandu0101.macros.tojs\n\nimport japgolly.scalajs.react.CallbackTo\nimport japgolly.scalajs.react.vdom.{TagOf, VdomElement, VdomNode}\n\nimport scala.collection.{GenMap, GenTraversableOnce}\nimport scala.language.experimental.macros\nimport scala.reflect.macros.blackbox\nimport scala.scalajs.js\n\n/**\n  * modified version of https://github.com/wav/scala-macros/blob/master/src/main/scala/wav/common/scalajs/macros/Macros.scala\n  * via https://github.com/chandu0101/macros/blob/master/src/main/scala/chandu0101/macros/tojs/JSMacro.scala\n  */\nobject JSMacro {\n  type TOJS = {\n    val toJS: js.Object\n  }\n\n  def apply[T]: T => js.Object = macro applyImpl[T]\n\n\n  def applyImpl[T: c.WeakTypeTag](c: blackbox.Context): c.Tree = {\n    import c.universe._\n\n    def isOptional(tpe: Type): Boolean =\n      tpe <:< typeOf[Option[_]] || tpe <:< typeOf[js.UndefOr[_]]\n\n    def isNotPrimitiveAnyVal(tpe: Type) =\n      !tpe.typeSymbol.fullName.startsWith(\"scala.\")\n\n    def flattenUnion(tpe: Type): List[Type] =\n      if (tpe <:< typeOf[js.|[_, _]])\n        flattenUnion(tpe.typeArgs(0)) ++ flattenUnion(tpe.typeArgs(1))\n      else List(tpe)\n\n    def getJSValueTree(target: Tree, rt: Type): Tree = {\n      if (rt <:< typeOf[TOJS])\n        q\"\"\"if ($target != null) $target.toJS else null\"\"\"\n\n      /* scala collections */\n      else if (rt <:< typeOf[GenMap[String, _]])\n        if (rt.typeArgs(1) <:< typeOf[TOJS])\n          q\"\"\"$target.map{ case (k, o) => k -> (if(o == null) null else o.toJS)}.toJSDictionary\"\"\"\n        else\n          q\"\"\"$target.toJSDictionary\"\"\"\n      else if (rt <:< typeOf[GenTraversableOnce[_]] || (rt <:< typeOf[Array[_]]))\n        if (rt.typeArgs.head <:< typeOf[TOJS])\n          q\"\"\"$target.map(o => if(o == null) null else o.toJS).toJSArray\"\"\"\n        else\n          q\"\"\"$target.toJSArray\"\"\"\n\n      /* javascript collections. Only need to rewrite if type parameter is <:< TOJS */\n      else if (rt <:< typeOf[js.Dictionary[_]] && rt.typeArgs.head <:< typeOf[TOJS])\n        q\"\"\"$target.map{case(k, o) => (k, if(o == null) null else o.toJS)}.toJSDictionary\"\"\"\n      else if (rt <:< typeOf[js.Array[_]] && rt.typeArgs.head <:< typeOf[TOJS])\n        q\"\"\"$target.map(o => if(o == null) null else o.toJS)\"\"\"\n\n      /* rewrite functions returning a Callback so that javascript land can call them */\n      else if (rt <:< typeOf[CallbackTo[_]])\n        q\"\"\"$target.toJsFn\"\"\"\n      else if (rt <:< typeOf[Function0[CallbackTo[_]]])\n        q\"\"\"$target().toJsFn\"\"\"\n      else if (rt <:< typeOf[Function1[_, CallbackTo[_]]])\n        q\"\"\"js.Any.fromFunction1(((t0: ${rt.typeArgs(0)}) => $target(t0).runNow()))\"\"\"\n      else if (rt <:< typeOf[Function2[_, _, CallbackTo[_]]])\n        q\"\"\"js.Any.fromFunction2(((t0: ${rt.typeArgs(0)}, t1: ${rt.typeArgs(1)}) => $target(t0, t1).runNow()))\"\"\"\n      else if (rt <:< typeOf[Function3[_, _, _, CallbackTo[_]]])\n        q\"\"\"js.Any.fromFunction3(((t0: ${rt.typeArgs(0)}, t1: ${rt.typeArgs(1)}, t2: ${rt.typeArgs(2)}) => $target(t0, t1, t2).runNow()))\"\"\"\n      else if (rt <:< typeOf[Function0[_]])\n        q\"\"\"js.Any.fromFunction0($target)\"\"\"\n      else if (rt <:< typeOf[Function1[_, _]])\n        q\"\"\"js.Any.fromFunction1($target)\"\"\"\n      else if (rt <:< typeOf[Function2[_, _, _]])\n        q\"\"\"js.Any.fromFunction2($target)\"\"\"\n      else if (rt <:< typeOf[Function3[_, _, _, _]])\n        q\"\"\"js.Any.fromFunction3($target)\"\"\"\n\n      /* other scalajs-react things we need to rewrite */\n      else if (rt <:< typeOf[VdomElement])\n        q\"\"\"$target.rawElement.asInstanceOf[js.Any]\"\"\"\n      else if (rt <:< typeOf[VdomNode])\n        q\"\"\"$target.rawNode.asInstanceOf[js.Any]\"\"\"\n      else if (rt <:< typeOf[TagOf[_]])\n        q\"\"\"$target.render.rawElement.asInstanceOf[js.Any]\"\"\"\n\n      /* Other values. Keep AnyVal below at least CallbackTo */\n      else if (rt <:< typeOf[AnyVal] && isNotPrimitiveAnyVal(rt))\n        q\"\"\"$target.value.asInstanceOf[js.Any]\"\"\"\n      else if (rt <:< typeOf[AnyVal] || rt <:< typeOf[String] || rt <:< typeOf[js.Any])\n        q\"\"\"$target.asInstanceOf[js.Any]\"\"\"\n      else if (rt <:< typeOf[Enumeration#Value])\n        q\"\"\"$target.toString.asInstanceOf[js.Any]\"\"\"\n      else if (rt <:< typeOf[js.|[_, _]]) {\n\n        val (jsTypes, scalaTypes) = flattenUnion(rt).distinct.partition(_ <:< typeOf[js.Any])\n\n        val scalaCases = scalaTypes.map(\n          tpe => cq\"\"\"x: $tpe => ${getJSValueTree(q\"x\", tpe)}\"\"\"\n        )\n\n        if (jsTypes.size > 1) {\n          c.warning(target.pos, s\"Cannot differentiate ${jsTypes.mkString(\", \")}\")\n        }\n\n        val jsCase = jsTypes.take(1).map(tpe => cq\"\"\"x => x.asInstanceOf[js.Any]\"\"\")\n\n        q\"\"\"($target: scala.Any) match {\n          case ..$scalaCases\n          case ..$jsCase\n        }\"\"\"\n      }\n      else {\n        val conversion = c.inferImplicitView(target, rt, typeOf[js.Any], silent = false)\n        q\"\"\"$conversion($target)\"\"\"\n      }\n    }\n\n    val tpe    = c.weakTypeOf[T]\n    val target = c.freshName[TermName](TermName(\"t\"))\n    val props  = c.freshName[TermName](TermName(\"p\"))\n\n    val fieldSymbols: List[Symbol] = tpe.decls\n      .collectFirst {\n        case m: MethodSymbol if m.isPrimaryConstructor => m\n      }\n      .get\n      .paramLists\n      .head\n\n    val fieldUpdates = fieldSymbols.map { f =>\n      val name    = f.asTerm.name\n      val decoded = name.decodedName.toString\n\n      val res = if (isOptional(f.typeSignature)) {\n        val valueTree = getJSValueTree(q\"v\", f.typeSignature.typeArgs.head)\n        q\"\"\"$target.$name.foreach(v => $props.updateDynamic($decoded)($valueTree))\"\"\"\n      } else {\n        val valueTree = getJSValueTree(q\"$target.$name\", f.typeSignature)\n        q\"\"\"$props.updateDynamic($decoded)($valueTree)\"\"\"\n      }\n      res\n    }\n\n    q\"\"\" ($target: $tpe) => {\n      val $props = scala.scalajs.js.Dynamic.literal()\n      ..$fieldUpdates\n      $props\n    }\"\"\"\n  }\n}\n"
  },
  {
    "path": "macros/src/main/scala/chandu0101/macros/tojs/ReactMacroUtils.scala",
    "content": "package chandu0101.macros.tojs\n\nimport scala.reflect.macros.blackbox.Context\n\n/**\n  * Shamelessly stolen from https://github.com/japgolly/scalajs-react/blob/master/gh-pages-macros/src/main/scala/ghpages/ReactMacroUtils.scala\n  */\nabstract class ReactMacroUtils {\n  val c: Context\n  import c.universe._\n\n  final def fail(msg: String): Nothing =\n    c.abort(c.enclosingPosition, msg)\n\n  final def warn(msg: String): Unit =\n    c.warning(c.enclosingPosition, msg)\n\n  final def concreteWeakTypeOf[T: c.WeakTypeTag]: Type = {\n    val t = weakTypeOf[T]\n    ensureConcrete(t)\n    t\n  }\n\n  final def ensureConcrete(t: Type): Unit = {\n    val sym = t.typeSymbol.asClass\n    if (sym.isAbstract)\n      fail(s\"${sym.name} is abstract which is not allowed.\")\n    if (sym.isTrait)\n      fail(s\"${sym.name} is a trait which is not allowed.\")\n    if (sym.isSynthetic)\n      fail(s\"${sym.name} is synthetic which is not allowed.\")\n  }\n\n  final def caseClassType[T: c.WeakTypeTag]: Type = {\n    val t = concreteWeakTypeOf[T]\n    ensureCaseClass(t)\n    t\n  }\n\n  final def ensureCaseClass(t: Type): Unit = {\n    val sym = t.typeSymbol.asClass\n    if (!sym.isCaseClass)\n      fail(s\"${sym.name} is not a case class.\")\n  }\n\n  final def primaryConstructorParams(t: Type): List[Symbol] =\n    t.decls\n      .collectFirst { case m: MethodSymbol if m.isPrimaryConstructor => m }\n      .getOrElse(fail(\"Unable to discern primary constructor.\"))\n      .paramLists\n      .headOption\n      .getOrElse(fail(\"Primary constructor missing paramList.\"))\n\n  final def nameAndType(T: Type, s: Symbol): (TermName, Type) = {\n    def paramType(name: TermName): Type =\n      T.decl(name).typeSignatureIn(T) match {\n        case NullaryMethodType(t) => t\n        case t                    => t\n      }\n\n    val a = s.asTerm.name\n    val A = paramType(a)\n    (a, A)\n  }\n\n  /**\n    * Create code for a function that will call .apply() on a given type's type companion object.\n    */\n  final def tcApplyFn(t: Type): Select = {\n    val sym = t.typeSymbol\n    val tc  = sym.companion\n    if (tc == NoSymbol)\n      fail(s\"Companion object not found for $sym\")\n    val pre = t match {\n      case TypeRef(p, _, _) => p\n      case x                => fail(s\"Don't know how to extract `pre` from ${showRaw(x)}\")\n    }\n\n    pre match {\n      // Path dependent, eg. `t.Literal`\n      case SingleType(NoPrefix, path) =>\n        Select(Ident(path), tc.asTerm.name)\n\n      // Assume type companion .apply exists\n      case _ =>\n        Select(Ident(tc), TermName(\"apply\"))\n    }\n  }\n\n  final def tryInferImplicit(t: Type): Option[Tree] =\n    c.inferImplicitValue(t, silent = true) match {\n      case EmptyTree => None\n      case i         => Some(i)\n    }\n\n  final def needInferImplicit(t: Type): Tree =\n    tryInferImplicit(t) getOrElse fail(s\"Implicit not found: $t\")\n\n  final def replaceMacroMethod(newMethod: String) =\n    c.macroApplication match {\n      case TypeApply(Select(r, _), _) => Select(r, TermName(newMethod))\n      case Select(r, _)               => Select(r, TermName(newMethod))\n      case x                          => fail(s\"Don't know how to parse macroApplication: ${showRaw(x)}\")\n    }\n\n}\n"
  },
  {
    "path": "macros/src/test/scala/chandu0101/macros/tojs/JSMacroTest.scala",
    "content": "package chandu0101.macros.tojs\n\nimport japgolly.scalajs.react.{Callback, CallbackTo}\nimport org.scalatest.FunSuite\n\nimport scala.scalajs.js\nimport scala.scalajs.js.Dynamic.{literal => json}\nimport scala.scalajs.js.JSON\nimport scala.scalajs.js.JSConverters._\n\ncase class Address(country: String) {\n  val toJS: js.Object = JSMacro[Address](this)\n}\n\ncase class Person(name: String, address: js.UndefOr[Address] = js.undefined)\n\nclass SeedType(val value: String) extends AnyVal\n\nobject SeedType {\n\n  val RICE = new SeedType(\"rice\")\n\n}\n\ncase class AnyValTest(st: SeedType = SeedType.RICE)\n\ncase class Plain(name: String,\n                 category: String,\n                 peracre: js.UndefOr[Int] = js.undefined,\n                 address: Address = null)\n\ncase class SeqTest(s: Seq[String] = Seq(\"dude\"), as: Seq[Address] = Seq(Address(\"India\"), null))\n\ncase class SeqUndefTest(s: js.UndefOr[Seq[String]] = Seq(\"dude\"),\n                        as: js.UndefOr[Seq[Address]] = Seq(Address(\"India\"), null))\n\ncase class SetTest(s: Set[String] = Set(\"dude\"),\n                   as: js.UndefOr[Set[Address]] = Set(Address(\"India\"), null))\n\ncase class ArrayTest(s: Array[String] = Array(\"dude\"),\n                     as: js.UndefOr[Array[Address]] = Array(Address(\"India\"), null))\n\ncase class MapTest(m: Map[String, String] = Map(\"key\" -> \"0\"),\n                   ma: js.UndefOr[Map[String, Address]] =\n                     Map(\"address\" -> Address(\"India\"), \"address2\" -> null))\n\ncase class JSDictTest(m: js.Dictionary[String] = js.Dictionary(\"key\" -> \"0\"),\n                      ma: js.UndefOr[js.Dictionary[Address]] =\n                        js.Dictionary(\"address\" -> Address(\"India\"), \"address2\" -> null))\n\ncase class FunctionTest(fn0: () => Int = () => 5,\n                        fn1: js.UndefOr[Double => String] = (d: Double) => s\"$d x\")\n\nclass SeedType2 private (val value: String) extends AnyVal\n\nobject SeedType2 {\n  val RICE = new SeedType2(\"rice\")\n}\n\ntrait SelectOption {\n  val toJS: js.Object\n}\n\ncase class SampleOption(value: String = \"gel\", label: String = \"kel\") extends SelectOption {\n  override val toJS: js.Object = json(value = value, label = label)\n}\n\ncase class TPTest[T <: SelectOption](o: js.UndefOr[js.Array[T]])\n\ncase class AnyValTest2(st: SeedType2 = SeedType2.RICE)\n\nimport scala.scalajs.js.UndefOr.{any2undefOrA => u}\n\ncase class CallbackTest( //<ocd>\n    f0: CallbackTo[Int] = CallbackTo(0),\n    fu: () => CallbackTo[Int] = () => CallbackTo(0),\n    f1: Int => CallbackTo[Int] = i1 => CallbackTo(i1),\n    f2: (Int, Int) => CallbackTo[Int] = (i1, i2) => CallbackTo(i1 + i2),\n    f3: (Int, Int, Int) => CallbackTo[Int] = (i1, i2, i3) => CallbackTo(i1 + i2 + i3),\n    f0c: Callback = Callback(()),\n    fuc: () => Callback = () => Callback(()),\n    f1c: Int => Callback = i1 => Callback(()),\n    f2c: (Int, Int) => Callback = (i1, i2) => Callback(()),\n    f3c: (Int, Int, Int) => Callback = (i1, i2, i3) => Callback(()),\n    f0u: js.UndefOr[CallbackTo[Int]] = u(CallbackTo(0)),\n    fuu: js.UndefOr[() => CallbackTo[Int]] = u(() => CallbackTo(0)),\n    f1u: js.UndefOr[Int => CallbackTo[Int]] = u(i1 => CallbackTo(i1)),\n    f2u: js.UndefOr[(Int, Int) => CallbackTo[Int]] = u((i1, i2) => CallbackTo(i1 + i2)),\n    f3u: js.UndefOr[(Int, Int, Int) => CallbackTo[Int]] = u(\n      (i1, i2, i3) => CallbackTo(i1 + i2 + i3)))\n\nclass JSMacroTest[T <: SelectOption] extends FunSuite {\n\n  def printResult(result: js.Any) = {\n    println(s\"Result is : ${JSON.stringify(result)}\")\n  }\n\n  test(\"simple fields test\") {\n    val plain = JSMacro[Plain](Plain(\"bpt\", \"rice\")).asInstanceOf[js.Dynamic]\n    assert(plain.name.toString == \"bpt\")\n    assert(plain.category.toString == \"rice\")\n    assert(!plain.asInstanceOf[js.Object].hasOwnProperty(\"peracre\"))\n  }\n\n  test(\"callbacks\") {\n    val c   = CallbackTest()\n    val out = JSMacro[CallbackTest](c).asInstanceOf[js.Dynamic]\n\n    assert(0 == out.f0.apply().asInstanceOf[Int])\n    assert(0 == out.fu.apply(()).asInstanceOf[Int])\n    assert(1 == out.f1.apply(1).asInstanceOf[Int])\n    assert(2 == out.f2.apply(1, 1).asInstanceOf[Int])\n    assert(3 == out.f3.apply(1, 1, 1).asInstanceOf[Int])\n    assert(0 == out.f0u.apply().asInstanceOf[Int])\n    assert(0 == out.fuu.apply(()).asInstanceOf[Int])\n    assert(1 == out.f1u.apply(1).asInstanceOf[Int])\n    assert(2 == out.f2u.apply(1, 1).asInstanceOf[Int])\n    assert(3 == out.f3u.apply(1, 1, 1).asInstanceOf[Int])\n    assert(out.f0c.apply().isInstanceOf[Unit])\n    assert(out.fuc.apply(()).isInstanceOf[Unit])\n    assert(out.f1c.apply(1).isInstanceOf[Unit])\n    assert(out.f2c.apply(1, 1).isInstanceOf[Unit])\n    assert(out.f3c.apply(1, 1, 1).isInstanceOf[Unit])\n  }\n\n  test(\"should handle seq\") {\n    val result = JSMacro[SeqTest](SeqTest()).asInstanceOf[js.Dynamic]\n    println(s\"result array ${JSON.stringify(result)}\")\n    assert(result.s.asInstanceOf[js.Array[String]].head == \"dude\")\n    assert(\n      result.as\n        .asInstanceOf[js.Array[js.Dictionary[String]]]\n        .head(\"country\") == \"India\")\n\n    val result2 = JSMacro[SeqUndefTest](SeqUndefTest()).asInstanceOf[js.Dynamic]\n    println(s\"result2 array ${JSON.stringify(result2)}\")\n    assert(result2.s.asInstanceOf[js.Array[String]].head == \"dude\")\n    assert(\n      result2.as\n        .asInstanceOf[js.Array[js.Dictionary[String]]]\n        .head(\"country\") == \"India\")\n  }\n\n  test(\"should handle sets\") {\n    val result = JSMacro[SetTest](SetTest()).asInstanceOf[js.Dynamic]\n    assert(result.s.asInstanceOf[js.Array[String]].head == \"dude\")\n    assert(\n      result.as\n        .asInstanceOf[js.Array[js.Dictionary[String]]]\n        .head(\"country\") == \"India\")\n  }\n\n  test(\"should handle arrays\") {\n    val result = JSMacro[ArrayTest](ArrayTest()).asInstanceOf[js.Dynamic]\n    assert(result.s.asInstanceOf[js.Array[String]].head == \"dude\")\n    assert(\n      result.as\n        .asInstanceOf[js.Array[js.Dictionary[String]]]\n        .head(\"country\") == \"India\")\n  }\n\n  test(\"should handle maps\") {\n    val result = JSMacro[MapTest](MapTest()).asInstanceOf[js.Dynamic]\n    assert(result.m.asInstanceOf[js.Dictionary[String]].get(\"key\").get == \"0\")\n    assert(\n      result.ma\n        .asInstanceOf[js.Dictionary[js.Dynamic]]\n        .get(\"address\")\n        .get\n        .country\n        .toString == \"India\")\n  }\n\n  test(\"should handle js.Dictionary\") {\n    val result = JSMacro[JSDictTest](JSDictTest()).asInstanceOf[js.Dynamic]\n    assert(result.m.asInstanceOf[js.Dictionary[String]].get(\"key\").get == \"0\")\n    assert(\n      result.ma\n        .asInstanceOf[js.Dictionary[js.Dynamic]]\n        .get(\"address\")\n        .get\n        .country\n        .toString == \"India\")\n  }\n\n  test(\"should handle functions\") {\n    val result = JSMacro[FunctionTest](FunctionTest()).asInstanceOf[js.Dynamic]\n    assert(result.fn0.asInstanceOf[js.Function0[Int]]() == 5)\n    assert(result.fn1.asInstanceOf[js.Function1[Double, String]](1.2) == \"1.2 x\")\n  }\n\n  test(\"should handle any vals\") {\n    val result = JSMacro[AnyValTest2](AnyValTest2()).asInstanceOf[js.Dynamic]\n    assert(result.st.toString == \"rice\")\n  }\n\n  test(\"should work with custom traits\") {\n    val result = JSMacro[TPTest[SampleOption]](TPTest(js.Array(SampleOption())))\n    printResult(result)\n  }\n}\n"
  },
  {
    "path": "project/build.properties",
    "content": "sbt.version=1.1.1\n"
  },
  {
    "path": "project/plugins.sbt",
    "content": "addSbtPlugin(\"org.scala-js\"  % \"sbt-scalajs\"         % \"0.6.22\")\naddSbtPlugin(\"ch.epfl.scala\" % \"sbt-scalajs-bundler\" % \"0.11.0\")\n"
  }
]