diff --git a/.github/workflows/githubpages.yaml b/.github/workflows/githubpages.yaml index 86130417a30..3f4f7394da5 100644 --- a/.github/workflows/githubpages.yaml +++ b/.github/workflows/githubpages.yaml @@ -19,7 +19,7 @@ jobs: - name: Dokka id: Dokka - run: ./gradlew -Pversion=${{ github.event.release.tag_name }} cleanDocs dokkaHtmlMultiModule -Pgithubpages=true + run: ./gradlew -Pversion=${{ github.event.release.tag_name }} dokkaHtmlMultiModule -Pgithubpages=true - name: Deploy to gh-pages uses: peaceiris/actions-gh-pages@v3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 07a81f32531..daad283c8d6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -139,33 +139,6 @@ public sealed class Option { If your snippet is showing examples on how to use the public APIs in a broader scenario (like describing FP patterns or similar), then you'll add those snippets to the described docs Markdown file. -## How to run the website in your local workspace - -```sh -./gradlew :arrow-site:buildSite -``` - -That Gradle task is equivalent to run Dokka and Jekyll build: - -```bash -./gradlew dokkaGfm -cd arrow-site -bundle install --gemfile Gemfile --path vendor/bundle -bundle exec jekyll serve -s build/site -``` - -This will install any needed dependencies locally, and will use it to launch the complete website in [127.0.0.1:4000](http://127.0.0.1:4000) so you can open it with a standard browser. - -If you get an error while installing the Ruby gem _http_parser_, check if the path to your Arrow directory contains spaces. According to this [issue](https://github.com/tmm1/http_parser.rb/issues/47), the installation with spaces in the path is currently not working. - -### How to test links - -Test for broken links in documentation using - -```sh -wget --spider -r -nd -nv -l 5 http://127.0.0.1:4000 -``` - ## How to propose an improvement If it's the first time you contribute with a GitHub repository, take a look at [Collaborating with issues and pull requests](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests). @@ -295,8 +268,6 @@ This short guideline provides all the things to keep in mind when adding a new m - Add `/gradle.properties` - Add `/build.gradle.kts` - Update `settings.gradle.kts` -- Website: - - Update [sidebar files](arrow-site/docs/_data) - Utilities: - Update BOM file: [build.gradle](arrow-stack/build.gradle) diff --git a/arrow-site/Gemfile b/arrow-site/Gemfile deleted file mode 100644 index 169b81d49a7..00000000000 --- a/arrow-site/Gemfile +++ /dev/null @@ -1,5 +0,0 @@ -source "https://rubygems.org" - -gem "jekyll", "~> 4.2.0" -gem "jekyll-redirect-from" -gem 'webrick' diff --git a/arrow-site/build.gradle.kts b/arrow-site/build.gradle.kts deleted file mode 100644 index 7b67ec9f6d8..00000000000 --- a/arrow-site/build.gradle.kts +++ /dev/null @@ -1,34 +0,0 @@ -@file:Suppress("DSL_SCOPE_VIOLATION") - -plugins { - id(libs.plugins.kotlin.jvm.get().pluginId) - alias(libs.plugins.ksp) -} - -dependencies { - implementation(projects.arrowCore) - implementation(projects.arrowFxCoroutines) - implementation(projects.arrowFxStm) - implementation(projects.arrowOptics) - ksp(projects.arrowOpticsKspPlugin) - compileOnly(libs.kotlin.reflect) -} - -tasks { - register("generateSite") { - commandLine("sh", "generate-site.sh") - } - - register("buildSite") { - group = "documentation" - description = "Generates and validates the documentation, and generates the website" - dependsOn("buildDoc") - dependsOn("generateSite") - } - - named("generateSite").get().mustRunAfter("buildDoc") - - named("clean") { - delete("$projectDir/docs/apidocs") - } -} diff --git a/arrow-site/docs/_code/analysis-home-code.md b/arrow-site/docs/_code/analysis-home-code.md deleted file mode 100644 index f4a0dd79e7a..00000000000 --- a/arrow-site/docs/_code/analysis-home-code.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -library: analysis ---- - -{: data-executable="true"} -```kotlin -// function with pre- and post-condition -fun increment(x: Int): Int { - pre(x > 0) { "value must be positive" } - return (x + 1).post({ it > 0 }) { "result is positive" } -} - -class Positive(val value: Int) { - init { require(value > 0) } // type invariant - fun add(other: Positive) = - Positive(this.value + other.value) -} -``` diff --git a/arrow-site/docs/_code/core-home-code.md b/arrow-site/docs/_code/core-home-code.md deleted file mode 100644 index 9163d0c3d50..00000000000 --- a/arrow-site/docs/_code/core-home-code.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -library: core ---- - -```kotlin -suspend fun prepareLunch(): Either = - // with the 'either' computation block - // we follow a "fail fast" strategy - either { - val lettuce = takeFoodFromRefrigerator().bind() - val knife = getKnife().bind() - val lunch = prepare(knife, lettuce).bind() - lunch - } -``` diff --git a/arrow-site/docs/_code/fx-home-code.md b/arrow-site/docs/_code/fx-home-code.md deleted file mode 100644 index f4cbb2f9f02..00000000000 --- a/arrow-site/docs/_code/fx-home-code.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -library: fx ---- - -```kotlin -suspend fun process(): List { - // maps to 'Employee' in parallel using 'parZip' - val audrey = parZip({ "Audrey" }, { company("Arrow") }) { - name, company -> Employee(name, company) - } - val pepe = parZip({ "Pepe" }, { company("Arrow") }) { - name, company -> Employee(name, company) - } - // hires in parallel using 'parTraverse' - return listOf(audrey, pepe).parTraverse { hire(it) } -} -``` diff --git a/arrow-site/docs/_code/meta-home-code.md b/arrow-site/docs/_code/meta-home-code.md deleted file mode 100644 index 1f8b250a318..00000000000 --- a/arrow-site/docs/_code/meta-home-code.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -library: meta ---- - -```kotlin -val Meta.helloWorld: CliPlugin get() = - "Hello World" { - meta( - namedFunction(this, { element.name == "helloWorld" }) { (c, _) -> // <-- namedFunction(...) {...} - Transform.replace( - replacing = c, - newDeclaration = """|fun helloWorld(): Unit = - | println("Hello ΛRROW Meta!") - |""".function(descriptor).syntheticScope - ) - } - ) - } -``` diff --git a/arrow-site/docs/_code/optics-home-code.md b/arrow-site/docs/_code/optics-home-code.md deleted file mode 100644 index c86b4069926..00000000000 --- a/arrow-site/docs/_code/optics-home-code.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -library: optics ---- - -```kotlin - val john = - Employee("Audrey Tang", - Company("Arrow", - Address("Functional City", - Street(42, "Lambda St.")))) - - // an optic is a reference to a piece of information - val optic = Employee.company.address.street.name - // which we then use to query or modify immutable data - val modified = optic.modify(john, String::toUpperCase) -``` diff --git a/arrow-site/docs/_config.yml b/arrow-site/docs/_config.yml deleted file mode 100644 index 2a6f217bed0..00000000000 --- a/arrow-site/docs/_config.yml +++ /dev/null @@ -1,51 +0,0 @@ -title: Arrow -#------------------------- -name: Λrrow -#------------------------- -description: Functional companion to Kotlin's Standard Library -#------------------------- -author: The Λrrow Authors -keywords: functional-programming, kotlin-library, monads, monad-transformers, functional-data-structure, kotlin, fp-types, adt, free-monads, tagless-final, mtl, for-comprehension, category-theory -#------------------------- -url: https://arrow-kt.io -#------------------------- -github_repo: https://github.com/arrow-kt/arrow -#------------------------- -twitter_handle: "@arrow_kt" -#------------------------- -slack_kotlin_channel: "https://slack.kotlinlang.org" -slack_arrow_channel: "https://kotlinlang.slack.com/archives/C5UPMM0A0" -#------------------------- -sass: - style: compressed -#------------------------- -exclude: ['config.ru', 'Gemfile', 'Gemfile.lock', 'vendor', 'Procfile', 'Rakefile', '.bundle'] -#------------------------- -collections: - code: - output: true -# Default Front Matter values to be set -defaults: - - scope: - path: "apidocs/arrow-optics*" - type: "pages" - values: - layout: "docs-optics" - - scope: - path: "apidocs/arrow-fx*" - type: "pages" - values: - layout: "docs-fx" - - scope: - path: "apidocs" - type: "pages" - values: - layout: "docs-core" - - scope: - type: code - values: - layout: code - -# Plugins -plugins: - - jekyll-redirect-from diff --git a/arrow-site/docs/_config_for_landing_page.yml b/arrow-site/docs/_config_for_landing_page.yml deleted file mode 100644 index a412b664867..00000000000 --- a/arrow-site/docs/_config_for_landing_page.yml +++ /dev/null @@ -1,36 +0,0 @@ -title: Arrow -#------------------------- -name: Λrrow -#------------------------- -description: Functional companion to Kotlin's Standard Library -#------------------------- -author: The Λrrow Authors -keywords: functional-programming, kotlin-library, monads, monad-transformers, functional-data-structure, kotlin, fp-types, adt, free-monads, tagless-final, mtl, for-comprehension, category-theory -#------------------------- -url: https://arrow-kt.io -#------------------------- -github_repo: https://github.com/arrow-kt/arrow -#------------------------- -twitter_handle: "@arrow_kt" -#------------------------- -slack_kotlin_channel: "https://slack.kotlinlang.org" -slack_arrow_channel: "https://kotlinlang.slack.com/archives/C5UPMM0A0" -#------------------------- -sass: - style: compressed -#------------------------- -exclude: ['config.ru', 'Gemfile', 'Gemfile.lock', 'vendor', 'Procfile', 'Rakefile', '.bundle', 'apidocs/', 'docs/', 'css/docs-styles.scss', 'img/core/', 'img/docs/', 'img/fx/', 'img/incubator/', 'img/kotlin-stdlib.png', 'img/labels/', 'img/linting/', 'img/meta/', 'img/old-design/', 'img/optics/', 'img/quickstart/'] -#------------------------- -collections: - code: - output: true -# Default Front Matter values to be set -defaults: - - scope: - type: code - values: - layout: code - -# Plugins -plugins: - - jekyll-redirect-from diff --git a/arrow-site/docs/_data/commons.yml b/arrow-site/docs/_data/commons.yml deleted file mode 100644 index efd40f6e70d..00000000000 --- a/arrow-site/docs/_data/commons.yml +++ /dev/null @@ -1,8 +0,0 @@ -name: "Arrow" -title: "Λrrow" -description: "Functional companion to Kotlin's Standard Library" -keywords: "functional-programming, kotlin-library, monads, monad-transformers, functional-data-structure, kotlin, fp-types, adt, effects handlers, continuations, coroutines, for-comprehension, category-theory" -google_analytics: "UA-18433785-18" -github_repository: "https://github.com/arrow-kt/arrow" -stable_version: "https://arrow-kt.io/" -next_version: "https://arrow-kt.io/docs/next/" diff --git a/arrow-site/docs/_data/doc-versions.yml b/arrow-site/docs/_data/doc-versions.yml deleted file mode 100644 index 8c5d3f557f5..00000000000 --- a/arrow-site/docs/_data/doc-versions.yml +++ /dev/null @@ -1,20 +0,0 @@ -docVersions: - - - title: "Version 0.12.x" - url: https://arrow-kt.io/docs/0.12/ - - - title: "Version 0.13.x" - url: https://arrow-kt.io/docs/0.13/ - - - title: "Version 1.0.x" - url: https://arrow-kt.io/docs/1.0/ - - - title: "Version 1.1.x" - url: https://arrow-kt.io/ - - - title: "Latest Alpha/RC version" - url: https://arrow-kt.io/docs/next/ - -# Literals -stable: Current version -next: Latest Alpha/RC version diff --git a/arrow-site/docs/_data/features.yml b/arrow-site/docs/_data/features.yml deleted file mode 100644 index f90561b4ff8..00000000000 --- a/arrow-site/docs/_data/features.yml +++ /dev/null @@ -1,36 +0,0 @@ -content: - - title: Quickstart - description: Λrrow is a library for Typed Functional Programming in Kotlin. - icon: img/home/arrow-core-lines - url: /quickstart/ - id: quickstart - - - title: Core - description: Functional companion to Kotlin's Standard Library - icon: img/home/arrow-core-lines - url: /core/ - id: core - - - title: FX - description: Functional Effects Framework companion to KotlinX Coroutines - icon: img/home/arrow-fx-lines - url: /fx/ - id: fx - - - title: Optics - description: Deep access and transformations over immutable data - icon: img/home/arrow-optics-lines - url: /optics/ - id: optics - - - title: Analysis - description: Pre-, post-condition, and invariant checks for your Kotlin code - icon: img/home/arrow-analysis-lines - url: /analysis/ - id: analysis - - - title: Meta - description: Metaprogramming library for Kotlin compiler plugins - icon: img/home/arrow-meta-lines - url: /meta/ - id: meta diff --git a/arrow-site/docs/_data/menu.yml b/arrow-site/docs/_data/menu.yml deleted file mode 100644 index f53b7123c29..00000000000 --- a/arrow-site/docs/_data/menu.yml +++ /dev/null @@ -1,15 +0,0 @@ -nav: - - title: Media - url: https://media.arrow-kt.io - - - title: Training - url: https://academy.47deg.com/courses/functional-programming-in-kotlin-and-arrow - - - title: Support - url: https://www.47deg.com/services/ - - - title: Github - url: https://github.com/arrow-kt/arrow - - - title: License - url: https://github.com/arrow-kt/arrow/blob/main/LICENSE diff --git a/arrow-site/docs/_data/quickstart.yml b/arrow-site/docs/_data/quickstart.yml deleted file mode 100644 index e0789023984..00000000000 --- a/arrow-site/docs/_data/quickstart.yml +++ /dev/null @@ -1,3 +0,0 @@ -quickstartCtaName: "Quickstart" -quickstartCtaUrl: /quickstart/ ---- diff --git a/arrow-site/docs/_data/sidebar-core.yml b/arrow-site/docs/_data/sidebar-core.yml deleted file mode 100644 index c4618a2014f..00000000000 --- a/arrow-site/docs/_data/sidebar-core.yml +++ /dev/null @@ -1,78 +0,0 @@ -options: - - title: Quick Start - url: /core/ - - - title: Extensions and data types - - nested_options: - - - title: Either - url: /apidocs/arrow-core/arrow.core/-either/ - - - title: Validated - url: /apidocs/arrow-core/arrow.core/-validated/ - - - title: Option - url: /apidocs/arrow-core/arrow.core/-option/ - - - title: NonEmptyList - url: /apidocs/arrow-core/arrow.core/-non-empty-list/ - - - title: Ior - url: /apidocs/arrow-core/arrow.core/-ior/ - - - title: Eval - url: /apidocs/arrow-core/arrow.core/-eval/ - - - title: Semigroup - url: /arrow/typeclasses/semigroup/ - - - title: Monoid - url: /arrow/typeclasses/monoid/ - - - title: Semiring - url: /apidocs/arrow-core/arrow.typeclasses/-semiring/ - - - title: Extensions - url: /apidocs/arrow-core/arrow.core/index.html#functions - - - title: Continuations and programs - - nested_options: - - - title: Effect - url: /apidocs/arrow-core/arrow.core.continuations/-effect/ - - - title: EffectScope - url: /apidocs/arrow-core/arrow.core.continuations/-effect-scope/ - - - title: EagerEffect - url: /apidocs/arrow-core/arrow.core.continuations/-eager-effect/ - - - title: EagerEffectScope - url: /apidocs/arrow-core/arrow.core.continuations/-eager-effect-scope/ - - - title: Tutorials - - nested_options: - - - title: Error Handling - url: /patterns/error_handling/ - - - title: The Monad Tutorial - url: /patterns/monads/ - - - title: Monad Comprehensions - url: /patterns/monad_comprehensions/ - - - title: Coroutines & Computation blocks - url: /fx/coroutines/ - - - title: Media - url: https://media.arrow-kt.io/tags/core/ - - - title: Api Docs - url: /apidocs/arrow-core/arrow.core - - - title: License - url: https://github.com/arrow-kt/arrow/blob/main/LICENSE diff --git a/arrow-site/docs/_data/sidebar-fx.yml b/arrow-site/docs/_data/sidebar-fx.yml deleted file mode 100644 index e92a81aa381..00000000000 --- a/arrow-site/docs/_data/sidebar-fx.yml +++ /dev/null @@ -1,47 +0,0 @@ -options: - - title: Quick Start - url: /fx/ - - - title: Extensions and data types - nested_options: - - - title: Parallel - url: /fx/parallel/ - - - title: Atomic - url: /apidocs/arrow-fx-coroutines/arrow.fx.coroutines/-atomic/ - - - title: Resource - url: /apidocs/arrow-fx-coroutines/arrow.fx.coroutines/-resource/ - - - title: Schedule - url: /apidocs/arrow-fx-coroutines/arrow.fx.coroutines/-schedule/ - - - title: CircuitBreaker - url: /apidocs/arrow-fx-coroutines/arrow.fx.coroutines/-circuit-breaker/ - - - - title: Misc - nested_options: - - - title: Coroutines - url: /fx/coroutines/ - - - title: Pure & Referentially Transparent Functions - url: /fx/purity-and-referentially-transparent-functions/ - - - title: Why suspend over IO monad - url: /effects/io/ - - - title: Media - url: https://media.arrow-kt.io/tags/fx/ - - - title: Api Docs - - nested_options: - - - title: Arrow Fx Coroutines - url: /apidocs/arrow-fx-coroutines/arrow.fx.coroutines/ - - - title: Arrow Fx STM - url: /apidocs/arrow-fx-stm/arrow.fx.stm/ diff --git a/arrow-site/docs/_data/sidebar-optics.yml b/arrow-site/docs/_data/sidebar-optics.yml deleted file mode 100644 index 2d8f6ee46da..00000000000 --- a/arrow-site/docs/_data/sidebar-optics.yml +++ /dev/null @@ -1,68 +0,0 @@ -options: - - title: Quick Start - url: /optics/ - - - title: Values DSL - - nested_options: - - - title: Overview - url: /optics/dsl/ - - - title: Iso - url: /optics/iso/ - - - title: Lens - url: /optics/lens/ - - - title: Optional - url: /optics/optional/ - - - title: Prism - url: /optics/prism/ - - - title: Getter - url: /optics/getter/ - - - title: Setter - url: /optics/setter/ - - - title: Reflection - url: /optics/reflection/ - - - title: Collections DSL - - nested_options: - - - title: Overview - url: /optics/collections_dsl/ - - - title: Fold - url: /optics/fold/ - - - title: Traversal - url: /optics/traversal/ - - - title: Every - url: /optics/every/ - - - title: Cons - url: /optics/cons/ - - - title: Snoc - url: /optics/snoc/ - - - title: At - url: /optics/at/ - - - title: Index - url: /optics/index/ - - - title: FilterIndex - url: /optics/filterindex/ - - - title: Media - url: https://media.arrow-kt.io/tags/optics/ - - - title: Api Docs - url: /apidocs/arrow-optics/arrow.optics diff --git a/arrow-site/docs/_data/sidebar-quickstart.yml b/arrow-site/docs/_data/sidebar-quickstart.yml deleted file mode 100644 index 0060e148c3c..00000000000 --- a/arrow-site/docs/_data/sidebar-quickstart.yml +++ /dev/null @@ -1,25 +0,0 @@ -options: - - title: Introduction - url: /quickstart/#rrow-is-a-library-for-typed-functional-programming-in-kotlin - - - title: Setup - url: /quickstart/#setup - - - title: Media - url: https://media.arrow-kt.io - - - title: Training - - nested_options: - - - title: 47 Degrees - url: https://www.47deg.com/ - - - title: Instill - url: https://instil.co/ - - - title: Code of Conduct - url: https://github.com/arrow-kt/arrow/blob/main/CODE_OF_CONDUCT.md - - - title: License - url: https://github.com/arrow-kt/arrow/blob/main/LICENSE diff --git a/arrow-site/docs/_includes/_doc-wrapper.html b/arrow-site/docs/_includes/_doc-wrapper.html deleted file mode 100644 index da901599d4a..00000000000 --- a/arrow-site/docs/_includes/_doc-wrapper.html +++ /dev/null @@ -1,38 +0,0 @@ -
-
- -
- Search - -
- -
-
- {% unless page.path contains 'apidocs' %} - - {% endunless %} - {% if page.video %} - {% include _media-wrapper.html id=page.video %} - {% endif %} - {{ content }} -
-
diff --git a/arrow-site/docs/_includes/_footer.html b/arrow-site/docs/_includes/_footer.html deleted file mode 100644 index 5e1c6e936e4..00000000000 --- a/arrow-site/docs/_includes/_footer.html +++ /dev/null @@ -1,23 +0,0 @@ - diff --git a/arrow-site/docs/_includes/_github-modal.html b/arrow-site/docs/_includes/_github-modal.html deleted file mode 100644 index e488b7e8a15..00000000000 --- a/arrow-site/docs/_includes/_github-modal.html +++ /dev/null @@ -1,18 +0,0 @@ -
-
-

Do you like Arrow?

- -
- Arrow Org - -
diff --git a/arrow-site/docs/_includes/_google-tag-manager.html b/arrow-site/docs/_includes/_google-tag-manager.html deleted file mode 100644 index 0000a6f64e3..00000000000 --- a/arrow-site/docs/_includes/_google-tag-manager.html +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/arrow-site/docs/_includes/_head-docs.html b/arrow-site/docs/_includes/_head-docs.html deleted file mode 100644 index 05e43a00c55..00000000000 --- a/arrow-site/docs/_includes/_head-docs.html +++ /dev/null @@ -1,65 +0,0 @@ -{% for item in site.data.doc-versions.docVersions %} -{% if item.url == site.data.commons.stable_version %} -{% assign stable_version = item %} -{% endif %} -{% if item.url == site.data.commons.next_version %} -{% assign next_version = item %} -{% endif %} -{% endfor %} - -{% for item in site.data.doc-versions.docVersions %} -{% if item.url == stable_version.previous %} -{% assign previous_version = item %} -{% endif %} -{% endfor %} -{% assign title_module = "Λrrow " | append: cat_id_cap %} - - - - {{ title_module }} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {% if jekyll.environment == 'production' and site.data.commons.google_analytics %} - {% include _google-tag-manager.html %} - {% endif %} - diff --git a/arrow-site/docs/_includes/_head.html b/arrow-site/docs/_includes/_head.html deleted file mode 100644 index e32c9c72b5c..00000000000 --- a/arrow-site/docs/_includes/_head.html +++ /dev/null @@ -1,49 +0,0 @@ - - - {{site.name}} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {% if jekyll.environment == 'production' and site.data.commons.google_analytics %} - {% include _google-tag-manager.html %} - {% endif %} - diff --git a/arrow-site/docs/_includes/_header.html b/arrow-site/docs/_includes/_header.html deleted file mode 100644 index e178015857c..00000000000 --- a/arrow-site/docs/_includes/_header.html +++ /dev/null @@ -1,28 +0,0 @@ - diff --git a/arrow-site/docs/_includes/_js-bottom-docs.html b/arrow-site/docs/_includes/_js-bottom-docs.html deleted file mode 100644 index 7847717fb12..00000000000 --- a/arrow-site/docs/_includes/_js-bottom-docs.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - diff --git a/arrow-site/docs/_includes/_main.html b/arrow-site/docs/_includes/_main.html deleted file mode 100644 index b60c30bc2f2..00000000000 --- a/arrow-site/docs/_includes/_main.html +++ /dev/null @@ -1,26 +0,0 @@ -
-
-
- {% for item in site.data.features.content %} - {% assign title = item.title | downcase %} - {% if item.id != "quickstart" %} - {% if item.id != "meta" %} - -
-
- {{ item.title }} - {{ item.title }} white - {{ item.title }} color -
-

{{ item.title }}

-

{{ item.description }}

-
-
- {% endif %} - {% endif %} - {% endfor %} -
-
- {% include _header.html %} -
-
diff --git a/arrow-site/docs/_includes/_media-wrapper.html b/arrow-site/docs/_includes/_media-wrapper.html deleted file mode 100644 index 99eda7c25ae..00000000000 --- a/arrow-site/docs/_includes/_media-wrapper.html +++ /dev/null @@ -1,14 +0,0 @@ - - Watch video - - -
-

Video tutorial

-
-
-
- -
-
-
-
diff --git a/arrow-site/docs/_includes/_nav.html b/arrow-site/docs/_includes/_nav.html deleted file mode 100644 index 9de78f5a0b5..00000000000 --- a/arrow-site/docs/_includes/_nav.html +++ /dev/null @@ -1,31 +0,0 @@ - diff --git a/arrow-site/docs/_includes/_quickstart.html b/arrow-site/docs/_includes/_quickstart.html deleted file mode 100644 index 9f3a8d2043d..00000000000 --- a/arrow-site/docs/_includes/_quickstart.html +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/arrow-site/docs/_includes/_sidebar-cat-dropdown.html b/arrow-site/docs/_includes/_sidebar-cat-dropdown.html deleted file mode 100644 index 592f330badf..00000000000 --- a/arrow-site/docs/_includes/_sidebar-cat-dropdown.html +++ /dev/null @@ -1,23 +0,0 @@ -{% assign cat-id = "cat-" | append: {{cat_id}} | append: "-dropdown" %} -
- -
diff --git a/arrow-site/docs/_includes/_sidebar-doc-versions.html b/arrow-site/docs/_includes/_sidebar-doc-versions.html deleted file mode 100644 index 3d5853ee7ef..00000000000 --- a/arrow-site/docs/_includes/_sidebar-doc-versions.html +++ /dev/null @@ -1,44 +0,0 @@ -{% assign doc-link = 'core/' %} -{% if cat_id == 'fx' %} -{% assign doc-link = 'fx/' %} -{% elsif cat_id == 'optics' %} -{% assign doc-link = 'optics/dsl/' %} -{% endif %} - - diff --git a/arrow-site/docs/_includes/_sidebar-wrapper.html b/arrow-site/docs/_includes/_sidebar-wrapper.html deleted file mode 100644 index da56af8f2fe..00000000000 --- a/arrow-site/docs/_includes/_sidebar-wrapper.html +++ /dev/null @@ -1,59 +0,0 @@ - diff --git a/arrow-site/docs/_includes/_slack-link.html b/arrow-site/docs/_includes/_slack-link.html deleted file mode 100644 index 25b5e3f76e4..00000000000 --- a/arrow-site/docs/_includes/_slack-link.html +++ /dev/null @@ -1,22 +0,0 @@ -
<
- diff --git a/arrow-site/docs/_layouts/code.html b/arrow-site/docs/_layouts/code.html deleted file mode 100644 index b92f6522338..00000000000 --- a/arrow-site/docs/_layouts/code.html +++ /dev/null @@ -1 +0,0 @@ -{{content}} diff --git a/arrow-site/docs/_layouts/docs-core.html b/arrow-site/docs/_layouts/docs-core.html deleted file mode 100644 index 2221e1fd797..00000000000 --- a/arrow-site/docs/_layouts/docs-core.html +++ /dev/null @@ -1,19 +0,0 @@ - - -{% assign cat_id = "core" %} -{% assign cat_id_cap = cat_id | capitalize %} -{% include _head-docs.html %} - - -
- {% include _sidebar-wrapper.html %} -
- {% include _doc-wrapper.html %} -
-
- {% include _github-modal.html %} - {% include _slack-link.html %} - {% include _js-bottom-docs.html %} - - - diff --git a/arrow-site/docs/_layouts/docs-fx.html b/arrow-site/docs/_layouts/docs-fx.html deleted file mode 100644 index 895ec0a38be..00000000000 --- a/arrow-site/docs/_layouts/docs-fx.html +++ /dev/null @@ -1,19 +0,0 @@ - - -{% assign cat_id = "fx" %} -{% assign cat_id_cap = cat_id | capitalize %} -{% include _head-docs.html %} - - -
- {% include _sidebar-wrapper.html %} -
- {% include _doc-wrapper.html %} -
-
- {% include _github-modal.html %} - {% include _slack-link.html %} - {% include _js-bottom-docs.html %} - - - diff --git a/arrow-site/docs/_layouts/docs-optics.html b/arrow-site/docs/_layouts/docs-optics.html deleted file mode 100644 index da58ef173ae..00000000000 --- a/arrow-site/docs/_layouts/docs-optics.html +++ /dev/null @@ -1,19 +0,0 @@ - - -{% assign cat_id = "optics" %} -{% assign cat_id_cap = cat_id | capitalize %} -{% include _head-docs.html %} - - -
- {% include _sidebar-wrapper.html %} -
- {% include _doc-wrapper.html %} -
-
- {% include _github-modal.html %} - {% include _slack-link.html %} - {% include _js-bottom-docs.html %} - - - diff --git a/arrow-site/docs/_layouts/error.html b/arrow-site/docs/_layouts/error.html deleted file mode 100644 index 317121b1fb9..00000000000 --- a/arrow-site/docs/_layouts/error.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - {{site.data.commons.name}} - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- Code error -
-
-

404

-

Resource not found

- Back to home -
-
-
-
- - - diff --git a/arrow-site/docs/_layouts/home.html b/arrow-site/docs/_layouts/home.html deleted file mode 100644 index bfb027f8b8e..00000000000 --- a/arrow-site/docs/_layouts/home.html +++ /dev/null @@ -1,13 +0,0 @@ - - -{% include _head.html %} - - - {% include _nav.html %} - {% include _quickstart.html %} - {% include _main.html %} - {% include _footer.html %} - {% include _slack-link.html %} - - - diff --git a/arrow-site/docs/_layouts/quickstart-core.html b/arrow-site/docs/_layouts/quickstart-core.html deleted file mode 100644 index 53dc84f261d..00000000000 --- a/arrow-site/docs/_layouts/quickstart-core.html +++ /dev/null @@ -1,19 +0,0 @@ - - -{% assign cat_id = "core" %} -{% assign cat_id_cap = cat_id | capitalize %} -{% include _head-docs.html %} - - -
- {% include _sidebar-wrapper.html %} -
- {% include _doc-wrapper.html %} -
-
- {% include _github-modal.html %} - {% include _slack-link.html %} - {% include _js-bottom-docs.html %} - - - diff --git a/arrow-site/docs/_layouts/quickstart-fx.html b/arrow-site/docs/_layouts/quickstart-fx.html deleted file mode 100644 index 61f204f16be..00000000000 --- a/arrow-site/docs/_layouts/quickstart-fx.html +++ /dev/null @@ -1,19 +0,0 @@ - - -{% assign cat_id = "fx" %} -{% assign cat_id_cap = cat_id | capitalize %} -{% include _head-docs.html %} - - -
- {% include _sidebar-wrapper.html %} -
- {% include _doc-wrapper.html %} -
-
- {% include _github-modal.html %} - {% include _slack-link.html %} - {% include _js-bottom-docs.html %} - - - \ No newline at end of file diff --git a/arrow-site/docs/_layouts/quickstart-optics.html b/arrow-site/docs/_layouts/quickstart-optics.html deleted file mode 100644 index f30eee9b3c7..00000000000 --- a/arrow-site/docs/_layouts/quickstart-optics.html +++ /dev/null @@ -1,19 +0,0 @@ - - -{% assign cat_id = "optics" %} -{% assign cat_id_cap = cat_id | capitalize %} -{% include _head-docs.html %} - - -
- {% include _sidebar-wrapper.html %} -
- {% include _doc-wrapper.html %} -
-
- {% include _github-modal.html %} - {% include _slack-link.html %} - {% include _js-bottom-docs.html %} - - - diff --git a/arrow-site/docs/_layouts/quickstart.html b/arrow-site/docs/_layouts/quickstart.html deleted file mode 100644 index bb1826071fd..00000000000 --- a/arrow-site/docs/_layouts/quickstart.html +++ /dev/null @@ -1,19 +0,0 @@ - - -{% assign cat_id = "quickstart" %} -{% assign cat_id_cap = cat_id | capitalize %} -{% include _head-docs.html %} - - -
- {% include _sidebar-wrapper.html %} -
- {% include _doc-wrapper.html %} -
-
- {% include _github-modal.html %} - {% include _slack-link.html %} - {% include _js-bottom-docs.html %} - - - diff --git a/arrow-site/docs/_plugins/replace_source_by_button.rb b/arrow-site/docs/_plugins/replace_source_by_button.rb deleted file mode 100644 index afbebd8726c..00000000000 --- a/arrow-site/docs/_plugins/replace_source_by_button.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Jekyll - class ReplaceSourceByButton < Converter - safe true - priority :low - - def matches(ext) - ext =~ /^\.md$/i - end - - def output_ext(ext) - ".html" - end - - # HTML code comes from _includes/_doc-wrapper.html - def convert(content) - button_parts = content.match('div class="content-edit-page"') - source_parts = content.match(/\(source\)<\/a>/) - if button_parts == nil and source_parts != nil - url = source_parts[1] - button_start = '' - button_start.concat(url.gsub('blob', 'edit'), button_end, content) - else - content - end - end - end -end diff --git a/arrow-site/docs/_sass/base/_animated.scss b/arrow-site/docs/_sass/base/_animated.scss deleted file mode 100644 index 7deffd9a455..00000000000 --- a/arrow-site/docs/_sass/base/_animated.scss +++ /dev/null @@ -1,17 +0,0 @@ -// Animated -// ----------------------------------------------- -// ----------------------------------------------- - -@keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -20%, 0); - transform: translate3d(0, -20%, 0); - } - - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} diff --git a/arrow-site/docs/_sass/base/_base.scss b/arrow-site/docs/_sass/base/_base.scss deleted file mode 100644 index d131c66ef3c..00000000000 --- a/arrow-site/docs/_sass/base/_base.scss +++ /dev/null @@ -1,78 +0,0 @@ -// Base -// ----------------------------------------------- -// ----------------------------------------------- -// Body, html -// ----------------------------------------------- - -:root { - --color-primary: #263238; -} - -html { - box-sizing: border-box; - font-size: $base-font-size; -} - -*, -*::after, -*::before { - box-sizing: inherit; -} - -body, -html { - height: 100%; - transition: background-color 300ms $base-timing; -} -// Typography -// ----------------------------------------------- - -body { - color: $base-font-color; - background: $background-color; - background-image: url("../img/home/lines-header-bg.svg"); - background-repeat: repeat-x; - font-family: $base-font-family; - line-height: $base-line-height; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - color: $header-font-color; - font-family: $header-font-family; - font-weight: $font-semibold; - line-height: $heading-line-height; -} - -a { - color: var(--color-primary); - text-decoration: none; - transition: color $base-duration $base-timing; - - &:visited { - color: var(--color-primary); - } - - &:hover { - color: $link-hover; - text-decoration: none; - } - - &:active { - color: var(--color-primary); - } -} - -hr { - display: block; - border: none; -} - -// Gitter action bar fix -.gitter-chat-embed-action-bar { - z-index: 11; -} diff --git a/arrow-site/docs/_sass/base/_fonts.scss b/arrow-site/docs/_sass/base/_fonts.scss deleted file mode 100644 index 457b751e553..00000000000 --- a/arrow-site/docs/_sass/base/_fonts.scss +++ /dev/null @@ -1,69 +0,0 @@ -// Iosevka Fonts -// ----------------------------------------------- -@font-face { - font-family: 'Iosevka Web'; - font-weight: 400; - font-style: normal; - src: url("../fonts/woff2/iosevka-regular.woff2") format('woff2'), url("../fonts/woff/iosevka-regular.woff") format('woff'), url("../fonts/ttf/iosevka-regular.ttf") format('truetype'); -} -@font-face { - font-family: 'Iosevka Web'; - font-weight: 500; - font-style: normal; - src: url("../fonts/woff2/iosevka-medium.woff2") format('woff2'), url("../fonts/woff/iosevka-medium.woff") format('woff'), url("../fonts/ttf/iosevka-medium.ttf") format('truetype'); -} -@font-face { - font-family: 'Iosevka Web'; - font-weight: 600; - font-style: normal; - src: url("../fonts/woff2/iosevka-semibold.woff2") format('woff2'), url("../fonts/woff/iosevka-semibold.woff") format('woff'), url("../fonts/ttf/iosevka-semibold.ttf") format('truetype'); -} -@font-face { - font-family: 'Iosevka Web'; - font-weight: 700; - font-style: normal; - src: url("../fonts/woff2/iosevka-bold.woff2") format('woff2'), url("../fonts/woff/iosevka-bold.woff") format('woff'), url("../fonts/ttf/iosevka-bold.ttf") format('truetype'); -} - -@font-face { - font-family: 'jetbrains_mono_nlbold'; - src: url('../fonts/jetbrainsmononl-bold-webfont.woff2') format('woff2'), - url('../fonts/jetbrainsmononl-bold-webfont.woff') format('woff'); - font-weight: normal; - font-style: normal; - -} - - -@font-face { - font-family: 'jetbrains_mono_nlregular'; - src: url('../fonts/jetbrainsmononl-regular-webfont.woff2') format('woff2'), - url('../fonts/jetbrainsmononl-regular-webfont.woff') format('woff'); - font-weight: normal; - font-style: normal; - -} - - -@font-face { - font-family: 'jetbrains_mono_nlbold'; - src: url('../fonts/jetbrainsmononl-bold-webfont.woff2') format('woff2'), - url('../fonts/jetbrainsmononl-bold-webfont.woff') format('woff'); - font-weight: normal; - font-style: normal; - -} - - -@font-face { - font-family: 'jetbrains_mono_nlregular'; - src: url('../fonts/jetbrainsmononl-regular-webfont.woff2') format('woff2'), - url('../fonts/jetbrainsmononl-regular-webfont.woff') format('woff'); - font-weight: normal; - font-style: normal; - -} -// Google Fonts -// ----------------------------------------------- -@import url('https://fonts.googleapis.com/css?family=Montserrat:400,600,700|Source+Code+Pro&display=optional'); -@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,600,700&display=swap'); diff --git a/arrow-site/docs/_sass/base/_global.scss b/arrow-site/docs/_sass/base/_global.scss deleted file mode 100644 index f4ac10ea918..00000000000 --- a/arrow-site/docs/_sass/base/_global.scss +++ /dev/null @@ -1,177 +0,0 @@ -// BASE -// ----------------------------------------------- -// ----------------------------------------------- -// Body, html... -// ----------------------------------------------- -@font-face { - font-family: 'monoidbold'; - src: url('../fonts/monoid-bold.eot'); - src: url('../fonts/monoid-bold.eot?#iefix') format('embedded-opentype'), - url('../fonts/monoid-bold.woff2') format('woff2'), - url('../fonts/monoid-bold.woff') format('woff'), - url('../fonts/monoid-bold.ttf') format('truetype'), - url('../fonts/monoid-bold.svg#monoidbold') format('svg'); - font-weight: normal; - font-style: normal; - -} - - - - -@font-face { - font-family: 'monoiditalic'; - src: url('../fonts/monoid-italic.eot'); - src: url('../fonts/monoid-italic.eot?#iefix') format('embedded-opentype'), - url('../fonts/monoid-italic.woff2') format('woff2'), - url('../fonts/monoid-italic.woff') format('woff'), - url('../fonts/monoid-italic.ttf') format('truetype'), - url('../fonts/monoid-italic.svg#monoiditalic') format('svg'); - font-weight: normal; - font-style: normal; - -} - - - - -@font-face { - font-family: 'monoidregular'; - src: url('../fonts/monoid-regular.eot'); - src: url('../fonts/monoid-regular.eot?#iefix') format('embedded-opentype'), - url('../fonts/monoid-regular.woff2') format('woff2'), - url('../fonts/monoid-regular.woff') format('woff'), - url('../fonts/monoid-regular.ttf') format('truetype'), - url('../fonts/monoid-regular.svg#monoidregular') format('svg'); - font-weight: normal; - font-style: normal; - -} - - - - -@font-face { - font-family: 'monoidretina'; - src: url('../fonts/monoid-retina.eot'); - src: url('../fonts/monoid-retina.eot?#iefix') format('embedded-opentype'), - url('../fonts/monoid-retina.woff2') format('woff2'), - url('../fonts/monoid-retina.woff') format('woff'), - url('../fonts/monoid-retina.ttf') format('truetype'), - url('../fonts/monoid-retina.svg#monoidretina') format('svg'); - font-weight: normal; - font-style: normal; - -} - - -html { - box-sizing: border-box; - font-size: $base-font-size; -} - -@media (prefers-reduced-motion: no-preference) { - html { - scroll-behavior: smooth; - } -} - -*, -*::after, -*::before { - box-sizing: inherit; -} - -body, -html { - height: auto; -} -// Typography -// ----------------------------------------------- - -body { - font-family: $base-font-family; - line-height: $base-line-height; - color: $base-font-color; -} - -a { - @include links($link-color, $link-color, darken($link-color, 15%), darken($link-color, 15%)); - text-decoration: none; - transition: all $base-duration $base-timing; - transition-property: color, background, rotate; - - &:hover { - text-decoration: underline; - } -} - -// Media -// ----------------------------------------------- - -img, -picture { - max-width: 100%; -} - -// Pre, code - -pre { - margin-bottom: ($base-point-grid * 3); -} - -// Forms -// ----------------------------------------------- - -input { - appearance: none; - - - &:hover {} - - &:focus { - outline: none; - } - - &:disabled { - &:hover {} - } - - &::placeholder { - color: rgba($brand-secondary, 0.6); - } -} - -// Table - -table { - width: 100%; - max-width: 100%; - - th, - td { - text-align: left; - padding: $base-point-grid; - } - - th { - border-bottom: 2px solid rgba($brand-primary, 0.20); - font-weight: $font-semibold; - } - - td { - border-bottom: 1px solid rgba($brand-primary, 0.20); - } - -} - -// Animations related -// ------------------------------------------------ -[class*="indirect-injection"] { - opacity: 0; -} - -// Gitter action bar fix -.gitter-chat-embed-action-bar { - z-index: 11; -} diff --git a/arrow-site/docs/_sass/base/_helpers.scss b/arrow-site/docs/_sass/base/_helpers.scss deleted file mode 100644 index 34f6ca7d31b..00000000000 --- a/arrow-site/docs/_sass/base/_helpers.scss +++ /dev/null @@ -1,58 +0,0 @@ -// Helpers -// ----------------------------------------------- -// ----------------------------------------------- - -.wrapper { - padding: ($base-point-grid * 2) ($base-point-grid * 3); - margin: 0 auto; - box-sizing: border-box; - max-width: $bp-xlarge; -} - -// Github stars -.doc-stars-container { - margin-left: ($base-point-grid * 2); -} - -// Github stars modal -#star-modal { - transition: transform $base-duration; - transform: scale(0); - border-radius: 2px; - position: fixed; - bottom: ($base-point-grid * 11); - right: ($base-point-grid * 2); - padding: $base-point-grid; - background: #fff; - box-shadow: $box-shadow-button; - z-index: 100; - min-width: $github-modal-width; - - &.in { - transform: scale(1); - } - - &.out { - transform: translateX(400px); - } - p { - font-size: $base-font-size; - margin: 0 0 15px; - } - & .close-modal { - cursor: pointer; - padding: 0 10.5px; - width: $text-box-icon-size; - height: $text-box-icon-size; - border-radius: ($base-point-grid * 3); - - &:hover { - background-color: lighten($brand-tertiary, 15%); - } - } - - .stars-text-line { - display: flex; - justify-content: space-between; - } -} diff --git a/arrow-site/docs/_sass/base/_reset.scss b/arrow-site/docs/_sass/base/_reset.scss deleted file mode 100644 index 76220f63862..00000000000 --- a/arrow-site/docs/_sass/base/_reset.scss +++ /dev/null @@ -1,141 +0,0 @@ -/* http://meyerweb.com/eric/tools/css/reset/ - v2.0 | 20110126 - License: none (public domain) -*/ -a, -abbr, -acronym, -address, -applet, -article, -aside, -audio, -b, -big, -blockquote, -body, -canvas, -caption, -center, -cite, -code, -dd, -del, -details, -dfn, -div, -dl, -dt, -em, -embed, -fieldset, -figcaption, -figure, -footer, -form, -h1, -h2, -h3, -h4, -h5, -h6, -header, -hgroup, -html, -i, -iframe, -img, -ins, -kbd, -label, -legend, -li, -mark, -menu, -nav, -object, -ol, -output, -p, -pre, -q, -ruby, -s, -samp, -section, -small, -span, -strike, -strong, -sub, -summary, -sup, -table, -tbody, -td, -tfoot, -th, -thead, -time, -tr, -tt, -u, -ul, -var, -video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} -/* HTML5 display-role reset for older browsers */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -menu, -nav, -section { - display: block; -} - -body { - line-height: 1; -} - -ol, -ul { - list-style: none; -} - -blockquote, -q { - quotes: none; -} - -blockquote { - &:after, - &:before { - content: ''; - content: none; - } -} - -q { - &:after, - &:before { - content: ''; - content: none; - } -} - -table { - border-collapse: collapse; - border-spacing: 0; -} diff --git a/arrow-site/docs/_sass/components/common/_button.scss b/arrow-site/docs/_sass/components/common/_button.scss deleted file mode 100644 index 62d56ed7fcb..00000000000 --- a/arrow-site/docs/_sass/components/common/_button.scss +++ /dev/null @@ -1,131 +0,0 @@ -// Buttons -// ---------------------------------------------- -// ---------------------------------------------- - -.button { - display: block; - background: none; - border: none; - outline: none; - text-decoration: none; - position: relative; - justify-content: space-between; - - &:hover { - cursor: pointer; - } - - > img { - vertical-align: bottom; - } -} - -.error-button { - display: block; - background: none; - border: solid 1px; - padding: ($base-point-grid) ($base-point-grid * 3); - font-size: 0.875rem; - font-weight: 600; - text-transform: uppercase; -} - -.close { - height: 28px; - position: absolute; - left: 0; - top: 0; - width: 32px; - - &::after, - &::before { - background-color: #fff; - content: " "; - height: 100%; - left: 98%; - position: absolute; - top: 50%; - width: 2px; - } - - &::before { - transform: rotate(45deg); - } - - &::after { - transform: rotate(-45deg); - } -} - -// Slack channel link button -.slack-link-container { - z-index: 2; - position: fixed; - bottom: $base-point-grid; - right: ($base-point-grid * 2); - padding: 0.5em 0.5em; - min-width: $github-modal-width; - border-radius: .2em; - font-size: 12px; - text-transform: uppercase; - text-align: center; - text-decoration: none; - transition: right .3s ease; - box-shadow: $box-shadow-button; - background: $white; - font-weight: $font-semibold; - color: $box-text-color; - - .slack-link { - color: lighten($box-text-color, 25%); - - &:hover { - color: $box-text-color; - } - } - - .slack-head-line { - display: flex; - justify-content: space-between; - } -} - -.hide-slack-icon { - font-size: $base-font-size; - cursor: pointer; - width: $text-box-icon-size; - height: $text-box-icon-size; - border-radius: ($base-point-grid * 3); - margin-right: 2px; - - &:hover { - background-color: lighten($brand-tertiary, 15%); - } -} - -.show-slack-icon { - color: $box-text-color; - font-weight: $font-semibold; - font-size: $base-font-size; - cursor: pointer; - position: fixed; - right: -80px; - bottom: 37px; - background-color: lighten($brand-tertiary, 15%); - border-radius: ($base-point-grid * 3) 0 0 ($base-point-grid * 3); - transition: padding .2s ease, right .2s ease, left .2s ease; - padding: 5px ($base-point-grid * 2); - box-shadow: 0 1px 1px 0 rgba($gray-primary,.3),0 1px 3px 1px rgba($gray-primary,.15); - - &:hover { - padding-right: ($base-point-grid * 3); - } -} - -.show-slack-icon-visible { - right: 0; -} - -.slack-text-out { - right: -200px; -} diff --git a/arrow-site/docs/_sass/components/common/_dropdown.scss b/arrow-site/docs/_sass/components/common/_dropdown.scss deleted file mode 100644 index b5de2d5caef..00000000000 --- a/arrow-site/docs/_sass/components/common/_dropdown.scss +++ /dev/null @@ -1,497 +0,0 @@ -// Detect lightness -@function detectLightness($color) { - @if (lightness($color) > 60) { - @return mix($color, #000, 90%); - } @else { - @return mix($color, #fff, 90%); - } -} -// Spacing -@function spacing($type) { - @if $type == 'compact' { - @return 12px; - } - - @if $type == 'spacious' { - @return 22px; - } @else { - @return 16px; - } -} -// Description -@function desc($display) { - @if $display == false { - @return none; - } @else { - @return block; - } -} -// Layout type -@mixin layout-width($type) { - @if $type == 'small' { - max-width: 500px; - min-width: 400px; - } - - @if $type == 'normal' { - max-width: 600px; - min-width: 500px; - } - - @if $type == 'large' { - max-width: 800px; - min-width: 600px; - } - - @if $type == 'full' { - width: calc(100% + 55px); - max-width: 900px; - } -} -// Mixin - Shadow type -@mixin shadow-type($type) { - @if $type == 'light' { - box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.2), 0 2px 3px 0 rgba(0, 0, 0, 0.1); - } - - @if $type == 'heavy' { - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); - } - - @if $type == 'none' { - box-shadow: none; - } -} -// Mixin - highlight -@function set-highlight($highlight, $color) { - @if $highlight == 1 and lightness($color) < 60 { - @return mix(#fff, $color, 90%); - } @else { - @return darken(detectLightness($color), 30%); - } -} - -@mixin dropdown( -$main-color: #458EE1, -$layout-width: normal, -$layout-type: normal, -$background-color: #FFFFFF, -$border-radius: 4, -$border-width: 1, -$border-color: #d9d9d9, -$box-shadow: light, -$branding-position: bottom, -$font-size: normal, -$header-color: #33363D , -$title-color: #02060C, -$subtitle-color: #A4A7AE, -$text-color: #63676D, -$highlight-color: #3881FF, -$spacing: normal, -$include-desc: true, -$background-category-header: #FFFFFF, -$highlight-opacity: .1, -$highlight-type: 'underline', -$code-background: #EBEBEB, -$responsive-breakpoint: 768px -){ - - $header-size: 1em; - $title-size: .9em; - $text-size: .85em; - $subtitle-size: .9em; - $padding: spacing($spacing); - - @if $font-size == 'small' { - $header-size: 0.95em; - $title-size: 0.8em; - $text-size: 0.75em; - $subtitle-size: 0.8em; - } @else - if $font-size == 'large' { - $header-size: 1.1em; - $title-size: 1em; - $text-size: 0.9em; - $subtitle-size: 1em; - } - - .algolia-autocomplete { - width: 100%; - - .ds-dropdown-menu { - left: 0 !important; - right: inherit !important; - - &:before { - left: 24px; - } - } - // Dropdown wrapper - .ds-dropdown-menu { - position: relative; - top: -6px; - border-radius: $border-radius+px; - margin: 8px 0 0; - padding: 0; - text-align: left; - height: auto; - position: relative; - background: transparent; - border: none; - z-index: 999; - @include layout-width($layout-width); - @include shadow-type($box-shadow); - // Arrow - &:before { - display: block; - position: absolute; - content: ''; - width: 20px; - height: 20px; - background: $background-color; - z-index: 1000; - top: -10px; - border-top: $border-width+px solid $border-color; - border-right: $border-width+px solid $border-color; - transform: rotate(-45deg); - border-radius: 2px; - } - - .ds-suggestions { - position: relative; - z-index: 1000; - margin-top: $padding/2; - } - - .ds-suggestion { - cursor: pointer; - - &.ds-cursor { - .algolia-docsearch-suggestion.suggestion-layout-simple { - background-color: rgba($main-color,.2); - } - - .algolia-docsearch-suggestion:not(.suggestion-layout-simple) { - .algolia-docsearch-suggestion--content { - background-color: rgba($main-color,.2); - } - } - } - } - - [class^="ds-dataset-"] { - position: relative; - border: solid $border-width+px $border-color; - background: $background-color; - border-radius: $border-radius+px; - overflow: auto; - padding: 0 $padding/2 $padding/2; - } - // Inner-grid setup - * { - box-sizing: border-box; - } - } - // Each suggestion item is wrapped - .algolia-docsearch-suggestion { - position: relative; - padding: 0 $padding/2; - background: $background-color; - color: $title-color; - overflow: hidden; - @if $highlight-type == basic { - &--highlight { - color: $main-color; - background-color: rgba($main-color, $highlight-opacity); - } - - .algolia-docsearch-suggestion--item-header .algolia-docsearch-suggestion--highlight { - color: inherit; - background: inherit; - } - } @else { - &--highlight { - color: set-highlight($highlight-opacity, $main-color); - background: rgba(mix($main-color, #fff, 60%), $highlight-opacity); - padding: 0.1em 0.05em; - } - - &--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight, - &--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight { - color: inherit; - background: inherit; - } - - &--text .algolia-docsearch-suggestion--highlight { - padding: 0 0 1px; - background: inherit; - box-shadow: inset 0 -2px 0 0 rgba($highlight-color, 0.8); - color: inherit; - } - } - - &--content { - display: block; - float: right; - width: 70%; - position: relative; - padding: $padding/3 0 $padding/3 $padding/1.5; - cursor: pointer; - - &:before { - content: ''; - position: absolute; - display: block; - top: 0; - height: 100%; - width: 1px; - background: #ddd; - left: -1px; - } - } - - &--category-header { - position: relative; - border-bottom: 1px solid #ddd; - display: none; - margin-top: $padding/2; - padding: $padding/4 0; - font-size: $header-size; - color: $header-color; - } - - &--wrapper { - width: 100%; - float: left; - padding: $padding/2 0 0; - } - - &--subcategory-column { - float: left; - width: 30%; - padding-left: 0; - text-align: right; - position: relative; - padding: $padding/3 $padding/1.5; - color: $subtitle-color; - font-size: $subtitle-size; - word-wrap: break-word; - - &:before { - content: ''; - position: absolute; - display: block; - top: 0; - height: 100%; - width: 1px; - background: #ddd; - right: 0; - } - - .algolia-docsearch-suggestion--highlight { - background-color: inherit; - color: inherit; - } - } - - &--subcategory-inline { - display: none; - } - - &--title { - margin-bottom: $padding/4; - color: $title-color; - font-size: $title-size; - font-weight: bold; - } - - &--text { - display: desc($include-desc); - line-height: 1.2em; - font-size: $text-size; - color: $text-color; - } - - &--no-results { - width: 100%; - padding: $padding/2 0; - text-align: center; - font-size: 1.2em; - - &::before { - display: none; - } - } - - code { - padding: 1px 5px; - font-size: 90%; - border: none; - color: #222222; - background-color: $code-background; - border-radius: 3px; - font-family: Menlo,Monaco,Consolas,"Courier New",monospace; - - .algolia-docsearch-suggestion--highlight { - background: none; - } - } - // Rules to display categories and subcategories - &.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header { - display: block; - } - - &.algolia-docsearch-suggestion__secondary { - display: block; - } - @media all and (min-width: #{$responsive-breakpoint}) { - .algolia-docsearch-suggestion--subcategory-column { - display: block; - } - } - @media all and (max-width: #{$responsive-breakpoint}) { - .algolia-docsearch-suggestion--subcategory-column { - display: inline-block; - width: auto; - text-align: left; - float: left; - padding: 0; - font-size: 0.9em; - font-weight: bold; - text-align: left; - - &:before { - display: none; - } - - &:after { - content: "|"; - padding: 0 8px; - } - } - - .algolia-docsearch-suggestion--content { - display: inline-block; - width: auto; - text-align: left; - float: left; - padding: 0; - - &:before { - display: none; - } - } - } - } - //Simple layout (no column) - .suggestion-layout-simple { - &.algolia-docsearch-suggestion { - border-bottom: solid 1px #eee; - padding: $padding/2; - margin: 0; - } - - .algolia-docsearch-suggestion { - &--content { - width: 100%; - padding: 0; - - &::before { - display: none; - } - } - - &--category-header { - margin: 0; - padding: 0; - display: block; - width: 100%; - border: none; - - &-lvl0 { - opacity: 0.6; - font-size: $text-size; - } - - &-lvl1 { - opacity: 0.6; - font-size: $text-size; - - &::before { - background-image: url('data:image/svg+xml;utf8,'); - content: ''; - width: 10px; - height: 10px; - display: inline-block; - } - } - } - - &--wrapper { - width: 100%; - float: left; - margin: 0; - padding: 0; - } - - &--duplicate-content, - &--subcategory-inline { - display: none!important; - } - - &--title { - margin: 0; - color: $main-color; - font-size: $title-size; - font-weight: normal; - - &::before { - content: "#"; - font-weight: bold; - color: $main-color; - display: inline-block; - } - } - - &--text { - margin: $padding/4 0 0; - display: desc($include-desc); - line-height: 1.4em; - padding: $padding/3 $padding/2; - background: #f8f8f8; - font-size: $text-size; - opacity: 0.8; - - .algolia-docsearch-suggestion--highlight { - color: darken($text-color,15%); - font-weight: bold; - box-shadow: none; - } - } - } - } - // powered by - .algolia-docsearch-footer { - width: 110px; - height: 20px; - z-index: 2000; - margin-top: $padding/1.5; - float: right; - font-size: 0; - line-height: 0; - - &--logo { - background-image: url("data:image/svg+xml;utf8,"); - background-repeat: no-repeat; - background-position: center; - background-size: 100%; - overflow: hidden; - text-indent: -9000px; - padding: 0!important; - width: 100%; - height: 100%; - display: block; - } - } - } -} diff --git a/arrow-site/docs/_sass/components/common/_footer.scss b/arrow-site/docs/_sass/components/common/_footer.scss deleted file mode 100644 index a95ef37d7e8..00000000000 --- a/arrow-site/docs/_sass/components/common/_footer.scss +++ /dev/null @@ -1,113 +0,0 @@ -// Footer -// ----------------------------------------------- -// ----------------------------------------------- - -#site-footer { - height: 300px; - padding: 100px 0; - background-image: url("../img/home/lines-footer-bg.svg"); - background-repeat: repeat-x; - - .footer-flex { - display: flex; - justify-content: space-between; - line-height: ($base-point-grid * 3); - - .footer-dev { - display: flex; - width: $column-4; - transition: color $base-duration $base-timing; - - .footer-xf { - position: relative; - margin-right: 1.25rem; - #footer-xf-dark { - position: absolute; - opacity: 1; - } - #footer-xf-white { - opacity: 0; - } - } - - .site-name { - text-transform: uppercase; - - &.hover-mode { - &:hover { - color: $white; - } - } - } - .company-link { - &.hover-mode { - &:hover { - color: $white; - } - } - } - } - - .footer-menu { - display: flex; - font-weight: bold; - - a { - padding-bottom: 4px; - text-transform: uppercase; - font-size: ($base-point-grid * 2); - - &:hover { - text-decoration: none; - border-bottom: 2px solid $brand-primary; - } - - &.hover-mode { - &:hover { - color: $white; - } - } - } - - li { - &:not(:last-child) { - margin-right: ($base-point-grid * 5); - } - } - } - } -} -// Responsive -// ----------------------------------------------- -@include bp(medium) { - #site-footer { - padding: 30px 0; - - .footer-flex { - justify-content: center; - flex-wrap: wrap; - - .footer-dev, - .footer-menu { - width: $column-8; - } - - .footer-dev { - padding-bottom: ($base-point-grid * 2); - margin-bottom: ($base-point-grid * 2); - text-align: center; - border-bottom: 1px solid rgba($white, 0.2); - } - - .footer-menu { - justify-content: center; - - li { - &:not(:last-child) { - margin-right: ($base-point-grid * 2); - } - } - } - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_code.scss b/arrow-site/docs/_sass/components/docs/_code.scss deleted file mode 100644 index eec2aa34c65..00000000000 --- a/arrow-site/docs/_sass/components/docs/_code.scss +++ /dev/null @@ -1,95 +0,0 @@ -// Code -// ----------------------------------------------- -// ----------------------------------------------- - -p, -ul, -table { - code { - font-family: $code-doc-font-famil; - padding: 0 0.3rem; - margin: 0; - font-size: 16px; - border-radius: 2px; - color: rgba($dark-color-doc, 0.9); - background: rgba($quickstart-background, 0.08); - } -} - - -.doc-content, -.browser-code { - - pre { - margin-bottom: 1rem; - } - - .CodeMirror, - .hljs { - font-size: 1rem; - font-family: $code-doc-font-famil; - line-height: 1.9; - - } - - .hljs { - background: rgba($quickstart-background, 0.06); - } - - .cm-s-arrow span.cm-keyword { - font-weight: $font-regular; - } - - pre { - - &.highlight { - margin-bottom: $code-margin; - border: none; - - } - } - .executable-fragment-wrapper { - margin: 1.5rem 0 2.5rem 0; - } - .executable-fragment { - border: none; - .js-code-output-executor { - border: none; - } - .console-close, - .run-button { - width: 24px; - height: 24px; - right: 10px; - top: 10px; - } - - .run-button { - background: url("../img/icon_play.svg") no-repeat; - } - - .console-close { - background: url("../img/icon_close.svg") no-repeat; - cursor: pointer; - } - } -} - -.browser-code { - - code { - &.hljs { - background: $white; - font-size: 0.875rem; - overflow-x: visible; - } - } - - - pre { - margin-bottom: 0; - &.highlight { - margin-bottom: 0; - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_doc-body.scss b/arrow-site/docs/_sass/components/docs/_doc-body.scss deleted file mode 100644 index 812e627e32b..00000000000 --- a/arrow-site/docs/_sass/components/docs/_doc-body.scss +++ /dev/null @@ -1,6 +0,0 @@ -// DOC-BODY -// ----------------------------------------------- -// ----------------------------------------------- -#doc-body { - background: rgba($core-background, 0.03); -} diff --git a/arrow-site/docs/_sass/components/docs/_doc-content-core.scss b/arrow-site/docs/_sass/components/docs/_doc-content-core.scss deleted file mode 100644 index 2672c55f627..00000000000 --- a/arrow-site/docs/_sass/components/docs/_doc-content-core.scss +++ /dev/null @@ -1,63 +0,0 @@ -// DOC CONTENT CORE -// ----------------------------------------------- -// ----------------------------------------------- - -.doc-content-core { - .doc-content { - a { - //color: $core-color; - } - - p, - ul { - code { - background: rgba($core-background, 0.08); - } - - a { - code { - //text-decoration: underline; - } - } - } - // Codemirror - .cm-s-arrow.CodeMirror { - background: rgba($core-background, 0.06); - } - - .cm-s-arrow .CodeMirror-gutters { - background-color: rgba($core-background, 0.08); - } - - .CodeMirror-linebackground.unmodifiable-line { - background-color: rgba($core-background, 0.06); - } - - - .cm-s-arrow span.cm-keyword { - //color: $core-color; - } - - .hljs-deletion, - .hljs-name, - .hljs-regexp, - .hljs-selector-class, - .hljs-selector-id, - .hljs-tag, - .hljs-template-variable, - .hljs-variable { - //color: $core-color; - } - - .button-video { - background: $core-color; - border: 2px solid $core-color; - transition: background $base-duration; - - &:hover { - background: $core-color; - color: $white; - } - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_doc-content-fx.scss b/arrow-site/docs/_sass/components/docs/_doc-content-fx.scss deleted file mode 100644 index ac369c29078..00000000000 --- a/arrow-site/docs/_sass/components/docs/_doc-content-fx.scss +++ /dev/null @@ -1,57 +0,0 @@ -// DOC CONTENT FX -// ----------------------------------------------- -// ----------------------------------------------- - -.doc-content-fx { - .doc-content { - a { - //color: $fx-color; - } - - p, - ul { - code { - background: rgba($fx-background, 0.08); - } - } - - .cm-s-arrow span.cm-keyword { - //color: $fx-color; - } - - // Codemirror - .cm-s-arrow.CodeMirror { - background: rgba($fx-background, 0.06); - } - - .cm-s-arrow .CodeMirror-gutters { - background-color: rgba($fx-background, 0.08); - } - - .CodeMirror-linebackground.unmodifiable-line { - background-color: rgba($fx-background, 0.06); - } - - .hljs-variable, - .hljs-template-variable, - .hljs-tag, - .hljs-name, - .hljs-selector-id, - .hljs-selector-class, - .hljs-regexp, - .hljs-deletion { - //color: $fx-color; - } - - .button-video { - background: $fx-color; - border: 2px solid $fx-color; - transition: background $base-duration; - - &:hover { - background: $fx-color; - color: $white; - } - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_doc-content-meta.scss b/arrow-site/docs/_sass/components/docs/_doc-content-meta.scss deleted file mode 100644 index 91ee85ae8cc..00000000000 --- a/arrow-site/docs/_sass/components/docs/_doc-content-meta.scss +++ /dev/null @@ -1,59 +0,0 @@ -// DOC CONTENT META -// ----------------------------------------------- -// ----------------------------------------------- - -.doc-content-meta { - .doc-content { - a { - //color: $meta-color; - } - - p, - ul, - table { - code { - background: rgba($meta-background, 0.08); - font-family: $code-doc-font-famil; - } - } - - .cm-s-arrow span.cm-keyword { - //color: $meta-color; - } - - // Codemirror - .cm-s-arrow.CodeMirror { - background: rgba($meta-background, 0.06); - } - - .cm-s-arrow .CodeMirror-gutters { - background-color: rgba($meta-background, 0.08); - } - - .CodeMirror-linebackground.unmodifiable-line { - background-color: rgba($meta-background, 0.06); - } - - .hljs-variable, - .hljs-template-variable, - .hljs-tag, - .hljs-name, - .hljs-selector-id, - .hljs-selector-class, - .hljs-regexp, - .hljs-deletion { - //color: $meta-color; - } - - .button-video { - background: $meta-color; - border: 2px solid $meta-color; - transition: background $base-duration; - - &:hover { - background: $meta-color; - color: $white; - } - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_doc-content-optics.scss b/arrow-site/docs/_sass/components/docs/_doc-content-optics.scss deleted file mode 100644 index 6131bb4a140..00000000000 --- a/arrow-site/docs/_sass/components/docs/_doc-content-optics.scss +++ /dev/null @@ -1,59 +0,0 @@ -// DOC CONTENT OPTICS -// ----------------------------------------------- -// ----------------------------------------------- - -.doc-content-optics { - .doc-content { - a { - //color: $optics-color; - } - - p, - ul { - code { - background: rgba($optics-background, 0.08); - - } - } - - .cm-s-arrow span.cm-keyword { - //color: $optics-color; - } - - // Codemirror - .cm-s-arrow.CodeMirror { - background: rgba($optics-background, 0.08); - } - - .cm-s-arrow .CodeMirror-gutters { - background-color: rgba($optics-background, 0.08); - } - - .CodeMirror-linebackground.unmodifiable-line { - background-color: rgba($optics-background, 0.06); - } - - - .hljs-variable, - .hljs-template-variable, - .hljs-tag, - .hljs-name, - .hljs-selector-id, - .hljs-selector-class, - .hljs-regexp, - .hljs-deletion { - //color: $optics-color; - } - - .button-video { - background: $optics-color; - border: 2px solid $optics-color; - transition: background $base-duration; - - &:hover { - background: $optics-color; - color: $white; - } - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_doc-content.scss b/arrow-site/docs/_sass/components/docs/_doc-content.scss deleted file mode 100644 index 294e90ae596..00000000000 --- a/arrow-site/docs/_sass/components/docs/_doc-content.scss +++ /dev/null @@ -1,324 +0,0 @@ -// DOC-CONTENT -// ----------------------------------------------- -// ----------------------------------------------- - -.doc-content { - padding: 3rem 3.5rem; - margin: 2.5rem; - background: #fff; - box-shadow: $base-box-shadow; - max-width: 100%; - font-family: $doc-font-family; - position: relative; - box-sizing: content-box; - color: rgba($dark-color-doc, 0.9); - font-size: 1rem; - //border-right: 1px solid rgba($core-background, 0.15); - h1, - h2, - h3, - h4, - h5, - h6 { - margin-bottom: 1.5rem; - margin-top: 3rem; - font-family: $heading-font-family; - font-weight: $font-bold; - color: $header-font-color; - - &:first-child { - margin-top: 0; - } - } - - h1 { - font-size: 2rem; - } - - h2 { - padding-bottom: 1rem; - font-size: 1.8rem; - border-bottom: 1px solid rgba($core-background, 0.15); - } - - h3 { - font-size: 1.6rem; - } - - h4 { - font-size: 1.3rem; - } - - h5 { - font-size: 1.25rem; - } - - h6 { - font-size: 1rem; - text-transform: uppercase; - } - - p { - margin-bottom: ($base-point-grid * 2); - } - - a { - border-bottom: 1px solid rgba($dark-color-doc, 0.3); - - &:hover { - border-bottom: 1px solid rgba($dark-color-doc, 0.6); - } - - &:not( > img) { - border-bottom: none; - } - } - - .browser { - margin-top: ($base-point-grid * 3); - } - - ol, - ul { - padding-left: 2.5rem; - margin: 2.2rem 0; - } - - ul { - list-style: none; - - li { - margin-bottom: 0.55rem; - - &::before { - content: "\2022"; - color: $dark-color-doc; - font-weight: bold; - position: absolute; - width: 1em; - margin-left: -1em; - } - } - } - - ol { - li { - list-style-type: decimal; - } - } - - strong { - font-weight: $font-bold; - } - - del { - text-decoration: line-through; - } - - em { - font-style: italic; - } - - blockquote { - position: relative; - padding: 1rem; - background: rgba($blocquote-info, 0.2); - margin-bottom: 1rem; - - &::before { - position: absolute; - font-size: 1.375rem; - top: 13px; - content: ""; - color: rgba($blocquote-info, 0.9); - font-family: 'Font Awesome 5 Pro'; - } - - &.blockquote-alert { - background: rgba($blocquote-alert, 0.2); - - &::before { - content: ""; - color: rgba($blocquote-alert, 0.9); - } - } - - p { - padding-left: 1rem; - margin-bottom: 0; - padding-left: 2.4rem; - } - } - - hr { - border: none; - height: 1px; - width: 100%; - background: rgba($dark-color-doc, 0.26); - } - - table { - width: 100%; - font-size: 16px; - - thead { - text-align: left; - font-weight: bold; - } - - tbody { - width: 100%; - } - - tr { - &:nth-child(2n) { - background: rgba($dark-color-doc, 0.03); - } - } - - td, - th { - padding: 1rem; - border: 1px solid rgba($dark-color-doc, 0.16); - border-left: 0; - border-right: 0; - } - } - - .header-link { - float: left; - font-size: 1.4rem; - line-height: 1; - margin-left: -24px; - margin-top: 10px; - opacity: 0; - transition: opacity $base-duration $base-timing; - } - - h1:hover, - h2:hover, - h3:hover, - h4:hover, - h5:hover, - h6:hover { - .header-link { - opacity: 1; - } - } - - .content-edit-page { - display: flex; - justify-content: flex-end; - margin-top: -20px; - - a { - border: 1px solid rgba($dark-color-doc, 0.2); - display: flex; - align-items: center; - padding: 0.25rem 0.5rem; - border-radius: 3px; - background: $white; - - span { - font-size: 0.813rem; - } - - i { - font-size: 1.125rem; - margin-right: 0.25rem; - } - - &:hover { - background: darken($white, 3%); - } - } - } - - .platform-common, - .platform-js, - .platform-jvm, - .platform-native { - font-family: $heading-font-family; - color: $white; - font-weight: $font-medium; - margin-right: 0.5rem; - font-size: 0.625rem; - padding: 0 0.7rem; - border-radius: 10rem; - position: relative; - display: inline-block; - align-items: center; - - &:before { - margin-right: 0.5rem; - display: none; - background: #765; - width: 20px; - height: 20px; - background-color: rgba(#000, 0.04); - position: absolute; - left: 0; - } - } - - .platform-common { - background: $label-common; - &::first-letter { - text-transform: uppercase; - } - - &:before { - content: ''; - background: url("../img/labels/icon-label-common.svg") repeat-y; - } - } - - .platform-native { - background: $label-native; - &::first-letter { - text-transform: uppercase; - } - - &:before { - content: ''; - background: url("../img/labels/icon-label-native.svg") repeat-y; - } - } - - .platform-jvm { - background: $label-jvm; - text-transform: uppercase; - - &:before { - content: ''; - background: url("../img/labels/icon-label-jvm.svg") repeat-y; - } - } - - .platform-js { - background: $label-js; - text-transform: uppercase; - - - &:before { - content: ''; - background: url("../img/labels/icon-label-js.svg") repeat-y; - } - } -} -@include bp(large) { - .doc-content { - padding: 1.5rem 1rem; - margin: 1rem; - - table { - display: block; - overflow-x: auto; - white-space: nowrap; - } - - .content-edit-page { - display: none; - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_doc-header.scss b/arrow-site/docs/_sass/components/docs/_doc-header.scss deleted file mode 100644 index 4b0229a4b51..00000000000 --- a/arrow-site/docs/_sass/components/docs/_doc-header.scss +++ /dev/null @@ -1,132 +0,0 @@ -// DOC HEADER -// ----------------------------------------------- -// ----------------------------------------------- - -.doc-header { - display: flex; - align-items: center; - height: ($base-point-grid * 8); - background: $white; - box-shadow: 0 2px 16px 0 rgba($core-background, 0.06); - - .search-wrapper { - display: flex; - position: relative; - width: 100%; - - .search { - display: block; - width: calc(100% - 1.5rem); - padding: $base-point-grid 0; - font-family: $doc-font-family; - font-size: $base-docs-font-size; - margin-left: 1.5rem; - border: none; - cursor: auto; - position: relative; - outline: none; - -webkit-appearance: textfield; - } - /* clears the 'X' from Internet Explorer */ - input[type=search]::-ms-clear { - display: none; - width: 0; - height: 0; - } - - input[type=search]::-ms-reveal { - display: none; - width: 0; - height: 0; - } - /* clears the 'X' from Chrome */ - input[type="search"]::-webkit-search-decoration, - input[type="search"]::-webkit-search-cancel-button, - input[type="search"]::-webkit-search-results-button, - input[type="search"]::-webkit-search-results-decoration { - display: none; - } - } - - a { - &:hover { - text-decoration: none; - } - } - - .fa { - margin-right: ($base-point-grid / 2); - } - - .menu-doc-search { - display: inline-flex; - margin-right: ($base-point-grid * 2); - - li { - &:first-child { - padding-right: 1rem; - margin-right: 1rem; - border-right: 1px solid rgba($dark-color-doc, 0.1); - - .menu-links { - display: flex; - align-items: center; - - span { - font-family: $doc-font-family; - font-size: 0.813rem; - margin-right: 0.75rem; - font-style: italic; - text-transform: none; - font-weight: $font-regular; - } - } - } - - .menu-links { - padding-bottom: 4px; - font-size: 0.938rem; - font-family: $base-font-family; - text-transform: uppercase; - font-weight: $font-semibold; - white-space: nowrap; - @include links($link-color, $link-color, lighten($link-color, 30%), lighten($link-color, 30%)); - - &:hover { - text-decoration: none; - } - } - } - } -} -// Responsive -@include bp(large) { - #doc-wrapper { - .doc-header { - .doc-stars-container { - display: none; - } - - .menu-doc-search { - li { - &:first-child { - .menu-links { - span { - display: none; - } - } - } - } - } - } - } -} -@include bp(medium) { - #doc-wrapper { - .doc-header { - position: sticky; - top: 0; - z-index: 4; - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_highlight.scss b/arrow-site/docs/_sass/components/docs/_highlight.scss deleted file mode 100644 index 80f949abae6..00000000000 --- a/arrow-site/docs/_sass/components/docs/_highlight.scss +++ /dev/null @@ -1,106 +0,0 @@ -/* - -Darcula color scheme from the JetBrains family of IDEs - -*/ - - -/* - -Original highlight.js style (c) Ivan Sagalaev - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 1.5rem; - background: #F0F0F0; -} - - -/* Base color: saturation 0; */ - -.hljs, -.hljs-subst { - color: rgba($dark-color-doc, 0.9); -} - -.hljs-comment { - color: #888888; -} - -.hljs-keyword, -.hljs-attribute, -.hljs-selector-tag, -.hljs-meta-keyword, -.hljs-doctag, -.hljs-name { - font-weight: bold; -} - - -/* User color: hue: 0 */ - -.hljs-type, -.hljs-string, -.hljs-number, -.hljs-selector-id, -.hljs-selector-class, -.hljs-quote, -.hljs-template-tag, -.hljs-deletion { - color: $core-color; -} - -.hljs-title, -.hljs-section { - color: $core-color; - font-weight: bold; -} - -.hljs-regexp, -.hljs-symbol, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: $core-color; -} - - -/* Language color: hue: 90; */ - -.hljs-literal { - color: #78A960; -} - -.hljs-built_in, -.hljs-bullet, -.hljs-code, -.hljs-addition { - color: #397300; -} - - -/* Meta color: hue: 200 */ - -.hljs-meta { - color: #1f7199; -} - -.hljs-meta-string { - color: #4d99bf; -} - - -/* Misc effects */ - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/components/docs/_media-content.scss b/arrow-site/docs/_sass/components/docs/_media-content.scss deleted file mode 100644 index 8c9f0acf08f..00000000000 --- a/arrow-site/docs/_sass/components/docs/_media-content.scss +++ /dev/null @@ -1,91 +0,0 @@ -// MEDIA-CONTENT -// ----------------------------------------------- -// ----------------------------------------------- - -.doc-content { - font-family: $doc-font-family; - - .video-panel { - display: none; - - h2 { - margin-top: ($base-point-grid * 4); - - .fa { - margin-right: 7px; - font-size: 1.75rem; - color: rgba($brand-primary, 0.8); - } - } - - &.toggled { - display: block; - } - - .bg-video { - background: #fff; - padding: ($base-point-grid * 3); - @include bp(large) { - padding: 0; - } - - .wrapper-video { - max-width: 900px; - margin: 0 auto; - - .video-container { - position: relative; - padding-bottom: 56.25%; - height: 0; - - iframe { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - } - } - } - } - } -} - -.button-video { - padding: $base-point-grid ($base-point-grid * 4); - position: absolute; - right: ($base-point-grid * 4); - top: ($base-point-grid * 7); - font-size: 1.063rem; - color: #fff; - background: $brand-tertiary; - box-shadow: 0 0 20px rgba($brand-secondary, 0.3); - z-index: 10; - @include bp(large) { - width: $column-12; - position: relative; - display: block; - top: 0; - right: 0; - margin-bottom: 20px; - margin-left: 0; - width: 100%; - } - - &:hover { - text-decoration: none; - background: lighten($brand-tertiary, 5%); - box-shadow: 0 0 20px rgba($brand-secondary, 0.5); - color: #fff; - cursor: pointer; - } - - i { - margin-right: 6px; - font-size: 1.125rem; - } - - &.beta { - background: #765; - } -} diff --git a/arrow-site/docs/_sass/components/docs/_navigation.scss b/arrow-site/docs/_sass/components/docs/_navigation.scss deleted file mode 100644 index 9e0e05e41fe..00000000000 --- a/arrow-site/docs/_sass/components/docs/_navigation.scss +++ /dev/null @@ -1,118 +0,0 @@ -// NAVIGATION -// ----------------------------------------------- -// ----------------------------------------------- - -#navigation { - position: fixed; - z-index: 30; - display: flex; - justify-content: space-between; - align-items: center; - width: 100%; - padding: ($base-point-grid * 5) ($base-point-grid * 4); - transition: all $base-duration $base-timing; - - .navigation-brand { - font-weight: $font-medium; - text-transform: uppercase; - letter-spacing: 4px; - @include bp(small) { - letter-spacing: 2px; - } - } - - .navigation-menu { - .navigation-menu-item { - display: inline-block; - text-transform: uppercase; - font-size: 0.875rem; - @include bp(medium) { - text-transform: none; - } - - &.active { - border-bottom: 2px solid $brand-tertiary; - } - - & + .navigation-menu-item { - margin-left: ($base-point-grid * 4); - @include bp(small) { - margin-left: ($base-point-grid * 3.2); - } - } - } - - .dropbtn { - @include links($white, $white, rgba($white, 0.5), rgba($white, 0.5)); - cursor: pointer; - border: none; - background: transparent; - color: $white; - font-size: 0.875rem; - margin-bottom: 10px; - } - - .dropdown { - position: relative; - display: block; - outline: 0; - } - /* Documentation Dropdown Content (Hidden by Default) */ - .dropdown-content { - font-size: 0.800rem; - position: absolute; - min-width: 145px; - overflow: auto; - box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2); - z-index: 1; - margin-left: -8px; - background: rgba($brand-primary, 0.95); - opacity: 0.5; - transform: rotate3d(1, 0, 0, 90deg); - transition: transform ease 250ms, opacity ease 100ms; - transform-origin: top; - - a { - padding: 12px 9px; - text-decoration: none; - display: block; - } - - a:nth-child(4) { - border-top: solid 1px rgba(255, 255, 255, 0.5); - } - } - /* Show the documentatioin dropdown menu (use JS to add this class - to the .dropdown-content container when the user clicks on - the dropdown button) */ - .show { - transform: rotate3d(1,0,0,0); - opacity: 1; - } - } - - a { - @include links($white, $white, rgba($white, 0.5), rgba($white, 0.5)); - - &:hover { - text-decoration: none; - } - } - - .nav-item-text { - @include bp(small) { - display: none; - } - } - - .nav-item-icon { - display: none; - @include bp(small) { - display: inline-block; - } - } - - &.navigation-scroll { - padding: ($base-point-grid * 2) ($base-point-grid * 4); - } -} diff --git a/arrow-site/docs/_sass/components/docs/_playground-theme.scss b/arrow-site/docs/_sass/components/docs/_playground-theme.scss deleted file mode 100644 index 3d54780d4b7..00000000000 --- a/arrow-site/docs/_sass/components/docs/_playground-theme.scss +++ /dev/null @@ -1,38 +0,0 @@ - -.cm-s-arrow span.cm-meta { color: #9F9F5B; } -.cm-s-arrow span.cm-number { color: #385EBA; } -.cm-s-arrow span.cm-keyword { line-height: 1em; font-weight: bold; color: #375396; } -.cm-s-arrow span.cm-atom { font-weight: bold; color: #5376CB; } -.cm-s-arrow span.cm-def { color: darken($dark-color-doc, 10%); } -.cm-s-arrow span.cm-variable { color: darken($dark-color-doc, 0.9); } -.cm-s-arrow span.cm-variable-2 { color: rgba($dark-color-doc, 0.9); } -.cm-s-arrow span.cm-variable-3, .cm-s-arrow span.cm-type { color: rgba($dark-color-doc, 0.9) } -.cm-s-arrow span.cm-property { color: rgba($dark-color-doc, 0.9); } -.cm-s-arrow span.cm-operator { color: rgba($dark-color-doc, 0.9); } -.cm-s-arrow span.cm-comment { color: #808080; } -.cm-s-arrow span.cm-string { color: #2EAF62; } -.cm-s-arrow span.cm-string-2 { color: #2EAF62; } -.cm-s-arrow span.cm-qualifier { color: #555; } -.cm-s-arrow span.cm-error { color: #E45454; } -.cm-s-arrow span.cm-attribute { color: #385EBA; } -.cm-s-arrow span.cm-tag { color: #375396; } -.cm-s-arrow span.cm-link { color: #385EBA; } -.cm-s-arrow .CodeMirror-activeline-background { background: #FFFAE3; } - -.cm-s-arrow span.cm-builtin { color: #30a; } -.cm-s-arrow span.cm-bracket { color: #cc7; } -.cm-s-arrow { font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;} - - -.cm-s-arrow .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; } - -.CodeMirror-hints.idea { - font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; - color: #616569; - background-color: #ebf3fd !important; -} - -.CodeMirror-hints.idea .CodeMirror-hint-active { - background-color: #a2b8c9 !important; - color: #5c6065 !important; -} diff --git a/arrow-site/docs/_sass/components/docs/_quickstart-doc.scss b/arrow-site/docs/_sass/components/docs/_quickstart-doc.scss deleted file mode 100644 index 5ac5db3406d..00000000000 --- a/arrow-site/docs/_sass/components/docs/_quickstart-doc.scss +++ /dev/null @@ -1,313 +0,0 @@ -// Quickstart docs -// ----------------------------------------------- -// ----------------------------------------------- - -.card-quickstart { - padding: 3rem; - background: #fff; - box-shadow: $base-box-shadow; -} - - - - -.quickstart-wrapper { - background: url("../img/quickstart-pattern.svg") repeat-y; - - .doc-content { - margin: 0; - background: none; - box-shadow: none; - max-width: 1072px; - } -} - -.quick-snap { - display: flex; - justify-content: center; -} - -.quickstart-doc { - .quickstart-intro { - margin: 3.5rem 0 5.5rem 0; - @extend .card-quickstart; - h1 { - font-size: 2.5rem; - } - } - - .quickstart-coroutines-list { - display: grid; - gap: 32px; - grid-template-columns: repeat(2, 1fr); - .quickstart-coroutines-item { - padding: 2rem; - background: rgba($core-background, 0.03); - - ul { - padding-left: 1rem; - margin: 2rem 0 0 0; - - li { - &::before { - content: "\f178"; - color: $dark-color-doc; - position: relative; - font-weight: lighter; - margin-right: 0.5rem; - width: auto; - font-family: "Font Awesome 5 Pro" - } - } - } - - &:nth-child(1) {} - &:nth-child(2) {} - &:nth-child(3) {} - &:nth-child(4) {} - } - } - - .modular-libraries { - margin-bottom: 7.75rem; - - .modular-libraries-header { - text-align: center; - - h1 { - margin: 2rem 0; - font-size: 3.5rem; - } - - p { - font-size: 1.5rem; - } - } - - .libraries-list { - margin-top: 4.5rem; - display: grid; - grid-template-columns: 1fr; - grid-gap: 2.5rem; - - .library-item { - display: flex; - @extend .card-quickstart; - - .library-item-content { - margin-right: 2rem; - - h3 { - font-size: 1.5rem; - } - - p { - &:nth-child(3) { - margin: 0; - } - } - - .library-cta { - padding: 0.75rem 1.5rem; - font-family: $heading-font-family; - font-size: 0.9375rem; - color: #fff; - display: inline-block; - transition: background-color 300ms $base-timing; - - &:hover { - text-decoration: none; - } - - &.core { - background: $core-color; - - &:hover { - background: darken($core-color, 10%); - } - } - - &.fx { - background: $fx-color; - - &:hover { - background: darken($fx-color, 10%); - } - } - - &.optics { - background: $optics-color; - - &:hover { - background: darken($optics-color, 10%); - } - } - - &.meta { - background: $meta-color; - - &:hover { - background: darken($meta-color, 10%); - } - } - } - } - - .library-item-brand { - p { - margin: 0; - } - } - } - } - } - - .setup { - h2 { - padding-bottom: 0; - border-bottom: none; - font-size: 2rem; - text-align: center; - } - - .setup-subtitle { - margin-bottom: 4rem; - text-align: center; - font-size: 1.25rem; - } - - .setup-jdk-android { - display: grid; - grid-template-columns: repeat(2, 1fr); - @extend .card-quickstart; - - .jdk-item { - padding-right: 4.5rem; - border-right: 1px solid rgba($dark-color-doc, 0.14); - } - - .android-item { - margin-left: 4.5rem; - } - - .android-item, - .jdk-item { - display: flex; - align-items: center; - - p { - margin-bottom: 0; - - &:first-child { - margin-right: 2rem; - } - } - } - } - - .setup-graddle-maven { - margin-top: 2.5rem; - background: #fff; - box-shadow: $base-box-shadow; - - .tab { - overflow: hidden; - p { - display: grid; - grid-template-columns: repeat(3, 1fr); - button:nth-child(2) { - border-right: 1px solid #DCDEE1; - border-left: 1px solid #DCDEE1; - } - } - } - - .tab button { - background-color: rgba($dark-color-doc, 0.03); - border: none; - outline: none; - cursor: pointer; - padding: 1.75rem 1rem; - font-size: 1.25rem; - font-family: $heading-font-family; - font-weight: $font-bold; - transition: 0.3s; - box-shadow: 0 1px #DCDEE1; - } - /* Change background color of buttons on hover */ - .tab button:hover { - background-color: rgba($dark-color-doc, 0.01); - } - /* Create an active/current tablink class */ - .tab button.active { - background: none; - box-shadow: none; - - - - } - /* Style the tab content */ - .tabcontent { - display: none; - padding: 2.5rem; - } - } - } -} - -@include bp(large) { - .card-quickstart { - padding: 1.5rem 1rem; - } - - .quickstart-doc { - .modular-libraries { - .modular-libraries-header { - text-align: center; - - h1 { - margin: 2rem 0; - font-size: 2rem; - } - - p { - font-size: 1.5rem; - } - } - .libraries-list { - .library-item { - flex-direction: column-reverse; - text-align: center; - - .library-item-content { - margin-right: 0; - } - } - } - } - - .setup { - .setup-jdk-android { - grid-template-columns: 1fr; - - .jdk-item { - padding-right: 0; - border-right: none; - border-bottom: 1px solid rgba($dark-color-doc, 0.14); - padding-bottom: 2rem; - margin-bottom: 2rem; - } - - .android-item { - margin-left: 0; - } - } - .setup-graddle-maven { - .tabcontent { - padding: 1rem; - } - } - - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_sidebar-core.scss b/arrow-site/docs/_sass/components/docs/_sidebar-core.scss deleted file mode 100644 index 9e4fa0e8af5..00000000000 --- a/arrow-site/docs/_sass/components/docs/_sidebar-core.scss +++ /dev/null @@ -1,104 +0,0 @@ -.core { - background: $core-background; - - .sidebar-menu { - .sidebar-menu-item { - &.active { - - & > button { - border-left: 4px solid $core-color; - } - } - - &.open { - a { - background: $core-hover; - } - - & > button { - background: $core-hover; - } - } - } - } -} - -#cat-core-dropdown { - min-width: $sidebar-cat-button; - - .sidebar-nav { - .sidebar-nav-item { - > a { - transition: background $base-duration $base-timing; - &:hover { - background: $core-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - &.active { - > a { - background: $core-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - ul { - width: 100%; - z-index: 1; - box-shadow: $sidebar-cat-dropdow; - background: $core-hover; - - a { - color: $white; - transition: all $base-duration $base-timing; - - &:hover { - background: rgba($white, 0.05); - color: rgba($white, 0.8); - } - } - } - } - } -} - -#doc-core-version-button { - .sidebar-doc-versions { - .sidebar-nav-item { - background: $core-background; - - > a { - font-family: $heading-font-family; - transition: background $base-duration $base-timing; - - &:hover { - background: $core-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - &.active { - > a { - background: $core-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - ul { - width: 100%; - z-index: 1; - box-shadow: $sidebar-cat-dropdow; - background: $core-hover; - - a { - color: $white; - - &:hover { - @include links($white, $white, rgba($white, 0.5), rgba($white, 0.5)); - } - } - } - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_sidebar-fx.scss b/arrow-site/docs/_sass/components/docs/_sidebar-fx.scss deleted file mode 100644 index b03980627fd..00000000000 --- a/arrow-site/docs/_sass/components/docs/_sidebar-fx.scss +++ /dev/null @@ -1,104 +0,0 @@ -.fx { - background: $fx-background; - - .sidebar-menu { - .sidebar-menu-item { - &.active { - - & > button { - border-left: 4px solid $fx-color; - } - } - - &.open { - a { - background: $fx-hover; - } - - & > button { - background: $fx-hover; - } - } - } - } -} - -#cat-fx-dropdown { - min-width: $sidebar-cat-button; - - .sidebar-nav { - .sidebar-nav-item { - > a { - transition: background $base-duration $base-timing; - &:hover { - background: $fx-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - &.active { - > a { - background: $fx-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - ul { - width: 100%; - z-index: 1; - box-shadow: $sidebar-cat-dropdow; - background: $fx-hover; - - a { - color: $white; - transition: all $base-duration $base-timing; - - &:hover { - background: rgba($white, 0.05); - color: rgba($white, 0.8); - } - } - } - } - } -} - -#doc-fx-version-button { - .sidebar-doc-versions { - .sidebar-nav-item { - background: $fx-background; - - > a { - font-family: $heading-font-family; - transition: background $base-duration $base-timing; - - &:hover { - background: $fx-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - &.active { - > a { - background: $fx-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - ul { - width: 100%; - z-index: 1; - box-shadow: $sidebar-cat-dropdow; - background: $fx-hover; - - a { - color: $white; - - &:hover { - @include links($white, $white, rgba($white, 0.5), rgba($white, 0.5)); - } - } - } - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_sidebar-menu.scss b/arrow-site/docs/_sass/components/docs/_sidebar-menu.scss deleted file mode 100644 index 300555dc4b7..00000000000 --- a/arrow-site/docs/_sass/components/docs/_sidebar-menu.scss +++ /dev/null @@ -1,118 +0,0 @@ -// SIDEBAR menu -// ----------------------------------------------- -// ----------------------------------------------- -.sidebar-menu { - .sidebar-menu-item { - &.active { - > a, - a.active { - color: $gray-primary; - } - } - - &.open { - - .sub-menu { - max-height: 1600px; - } - - & > button { - .fa { - @include rotate(90deg); - } - } - } - - button, - a { - display: flex; - padding: 12px 32px; - width: 100%; - font-size: 0.938rem; - font-family: $heading-font-family; - color: $white; - transition: background $base-duration $base-timing; - - .fa { - margin-left: ($base-point-grid * 2); - font-size: 18px; - transition: all .3s; - -moz-osx-font-smoothing: unset; - pointer-events: none; - } - } - - a { - @include links($white, $white, rgba($white, 0.5), rgba($white, 0.5)); - - &:hover { - text-decoration: none; - } - } - - .sub-menu { - max-height: 0px; - overflow: hidden; - transition: max-height 0.8s ease-in-out; - - .sidebar-menu-item { - &.active { - color: $gray-primary; - } - } - - a { - font-size: 0.875rem; - padding: $base-point-grid ($base-point-grid * 2); - @include links($white, $white, rgba($white, 0.5), rgba($white, 0.5)); - - &:hover { - text-decoration: none; - } - - &:before { - content: "•"; - margin-right: ($base-point-grid * 2); - } - } - } - } -} - - -// Sidebar doc versions -// ----------------------------------------------- -// ----------------------------------------------- -.doc-version-container { - margin-top: $base-point-grid * 7; - border-top: 1px solid rgba($white, 0.1); -} - -.sidebar-doc-versions { - display: flex; - justify-content: center; - - #doc-version-dropdown { - width: 100%; - &.active { - > a { - border-color: transparent; - } - ul { - display: block; - } - } - ul { - position: sticky; - li { - a { - font-size: 0.800rem; - } - } - - li:nth-child(3) { - border-top: solid 1px rgba(255, 255, 255, 0.5); - } - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_sidebar-optics.scss b/arrow-site/docs/_sass/components/docs/_sidebar-optics.scss deleted file mode 100644 index 25ba94ccf52..00000000000 --- a/arrow-site/docs/_sass/components/docs/_sidebar-optics.scss +++ /dev/null @@ -1,102 +0,0 @@ -.optics { - background: $optics-background; - - .sidebar-menu { - .sidebar-menu-item { - &.active { - - & > button { - border-left: 4px solid $optics-color; - } - } - - &.open { - a { - background: $optics-hover; - } - - & > button { - background: $optics-hover; - } - } - } - } -} - -#cat-optics-dropdown { - min-width: $sidebar-cat-button; - - .sidebar-nav { - .sidebar-nav-item { - > a { - transition: background $base-duration $base-timing; - &:hover { - background: $optics-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - &.active { - > a { - background: $optics-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - ul { - width: 100%; - z-index: 1; - box-shadow: $sidebar-cat-dropdow; - background: $optics-hover; - - a { - color: $white; - transition: all $base-duration $base-timing; - - &:hover { - background: rgba($white, 0.05); - color: rgba($white, 0.8); - } - } - } - } - } -} - -#doc-optics-version-button { - .sidebar-doc-versions { - .sidebar-nav-item { - background: $optics-background; - > a { - font-family: $heading-font-family; - transition: background $base-duration $base-timing; - &:hover { - background: $optics-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - &.active { - > a { - background: $optics-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - ul { - width: 100%; - z-index: 1; - box-shadow: $sidebar-cat-dropdow; - background: $optics-hover; - - a { - color: $white; - - &:hover { - @include links($white, $white, rgba($white, 0.5), rgba($white, 0.5)); - } - } - } - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_sidebar-quickstart.scss b/arrow-site/docs/_sass/components/docs/_sidebar-quickstart.scss deleted file mode 100644 index b9a94cd5031..00000000000 --- a/arrow-site/docs/_sass/components/docs/_sidebar-quickstart.scss +++ /dev/null @@ -1,104 +0,0 @@ -.quickstart { - background: $quickstart-background; - - .sidebar-menu { - .sidebar-menu-item { - &.active { - & > button { - border-left: 4px solid $quickstart-color; - } - } - - &.open { - a { - background: $quickstart-hover; - } - - & > button { - background: $quickstart-hover; - } - } - } - } -} - -#cat-quickstart-dropdown { - min-width: $sidebar-cat-button; - - .sidebar-nav { - .sidebar-nav-item { - > a { - transition: background $base-duration $base-timing; - - &:hover { - background: $quickstart-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - &.active { - > a { - background: $quickstart-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - ul { - width: 100%; - z-index: 1; - box-shadow: $sidebar-cat-dropdow; - background: $quickstart-hover; - - a { - color: $white; - transition: all $base-duration $base-timing; - - &:hover { - background: rgba($white, 0.05); - color: rgba($white, 0.8); - } - } - } - } - } -} - -#doc-quickstart-version-button { - .sidebar-doc-versions { - .sidebar-nav-item { - background: $quickstart-background; - - > a { - font-family: $heading-font-family; - transition: background $base-duration $base-timing; - - &:hover { - background: $quickstart-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - &.active { - > a { - background: $quickstart-hover; - box-shadow: $sidebar-cat-dropdow; - } - } - - ul { - width: 100%; - z-index: 1; - box-shadow: $sidebar-cat-dropdow; - background: $quickstart-hover; - - a { - color: $white; - - &:hover { - @include links($white, $white, rgba($white, 0.5), rgba($white, 0.5)); - } - } - } - } - } -} diff --git a/arrow-site/docs/_sass/components/docs/_sidebar.scss b/arrow-site/docs/_sass/components/docs/_sidebar.scss deleted file mode 100644 index 9569ed68c84..00000000000 --- a/arrow-site/docs/_sass/components/docs/_sidebar.scss +++ /dev/null @@ -1,179 +0,0 @@ -// SIDEBAR -// ----------------------------------------------- -// ----------------------------------------------- - -#wrapper { - padding-left: $sidebar-width; - transition: padding 0.4s ease-in-out; - - &.toggled { - padding-left: 0; - } -} - -#sidebar-wrapper { - left: 0; - height: 100%; - overflow-y: auto; - position: fixed; - transition: left 0.4s ease-in-out; - width: $sidebar-width; - z-index: 11; - - .sidebar-toggle { - display: none; - } -} - -#wrapper.toggled { - #sidebar-wrapper { - left: -$sidebar-width; - } -} - -.toggle-container { - display: flex; - justify-content: end; - margin-top: ($base-point-grid * 1); -} - -.sidebar-toggle { - background: none; - border: none; - color: $brand-tertiary; - padding: 28px 32px; - position: relative; - text-align: center; - text-decoration: none; - transition: color 0.3s ease, transform 0.3s ease; - - .menu-icon { - position: absolute; - top: 37%; - left: 38%; - } - - &:hover { - color: $brand-primary; - cursor: pointer; - transform: scaleX(1.5); - } -} - -.sidebar-brand { - padding: 60px 0 30px; - display: flex; - flex-direction: column; - align-items: center; - - > a { - margin-bottom: 1rem; - } - - .brand-title { - font-family: $heading-font-family; - font-size: 18px; - font-weight: $font-medium; - text-transform: capitalize; - letter-spacing: 1px; - line-height: 23px; - color: $white; - } -} - -.sidebar-nav { - font-size: $base-docs-font-size; - - .sidebar-nav-item { - > a { - display: flex; - align-items: center; - justify-content: space-between; - @include links($white, $white, $white, $white); - padding: 12px 32px; - - &:hover { - text-decoration: none; - - } - - .fa { - margin-left: 1.5rem; - font-size: 18px; - transition: all .3s; - -moz-osx-font-smoothing: unset; - } - } - - &.active { - > a { - padding: 12px 32px; - .fa { - @include rotate(90deg); - } - } - } - - - ul { - display: none; - font-family: $heading-font-family; - - - li { - a { - display: flex; - align-items: flex-start; - @include links($white, $white, rgba($white, 0.5), rgba($white, 0.5)); - padding: 12px 32px; - font-size: 15px; - - - &.active { - color: $gray-primary; - } - - &:hover { - text-decoration: none; - } - - } - } - } - } -} - -@include bp(medium) { - #wrapper { - padding-left: 0; - transition: all 0.4s ease-in-out; - } - - #sidebar-wrapper { - left: -100%; - } - - #wrapper.toggled { - #sidebar-wrapper { - left: 0; - top: 0; - width: 100%; - - .sidebar-toggle { - display: block; - opacity: 0.7; - transition: opacity 0.3s ease, transform 0.3s ease; - - &:hover { - opacity: 1; - transform: rotate(-180deg); - } - } - } - - #doc-wrapper { - height: 100vh; - overflow: hidden; - } - } -} diff --git a/arrow-site/docs/_sass/components/home/_header.scss b/arrow-site/docs/_sass/components/home/_header.scss deleted file mode 100644 index 48a8502dc00..00000000000 --- a/arrow-site/docs/_sass/components/home/_header.scss +++ /dev/null @@ -1,297 +0,0 @@ -// Header -// ----------------------------------------------- -// ----------------------------------------------- - -#site-header { - padding: 0 0 ($base-point-grid * 5) 0; - position: relative; - - .header-flex { - display: flex; - align-items: center; - - .header-text { - position: relative; - width: 65%; - margin-right: $base-point-grid * 10; - transition: opacity $base-duration ease-in-out; - - h1 { - font-size: 54px; - line-height: 1.4; - margin-bottom: $base-point-grid * 3; - transition: color $base-duration $base-timing; - } - } - - .browser-content { - position: absolute; - top: -60px; - width: 100%; - z-index: 100; - - .browser-header { - display: flex; - justify-content: flex-start; - align-items: center; - height: $base-point-grid * 4; - background: rgba($white, 0.15); - border-radius: 4px 4px 0 0; - - li { - width: $base-point-grid; - height: $base-point-grid; - border-radius: 100%; - margin-right: 6px; - background: rgba($white, 0.5); - - &:first-child { - margin-left: 10px; - } - } - } - - .browser-code { - - overflow-x: scroll; - overflow-y: auto; - height: 400px; - background: $white; - box-shadow: 0 10px 10px rgba(#000, 0.1); - border-radius: 0 0 4px 4px; - color: #777; - - .console-close, - .run-button { - width: 24px; - height: 24px; - right: 10px; - top: 10px; - } - - .run-button { - background: url("../img/icon_play.svg") no-repeat; - } - - .console-close { - background: url("../img/icon_close.svg") no-repeat; - cursor: pointer; - } - - .code-area { - min-height: 300px; - - .fold-button { - top: 7px; - } - } - - .output-wrapper { - max-height: 250px; - overflow-y: scroll; - background: rgba($white, 0.9); - font-size: 13px; - } - - - -wrapper { - margin-bottom: 0; - - .compiler-info { - color: #666; - position: relative; - } - } - } - } - - #core-code-block { - visibility: hidden; - } - - #fx-code-block { - visibility: hidden; - } - - #optics-code-block { - visibility: hidden; - } - - #analysis-code-block { - visibility: hidden; - } - - .header-image { - position: relative; - width: $column-6; - text-align: center; - - .image-animation { - width: max-content; - } - } - } -} - -#base-arrow-animation { - position: absolute; - opacity: 1; - transition: $opacity-transition; - bottom: -60px; - right: 7px; -} - -#core-arrow-animation { - position: absolute; - opacity: 0; - transition: $opacity-transition; - bottom: -40px; - right: 7px; -} - -#fx-arrow-animation { - position: absolute; - opacity: 0; - transition: $opacity-transition; - bottom: -40px; - right: 7px; -} - -#optics-arrow-animation { - position: absolute; - opacity: 0; - transition: $opacity-transition; - bottom: -40px; - right: 7px; -} - -#analysis-arrow-animation { - position: absolute; - opacity: 0; - transition: $opacity-transition; - bottom: -40px; - right: 7px; -} - -#logo-white-lines { - opacity: 0; - transition: $long-transition; - margin-right: 60px; -} -// Responsive -// ----------------------------------------------- -@include bp(large) { - #site-header { - .header-flex { - flex-direction: column; - - .header-text { - width: $column-12; - margin-right: 0; - - h1 { - text-align: center; - font-size: 2.9rem; - opacity: 1; - } - } - - .browser-content, - .header-image { - display: none; - } - } - } -} -@include bp(medium) { - #site-header { - padding: ($base-point-grid * 8) 0 0 0; - - .header-flex { - flex-direction: column; - - .header-text { - h1 { - font-size: 2.5rem; - } - } - } - } -} -// Header error layout -// ----------------------------------------------- -// ----------------------------------------------- - -#masthead-error { - padding: ($base-point-grid * 24) 0 ($base-point-grid * 7) 0; - position: relative; - z-index: 100; - - .header-flex { - display: flex; - align-items: center; - justify-content: center; - flex-wrap: wrap; - - .brand { - margin-right: $base-point-grid * 3; - - .masthead-brand { - position: relative; - top: -10px; - width: 220px; - } - } - - .header-error-text { - display: flex; - flex-direction: column; - justify-content: space-between; - height: 188px; - - .masthead-code-error { - font-size: 7.2rem; - font-weight: normal; - } - - .masthead-title { - font-size: 2.1rem; - font-weight: normal; - } - } - } - - .error-button { - display: block; - background: none; - border: solid 2px; - padding: ($base-point-grid) 26px; - font-size: 1.2rem; - font-weight: normal; - width: 60%; - text-transform: uppercase; - transition: all $base-duration $base-timing; - - &:hover { - background-color: var(--color-primary); - color: $white; - border: solid 2px var(--color-primary); - text-decoration: none; - } - } -} - -@include bp(medium) { - #masthead-error { - .header-flex { - flex-direction: column; - .brand { - margin-right: unset; - } - .header-error-text { - margin-top: $base-point-grid * 4; - align-items: center; - } - } - } -} diff --git a/arrow-site/docs/_sass/components/home/_main.scss b/arrow-site/docs/_sass/components/home/_main.scss deleted file mode 100644 index b3c380a3a1e..00000000000 --- a/arrow-site/docs/_sass/components/home/_main.scss +++ /dev/null @@ -1,98 +0,0 @@ -// Features -// ----------------------------------------------- -// ----------------------------------------------- - -#site-main { - padding: 96px 0 0 0; - - .main-flex { - display: flex; - - .main-item { - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: center; - width: $column-4; - text-align: center; - - &:hover { - text-decoration: none; - color: $white; - } - - .icon-content { - display: flex; - justify-content: center; - position: relative; - height: 125px; - - .cat-icon-dark { - opacity: 1; - position: absolute; - transition: $icons-transition; - top: 4px; - } - - .cat-icon-white { - opacity: 0; - position: absolute; - top: 4px; - } - - .cat-icon-color { - opacity: 0; - transition: $icons-transition; - } - } - - &:not(:last-child) { - padding-right: $gutter-margin; - } - - img { - margin-bottom: $base-point-grid; - } - - h2 { - margin-bottom: $base-point-grid; - font-size: 1.429rem; - text-transform: uppercase; - transition: opacity $base-duration ease, color 250ms ease; - } - - p { - line-height: $base-point-grid * 3; - margin-bottom: $base-point-grid * 3; - transition: opacity $base-duration ease, color $short-duration ease; - } - } - } -} -// Responsive -// ----------------------------------------------- -@include bp(medium) { - #site-main { - .features { - margin-bottom: 60px; - } - - .main-flex { - flex-direction: column; - - .main-item { - width: $column-12; - max-width: none; - - p { - min-height: 0; - } - - &:not(:last-child) { - padding-right: 0; - margin-bottom: ($base-point-grid * 8); - } - } - } - } -} diff --git a/arrow-site/docs/_sass/components/home/_nav.scss b/arrow-site/docs/_sass/components/home/_nav.scss deleted file mode 100644 index 940cfb17098..00000000000 --- a/arrow-site/docs/_sass/components/home/_nav.scss +++ /dev/null @@ -1,252 +0,0 @@ -// Nav -// ----------------------------------------------- -// ----------------------------------------------- - -#site-nav { - position: fixed; - padding: ($base-point-grid * 5) 0; - width: 100%; - transition: background-color $base-duration $base-timing, padding $base-duration $base-timing; - z-index: 9999999; - - &.nav-scroll { - padding: ($base-point-grid * 2) 0; - background: rgba($background-color, 0.97); - } - - &.core { - background: rgba($core-background, 0.95); - } - - &.fx { - background: rgba($fx-background, 0.95); - } - - &.optics { - background: rgba($optics-background, 0.95); - } - - &.meta { - background: rgba($meta-background, 0.95); - } - - .nav-flex { - display: flex; - justify-content: space-between; - align-items: center; - - .nav-brand { - display: flex; - align-items: center; - position: relative; - font-family: $base-font-family; - font-size: 2.143rem; - - &:active, - &:hover, - &:visited { - text-decoration: none; - } - - &.hover-mode { - &:hover { - color: $white; - } - } - - img { - transition: $opacity-transition; - } - - #nav-brand-dark { - position: absolute; - opacity: 1; - } - - #nav-brand-white { - opacity: 0; - } - - span { - font-weight: 500; - text-transform: uppercase; - padding-left: $base-point-grid; - font-size: 22px; - letter-spacing: 3px; - } - } - - .nav-menu { - position: relative; - transition: all $base-duration $base-timing; - font-weight: bold; - - > ul { - display: flex; - - .nav-menu-item { - position: relative; - &:not(:last-child) { - margin-right: ($base-point-grid * 5); - } - - .menu-links { - padding-bottom: 4px; - text-transform: uppercase; - font-size: ($base-point-grid * 2); - - i { - margin-left: 8px; - } - - &:after { - display: block; - content: ''; - border-bottom: 2px solid $brand-primary; - transform: scaleX(0); - transition: transform 0.3s ease-in-out; - margin-top: 0; - } - - &:hover { - text-decoration: none; - - &:after { - transform: scaleX(1); - } - } - - &.hover-mode { - &:hover { - color: $white; - } - } - } - } - } - } - - .nav-icon-open { - display: none; - transition: transform $base-duration $base-timing; - - &:hover { - transform: scaleX(1.5); - } - } - - .nav-icon-close { - display: none; - padding: 6px; - left: 85%; - top: 32px; - - img { - display: block; - transition: transform 0.3s ease; - - &:hover { - transform: rotate(180deg); - } - } - } - } -} - -.dropdown-btn { - &:hover { - cursor: pointer; - } -} - -.dropdown-content { - padding: 16px 0; - position: absolute; - top: 32px; - left: 0; - overflow: auto; - z-index: 1; - transition: all 0.35s ease-out; - visibility: hidden; - opacity: 0; - background: rgba(#fff, 0.95); - box-shadow: 0px 0px 6px rgba($box-text-color, 0.3); - border-radius: 2px; - min-width: 148px; - - ul { - display: flex; - flex-direction: column; - li { - a { - display: block; - padding: 2px 16px; - white-space: nowrap; - color: $box-text-color; - text-transform: uppercase; - transition: all 0.4s ease-out; - &:hover { - color: $box-text-color; - text-decoration: none; - background: rgba($box-text-color, 0.07); - border-radius: 2px; - } - } - } - } - - &.show { - top: 40px; - visibility: visible; - opacity: 1; - } -} - -// Responsive -// ----------------------------------------------- -@include bp(medium) { - #site-nav { - .nav-flex { - .nav-menu { - position: fixed; - padding: ($base-point-grid * 4) ($base-point-grid * 6); - background: $core-background; - height: 100%; - right: -100%; - top: 0; - width: 70%; - z-index: 2; - transition: right $base-duration $base-timing; - - &.open { - right: 0; - } - - ul { - flex-direction: column; - - .nav-menu-item { - padding: $base-point-grid 0; - - &:not(:last-child) { - margin-right: 0; - } - } - - .nav-stars { - margin-top: ($base-point-grid * 4); - } - } - - &.top-scroll { - padding-top: $base-point-grid; - } - } - - .nav-icon-close, - .nav-icon-open { - display: block; - } - } - } -} diff --git a/arrow-site/docs/_sass/components/home/_quickstart.scss b/arrow-site/docs/_sass/components/home/_quickstart.scss deleted file mode 100644 index cb491ea10a0..00000000000 --- a/arrow-site/docs/_sass/components/home/_quickstart.scss +++ /dev/null @@ -1,91 +0,0 @@ -// Quickstart -// ----------------------------------------------- -// ----------------------------------------------- - -.site-quickstart { - .quickstart-content { - margin: 180px auto 0; - text-align: center; - position: relative; - overflow: hidden; - - h1 { - font-size: 4.2rem; - line-height: 1.4; - overflow: hidden; - } - - .quickstart-cta { - padding: 12px 40px; - display: inline-block; - margin-top: 48px; - font-size: 1.429rem; - text-transform: uppercase; - border: 2px solid $brand-primary; - - &:hover { - text-decoration: none; - background: #fff; - } - } - } -} - -.container { - min-height: 192px; -} - -.output { - text-align:center; - font-family: 'Source Code Pro', monospace; - color:white; - h1 { - font-size:30px; - } -} -.cursor::after { - content:''; - display:inline-block; - margin-left: 3px; - margin-top: 4px; - background-color: $brand-primary; - animation-name:blink; - animation-duration: 0.9s; - animation-iteration-count: infinite; -} - -h1.cursor::after { - height: 6px; - width: 40px; -} - -@keyframes blink { - 0% { - opacity:1; - } - 49% { - opacity:1; - } - 50% { - opacity:0; - } - 100% { - opacity:0; - } -} - -// Responsive -@include bp(medium) { - .site-quickstart { - .quickstart-content { - h1 { - font-size: 2.9rem; - } - } - } - - h1.cursor::after { - height: 4px; - width: 32px; - } -} diff --git a/arrow-site/docs/_sass/utils/_variables.scss b/arrow-site/docs/_sass/utils/_variables.scss deleted file mode 100644 index d7b1f788e4d..00000000000 --- a/arrow-site/docs/_sass/utils/_variables.scss +++ /dev/null @@ -1,144 +0,0 @@ -// Variables -// ----------------------------------------------- -// ----------------------------------------------- - @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;700&display=swap'); -// Colors -// ----------------------------------------------- -$brand-primary: var(--color-primary); -$brand-secondary: #DCDEE0; -$brand-tertiary: #C5C8CB; -$gray-primary: #A9AAAB; -$white: rgb(255, 255, 255); -$link-color: darken(#263238, 10%); -$link-hover: darken(#263238, 15%); -$background-color: #F5F7F8; -$box-text-color: #263238; -$dark-color-doc: #273244; -// quickstart -$quickstart-color: #CC528A; -$quickstart-background: #273244; -$quickstart-hover: #374252; -// core -$core-color: #2D9DFF; -$core-background: #354755; -$core-hover: #465764; -// fx -$fx-color: #807373; -$fx-background: #33393f; -$fx-hover: #44494f; -// optics -$optics-color: #00C9AA; -$optics-background: #35565F; -$optics-hover: #3f5b63; -// meta -$meta-color: #CD151D; -$meta-background: #2E3B44; -$meta-hover: #424E56; - -$blocquote-info:#6AA848; -$blocquote-alert: #BD4545; - -// label -$label-common: #5ACABD; -$label-native: #6EAAFB; -$label-jvm: #FB936E; -$label-js: #F2D15B; -// Typography -// ----------------------------------------------- -$base-font-family: 'Iosevka Web'; -$header-font-family: $base-font-family; -$code-font-family: $base-font-family; -$doc-font-family: 'Open Sans', sans-serif; -$code-doc-font-famil: 'jetbrains_mono_nlregular'; -$heading-font-family: 'Montserrat', sans-serif; -$base-font-color: $brand-primary; -$header-font-color: $brand-primary; -$font-regular: 400; -$font-medium: 500; -$font-semibold: 600; -$font-bold: 700; -$base-font-size: 16px; -$base-line-height: 1.7; -$heading-line-height: 1.3; -$base-docs-font-size: 1rem; -// Sizes -// ----------------------------------------------- -$base-point-grid: 0.5rem; -$sidebar-cat-button: 192px; -$sidebar-doc-version-button: 200px; -$height-home-code-block: 400px; -$width-home-code-block: 580px; -$github-modal-width: 178px; -$text-box-icon-size: 27px; -// Animation -// ----------------------------------------------- -$short-duration: 150ms; -$base-duration: 350ms; -$doble-base-duration: 500ms; -$base-timing: ease-in-out; -$opacity-transition: opacity $base-duration $base-timing, transform $base-duration $base-timing; -$long-transition: opacity $doble-base-duration $base-timing; -$icons-transition: opacity 400ms ease; -// Breakpoint -// ----------------------------------------------- -$bp-small: 480px; -$bp-medium: 768px; -$bp-large: 992px; -$bp-xlarge: 1140px; -// Grid -// ----------------------------------------------- -$column-1: (1/12*100%); -$column-2: (2/12*100%); -$column-3: (3/12*100%); -$column-4: (4/12*100%); -$column-5: (5/12*100%); -$column-6: (6/12*100%); -$column-7: (7/12*100%); -$column-8: (8/12*100%); -$column-9: (9/12*100%); -$column-10: (10/12*100%); -$column-11: (11/12*100%); -$column-12: (12/12*100%); -$gutter-margin: ($base-point-grid * 4); -// Border -// ----------------------------------------------- -$border-color: rgba($gray-primary, 0.1); -$doc-header-border: rgba($brand-secondary, 0.8); -$sidebar-cat-dropdow: rgba(0, 0, 0, 0.2) 0 2px 8px 0; - -// Code -// ----------------------------------------------- -$code-border-color: rgba($gray-primary, 0.2); -$code-padding: 16px; -$code-margin: 30px; -// Sidebar Sizes -// ----------------------------------------------- -$sidebar-width: 325px; -// Box Shadow -$box-shadow-item: rgba($brand-primary, 0.10) 0 0 20px; -$box-shadow-button: rgba(0,0,0,0.3) 0 2px 8px 0; -$base-box-shadow: 0 4px 10px rgba($core-background, 0.08); -// Docsearch dropdown -$dropdown-config: ( - main-color: $brand-tertiary, - layout-type: normal, - layout-width: full, - background-color: #fff, - border-radius: 2, - border-width: 2, - border-color: rgba(0, 0, 0, .1), - box-shadow: none, - branding-position: bottom, - spacing: normal, - include-desc: yes, - background-category-header: #ffffff, - font-size: normal, - header-color: $brand-primary, - title-color: $brand-primary, - subtitle-color: $base-font-color, - text-color: $brand-secondary, - highlight-color: #ef8836, - highlight-opacity: 0.3, - highlight-type: underline -) -!default; diff --git a/arrow-site/docs/_sass/utils/mixins/_breakpoint.scss b/arrow-site/docs/_sass/utils/mixins/_breakpoint.scss deleted file mode 100644 index 4882afa8b94..00000000000 --- a/arrow-site/docs/_sass/utils/mixins/_breakpoint.scss +++ /dev/null @@ -1,25 +0,0 @@ -// Breakpoint -// ----------------------------------------------- -// ----------------------------------------------- -@mixin bp($point) { - @if $point==xlarge { - @media (max-width: $bp-xlarge) { - @content; - } - } - @if $point==large { - @media (max-width: $bp-large) { - @content; - } - } - @if $point==medium { - @media (max-width: $bp-medium) { - @content; - } - } - @if $point==small { - @media (max-width: $bp-small) { - @content; - } - } -} diff --git a/arrow-site/docs/_sass/utils/mixins/_general-mixins.scss b/arrow-site/docs/_sass/utils/mixins/_general-mixins.scss deleted file mode 100644 index d9b2cd73106..00000000000 --- a/arrow-site/docs/_sass/utils/mixins/_general-mixins.scss +++ /dev/null @@ -1,9 +0,0 @@ -// Transform -//------------------------------------------------ -@mixin rotate($degrees) { - -webkit-transform: rotate($degrees); - -moz-transform: rotate($degrees); - -ms-transform: rotate($degrees); - -o-transform: rotate($degrees); - transform: rotate($degrees); -} diff --git a/arrow-site/docs/_sass/utils/mixins/_links.scss b/arrow-site/docs/_sass/utils/mixins/_links.scss deleted file mode 100644 index 4e3c354c2a5..00000000000 --- a/arrow-site/docs/_sass/utils/mixins/_links.scss +++ /dev/null @@ -1,20 +0,0 @@ -// Links -//------------------------------------------------ -@mixin links ($link, $visited, $hover, $active) { - & { - color: $link; - - &:visited { - color: $visited; - } - - &:hover { - color: $hover; - } - - &:active, - &:focus { - color: $active; - } - } -} diff --git a/arrow-site/docs/_sass/vendors/highlight/_atom-one-dark.scss b/arrow-site/docs/_sass/vendors/highlight/_atom-one-dark.scss deleted file mode 100644 index 1616aafe315..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/_atom-one-dark.scss +++ /dev/null @@ -1,96 +0,0 @@ -/* - -Atom One Dark by Daniel Gamage -Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax - -base: #282c34 -mono-1: #abb2bf -mono-2: #818896 -mono-3: #5c6370 -hue-1: #56b6c2 -hue-2: #61aeee -hue-3: #c678dd -hue-4: #98c379 -hue-5: #e06c75 -hue-5-2: #be5046 -hue-6: #d19a66 -hue-6-2: #e6c07b - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #abb2bf; - background: #282c34; -} - -.hljs-comment, -.hljs-quote { - color: #5c6370; - font-style: italic; -} - -.hljs-doctag, -.hljs-keyword, -.hljs-formula { - color: #c678dd; -} - -.hljs-section, -.hljs-name, -.hljs-selector-tag, -.hljs-deletion, -.hljs-subst { - color: #e06c75; -} - -.hljs-literal { - color: #56b6c2; -} - -.hljs-string, -.hljs-regexp, -.hljs-addition, -.hljs-attribute, -.hljs-meta-string { - color: #98c379; -} - -.hljs-built_in, -.hljs-class .hljs-title { - color: #e6c07b; -} - -.hljs-attr, -.hljs-variable, -.hljs-template-variable, -.hljs-type, -.hljs-selector-class, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-number { - color: #d19a66; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-link, -.hljs-meta, -.hljs-selector-id, -.hljs-title { - color: #61aeee; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-link { - text-decoration: underline; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/_color-brewer.scss b/arrow-site/docs/_sass/vendors/highlight/_color-brewer.scss deleted file mode 100644 index 7934d986a7e..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/_color-brewer.scss +++ /dev/null @@ -1,71 +0,0 @@ -/* - -Colorbrewer theme -Original: https://github.com/mbostock/colorbrewer-theme (c) Mike Bostock -Ported by Fabrício Tavares de Oliveira - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #fff; -} - -.hljs, -.hljs-subst { - color: #000; -} - -.hljs-string, -.hljs-meta, -.hljs-symbol, -.hljs-template-tag, -.hljs-template-variable, -.hljs-addition { - color: #756bb1; -} - -.hljs-comment, -.hljs-quote { - color: #636363; -} - -.hljs-number, -.hljs-regexp, -.hljs-literal, -.hljs-bullet, -.hljs-link { - color: #31a354; -} - -.hljs-deletion, -.hljs-variable { - color: #88f; -} - - - -.hljs-keyword, -.hljs-selector-tag, -.hljs-title, -.hljs-section, -.hljs-built_in, -.hljs-doctag, -.hljs-type, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-strong { - color: #3182bd; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-attribute { - color: #e6550d; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/_default.scss b/arrow-site/docs/_sass/vendors/highlight/_default.scss deleted file mode 100644 index f1bfade31e5..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/_default.scss +++ /dev/null @@ -1,99 +0,0 @@ -/* - -Original highlight.js style (c) Ivan Sagalaev - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #F0F0F0; -} - - -/* Base color: saturation 0; */ - -.hljs, -.hljs-subst { - color: #444; -} - -.hljs-comment { - color: #888888; -} - -.hljs-keyword, -.hljs-attribute, -.hljs-selector-tag, -.hljs-meta-keyword, -.hljs-doctag, -.hljs-name { - font-weight: bold; -} - - -/* User color: hue: 0 */ - -.hljs-type, -.hljs-string, -.hljs-number, -.hljs-selector-id, -.hljs-selector-class, -.hljs-quote, -.hljs-template-tag, -.hljs-deletion { - color: #880000; -} - -.hljs-title, -.hljs-section { - color: #880000; - font-weight: bold; -} - -.hljs-regexp, -.hljs-symbol, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #BC6060; -} - - -/* Language color: hue: 90; */ - -.hljs-literal { - color: #78A960; -} - -.hljs-built_in, -.hljs-bullet, -.hljs-code, -.hljs-addition { - color: #397300; -} - - -/* Meta color: hue: 200 */ - -.hljs-meta { - color: #1f7199; -} - -.hljs-meta-string { - color: #4d99bf; -} - - -/* Misc effects */ - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/_dracula.scss b/arrow-site/docs/_sass/vendors/highlight/_dracula.scss deleted file mode 100644 index be182d0b504..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/_dracula.scss +++ /dev/null @@ -1,77 +0,0 @@ -/* - -Darcula color scheme from the JetBrains family of IDEs - -*/ - - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #2b2b2b; -} - -.hljs { - color: #bababa; -} - -.hljs-strong, -.hljs-emphasis { - color: #a8a8a2; -} - -.hljs-bullet, -.hljs-quote, -.hljs-link, -.hljs-number, -.hljs-regexp, -.hljs-literal { - color: #6896ba; -} - -.hljs-code, -.hljs-selector-class { - color: #a6e22e; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-section, -.hljs-attribute, -.hljs-name, -.hljs-variable { - color: #cb7832; -} - -.hljs-params { - color: #b9b9b9; -} - -.hljs-string { - color: #6a8759; -} - -.hljs-subst, -.hljs-type, -.hljs-built_in, -.hljs-builtin-name, -.hljs-symbol, -.hljs-selector-id, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-template-tag, -.hljs-template-variable, -.hljs-addition { - color: #e0c46c; -} - -.hljs-comment, -.hljs-deletion, -.hljs-meta { - color: #7f7f7f; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/a11y-dark.css b/arrow-site/docs/_sass/vendors/highlight/a11y-dark.css deleted file mode 100644 index b93b742a457..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/a11y-dark.css +++ /dev/null @@ -1,99 +0,0 @@ -/* a11y-dark theme */ -/* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */ -/* @author: ericwbailey */ - -/* Comment */ -.hljs-comment, -.hljs-quote { - color: #d4d0ab; -} - -/* Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-deletion { - color: #ffa07a; -} - -/* Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-meta, -.hljs-link { - color: #f5ab35; -} - -/* Yellow */ -.hljs-attribute { - color: #ffd700; -} - -/* Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #abe338; -} - -/* Blue */ -.hljs-title, -.hljs-section { - color: #00e0e0; -} - -/* Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #dcc6e0; -} - -.hljs { - display: block; - overflow-x: auto; - background: #2b2b2b; - color: #f8f8f2; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} - -@media screen and (-ms-high-contrast: active) { - .hljs-addition, - .hljs-attribute, - .hljs-built_in, - .hljs-builtin-name, - .hljs-bullet, - .hljs-comment, - .hljs-link, - .hljs-literal, - .hljs-meta, - .hljs-number, - .hljs-params, - .hljs-string, - .hljs-symbol, - .hljs-type, - .hljs-quote { - color: highlight; - } - - .hljs-keyword, - .hljs-selector-tag { - font-weight: bold; - } -} diff --git a/arrow-site/docs/_sass/vendors/highlight/a11y-light.css b/arrow-site/docs/_sass/vendors/highlight/a11y-light.css deleted file mode 100644 index f1bf8f3f8fa..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/a11y-light.css +++ /dev/null @@ -1,99 +0,0 @@ -/* a11y-light theme */ -/* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */ -/* @author: ericwbailey */ - -/* Comment */ -.hljs-comment, -.hljs-quote { - color: #696969; -} - -/* Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-deletion { - color: #d91e18; -} - -/* Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-meta, -.hljs-link { - color: #aa5d00; -} - -/* Yellow */ -.hljs-attribute { - color: #aa5d00; -} - -/* Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #008000; -} - -/* Blue */ -.hljs-title, -.hljs-section { - color: #007faa; -} - -/* Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #7928a1; -} - -.hljs { - display: block; - overflow-x: auto; - background: #fefefe; - color: #545454; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} - -@media screen and (-ms-high-contrast: active) { - .hljs-addition, - .hljs-attribute, - .hljs-built_in, - .hljs-builtin-name, - .hljs-bullet, - .hljs-comment, - .hljs-link, - .hljs-literal, - .hljs-meta, - .hljs-number, - .hljs-params, - .hljs-string, - .hljs-symbol, - .hljs-type, - .hljs-quote { - color: highlight; - } - - .hljs-keyword, - .hljs-selector-tag { - font-weight: bold; - } -} diff --git a/arrow-site/docs/_sass/vendors/highlight/agate.css b/arrow-site/docs/_sass/vendors/highlight/agate.css deleted file mode 100644 index 8d64547c587..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/agate.css +++ /dev/null @@ -1,108 +0,0 @@ -/*! - * Agate by Taufik Nurrohman - * ---------------------------------------------------- - * - * #ade5fc - * #a2fca2 - * #c6b4f0 - * #d36363 - * #fcc28c - * #fc9b9b - * #ffa - * #fff - * #333 - * #62c8f3 - * #888 - * - */ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #333; - color: white; -} - -.hljs-name, -.hljs-strong { - font-weight: bold; -} - -.hljs-code, -.hljs-emphasis { - font-style: italic; -} - -.hljs-tag { - color: #62c8f3; -} - -.hljs-variable, -.hljs-template-variable, -.hljs-selector-id, -.hljs-selector-class { - color: #ade5fc; -} - -.hljs-string, -.hljs-bullet { - color: #a2fca2; -} - -.hljs-type, -.hljs-title, -.hljs-section, -.hljs-attribute, -.hljs-quote, -.hljs-built_in, -.hljs-builtin-name { - color: #ffa; -} - -.hljs-number, -.hljs-symbol, -.hljs-bullet { - color: #d36363; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal { - color: #fcc28c; -} - -.hljs-comment, -.hljs-deletion, -.hljs-code { - color: #888; -} - -.hljs-regexp, -.hljs-link { - color: #c6b4f0; -} - -.hljs-meta { - color: #fc9b9b; -} - -.hljs-deletion { - background-color: #fc9b9b; - color: #333; -} - -.hljs-addition { - background-color: #a2fca2; - color: #333; -} - -.hljs a { - color: inherit; -} - -.hljs a:focus, -.hljs a:hover { - color: inherit; - text-decoration: underline; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/an-old-hope.css b/arrow-site/docs/_sass/vendors/highlight/an-old-hope.css deleted file mode 100644 index a6d56f4b40c..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/an-old-hope.css +++ /dev/null @@ -1,89 +0,0 @@ -/* - -An Old Hope – Star Wars Syntax (c) Gustavo Costa -Original theme - Ocean Dark Theme – by https://github.com/gavsiu -Based on Jesse Leite's Atom syntax theme 'An Old Hope' – https://github.com/JesseLeite/an-old-hope-syntax-atom - -*/ - -/* Death Star Comment */ -.hljs-comment, -.hljs-quote -{ - color: #B6B18B; -} - -/* Darth Vader */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-deletion -{ - color: #EB3C54; -} - -/* Threepio */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-meta, -.hljs-link -{ - color: #E7CE56; -} - -/* Luke Skywalker */ -.hljs-attribute -{ - color: #EE7C2B; -} - -/* Obi Wan Kenobi */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition -{ - color: #4FB4D7; -} - -/* Yoda */ -.hljs-title, -.hljs-section -{ - color: #78BB65; -} - -/* Mace Windu */ -.hljs-keyword, -.hljs-selector-tag -{ - color: #B45EA4; -} - -/* Millenium Falcon */ -.hljs -{ - display: block; - overflow-x: auto; - background: #1C1D21; - color: #c0c5ce; - padding: 0.5em; -} - -.hljs-emphasis -{ - font-style: italic; -} - -.hljs-strong -{ - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/androidstudio.css b/arrow-site/docs/_sass/vendors/highlight/androidstudio.css deleted file mode 100644 index bc8e473b593..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/androidstudio.css +++ /dev/null @@ -1,66 +0,0 @@ -/* -Date: 24 Fev 2015 -Author: Pedro Oliveira -*/ - -.hljs { - color: #a9b7c6; - background: #282b2e; - display: block; - overflow-x: auto; - padding: 0.5em; -} - -.hljs-number, -.hljs-literal, -.hljs-symbol, -.hljs-bullet { - color: #6897BB; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-deletion { - color: #cc7832; -} - -.hljs-variable, -.hljs-template-variable, -.hljs-link { - color: #629755; -} - -.hljs-comment, -.hljs-quote { - color: #808080; -} - -.hljs-meta { - color: #bbb529; -} - -.hljs-string, -.hljs-attribute, -.hljs-addition { - color: #6A8759; -} - -.hljs-section, -.hljs-title, -.hljs-type { - color: #ffc66d; -} - -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #e8bf6a; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/arduino-light.css b/arrow-site/docs/_sass/vendors/highlight/arduino-light.css deleted file mode 100644 index 4b8b7fd3c93..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/arduino-light.css +++ /dev/null @@ -1,88 +0,0 @@ -/* - -Arduino® Light Theme - Stefania Mellai - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #FFFFFF; -} - -.hljs, -.hljs-subst { - color: #434f54; -} - -.hljs-keyword, -.hljs-attribute, -.hljs-selector-tag, -.hljs-doctag, -.hljs-name { - color: #00979D; -} - -.hljs-built_in, -.hljs-literal, -.hljs-bullet, -.hljs-code, -.hljs-addition { - color: #D35400; -} - -.hljs-regexp, -.hljs-symbol, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #00979D; -} - -.hljs-type, -.hljs-string, -.hljs-selector-id, -.hljs-selector-class, -.hljs-quote, -.hljs-template-tag, -.hljs-deletion { - color: #005C5F; -} - -.hljs-title, -.hljs-section { - color: #880000; - font-weight: bold; -} - -.hljs-comment { - color: rgba(149,165,166,.8); -} - -.hljs-meta-keyword { - color: #728E00; -} - -.hljs-meta { - color: #728E00; - color: #434f54; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-function { - color: #728E00; -} - -.hljs-number { - color: #8A7B52; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/arta.css b/arrow-site/docs/_sass/vendors/highlight/arta.css deleted file mode 100644 index 75ef3a9e595..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/arta.css +++ /dev/null @@ -1,73 +0,0 @@ -/* -Date: 17.V.2011 -Author: pumbur -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #222; -} - -.hljs, -.hljs-subst { - color: #aaa; -} - -.hljs-section { - color: #fff; -} - -.hljs-comment, -.hljs-quote, -.hljs-meta { - color: #444; -} - -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-regexp { - color: #ffcc33; -} - -.hljs-number, -.hljs-addition { - color: #00cc66; -} - -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-template-variable, -.hljs-attribute, -.hljs-link { - color: #32aaee; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #6644aa; -} - -.hljs-title, -.hljs-variable, -.hljs-deletion, -.hljs-template-tag { - color: #bb1166; -} - -.hljs-section, -.hljs-doctag, -.hljs-strong { - font-weight: bold; -} - -.hljs-emphasis { - font-style: italic; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/ascetic.css b/arrow-site/docs/_sass/vendors/highlight/ascetic.css deleted file mode 100644 index 48397e889dd..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/ascetic.css +++ /dev/null @@ -1,45 +0,0 @@ -/* - -Original style from softwaremaniacs.org (c) Ivan Sagalaev - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: white; - color: black; -} - -.hljs-string, -.hljs-variable, -.hljs-template-variable, -.hljs-symbol, -.hljs-bullet, -.hljs-section, -.hljs-addition, -.hljs-attribute, -.hljs-link { - color: #888; -} - -.hljs-comment, -.hljs-quote, -.hljs-meta, -.hljs-deletion { - color: #ccc; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-section, -.hljs-name, -.hljs-type, -.hljs-strong { - font-weight: bold; -} - -.hljs-emphasis { - font-style: italic; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-cave-dark.css b/arrow-site/docs/_sass/vendors/highlight/atelier-cave-dark.css deleted file mode 100644 index 65428f3b12a..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-cave-dark.css +++ /dev/null @@ -1,83 +0,0 @@ -/* Base16 Atelier Cave Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Cave Comment */ -.hljs-comment, -.hljs-quote { - color: #7e7887; -} - -/* Atelier-Cave Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-regexp, -.hljs-link, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #be4678; -} - -/* Atelier-Cave Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #aa573c; -} - -/* Atelier-Cave Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #2a9292; -} - -/* Atelier-Cave Blue */ -.hljs-title, -.hljs-section { - color: #576ddb; -} - -/* Atelier-Cave Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #955ae7; -} - -.hljs-deletion, -.hljs-addition { - color: #19171c; - display: inline-block; - width: 100%; -} - -.hljs-deletion { - background-color: #be4678; -} - -.hljs-addition { - background-color: #2a9292; -} - -.hljs { - display: block; - overflow-x: auto; - background: #19171c; - color: #8b8792; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-cave-light.css b/arrow-site/docs/_sass/vendors/highlight/atelier-cave-light.css deleted file mode 100644 index b419f9fd8f8..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-cave-light.css +++ /dev/null @@ -1,85 +0,0 @@ -/* Base16 Atelier Cave Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Cave Comment */ -.hljs-comment, -.hljs-quote { - color: #655f6d; -} - -/* Atelier-Cave Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #be4678; -} - -/* Atelier-Cave Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #aa573c; -} - -/* Atelier-Cave Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #2a9292; -} - -/* Atelier-Cave Blue */ -.hljs-title, -.hljs-section { - color: #576ddb; -} - -/* Atelier-Cave Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #955ae7; -} - -.hljs-deletion, -.hljs-addition { - color: #19171c; - display: inline-block; - width: 100%; -} - -.hljs-deletion { - background-color: #be4678; -} - -.hljs-addition { - background-color: #2a9292; -} - -.hljs { - display: block; - overflow-x: auto; - background: #efecf4; - color: #585260; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-dune-dark.css b/arrow-site/docs/_sass/vendors/highlight/atelier-dune-dark.css deleted file mode 100644 index 1684f5225af..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-dune-dark.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Base16 Atelier Dune Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Dune Comment */ -.hljs-comment, -.hljs-quote { - color: #999580; -} - -/* Atelier-Dune Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #d73737; -} - -/* Atelier-Dune Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #b65611; -} - -/* Atelier-Dune Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #60ac39; -} - -/* Atelier-Dune Blue */ -.hljs-title, -.hljs-section { - color: #6684e1; -} - -/* Atelier-Dune Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #b854d4; -} - -.hljs { - display: block; - overflow-x: auto; - background: #20201d; - color: #a6a28c; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-dune-light.css b/arrow-site/docs/_sass/vendors/highlight/atelier-dune-light.css deleted file mode 100644 index 547719de826..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-dune-light.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Base16 Atelier Dune Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Dune Comment */ -.hljs-comment, -.hljs-quote { - color: #7d7a68; -} - -/* Atelier-Dune Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #d73737; -} - -/* Atelier-Dune Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #b65611; -} - -/* Atelier-Dune Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #60ac39; -} - -/* Atelier-Dune Blue */ -.hljs-title, -.hljs-section { - color: #6684e1; -} - -/* Atelier-Dune Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #b854d4; -} - -.hljs { - display: block; - overflow-x: auto; - background: #fefbec; - color: #6e6b5e; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-estuary-dark.css b/arrow-site/docs/_sass/vendors/highlight/atelier-estuary-dark.css deleted file mode 100644 index a5e507187e9..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-estuary-dark.css +++ /dev/null @@ -1,84 +0,0 @@ -/* Base16 Atelier Estuary Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Estuary Comment */ -.hljs-comment, -.hljs-quote { - color: #878573; -} - -/* Atelier-Estuary Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #ba6236; -} - -/* Atelier-Estuary Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #ae7313; -} - -/* Atelier-Estuary Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #7d9726; -} - -/* Atelier-Estuary Blue */ -.hljs-title, -.hljs-section { - color: #36a166; -} - -/* Atelier-Estuary Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #5f9182; -} - -.hljs-deletion, -.hljs-addition { - color: #22221b; - display: inline-block; - width: 100%; -} - -.hljs-deletion { - background-color: #ba6236; -} - -.hljs-addition { - background-color: #7d9726; -} - -.hljs { - display: block; - overflow-x: auto; - background: #22221b; - color: #929181; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-estuary-light.css b/arrow-site/docs/_sass/vendors/highlight/atelier-estuary-light.css deleted file mode 100644 index 1daee5d9855..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-estuary-light.css +++ /dev/null @@ -1,84 +0,0 @@ -/* Base16 Atelier Estuary Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Estuary Comment */ -.hljs-comment, -.hljs-quote { - color: #6c6b5a; -} - -/* Atelier-Estuary Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #ba6236; -} - -/* Atelier-Estuary Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #ae7313; -} - -/* Atelier-Estuary Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #7d9726; -} - -/* Atelier-Estuary Blue */ -.hljs-title, -.hljs-section { - color: #36a166; -} - -/* Atelier-Estuary Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #5f9182; -} - -.hljs-deletion, -.hljs-addition { - color: #22221b; - display: inline-block; - width: 100%; -} - -.hljs-deletion { - background-color: #ba6236; -} - -.hljs-addition { - background-color: #7d9726; -} - -.hljs { - display: block; - overflow-x: auto; - background: #f4f3ec; - color: #5f5e4e; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-forest-dark.css b/arrow-site/docs/_sass/vendors/highlight/atelier-forest-dark.css deleted file mode 100644 index 0ef4fae3174..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-forest-dark.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Base16 Atelier Forest Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Forest Comment */ -.hljs-comment, -.hljs-quote { - color: #9c9491; -} - -/* Atelier-Forest Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #f22c40; -} - -/* Atelier-Forest Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #df5320; -} - -/* Atelier-Forest Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #7b9726; -} - -/* Atelier-Forest Blue */ -.hljs-title, -.hljs-section { - color: #407ee7; -} - -/* Atelier-Forest Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #6666ea; -} - -.hljs { - display: block; - overflow-x: auto; - background: #1b1918; - color: #a8a19f; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-forest-light.css b/arrow-site/docs/_sass/vendors/highlight/atelier-forest-light.css deleted file mode 100644 index bbedde18a0a..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-forest-light.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Base16 Atelier Forest Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Forest Comment */ -.hljs-comment, -.hljs-quote { - color: #766e6b; -} - -/* Atelier-Forest Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #f22c40; -} - -/* Atelier-Forest Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #df5320; -} - -/* Atelier-Forest Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #7b9726; -} - -/* Atelier-Forest Blue */ -.hljs-title, -.hljs-section { - color: #407ee7; -} - -/* Atelier-Forest Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #6666ea; -} - -.hljs { - display: block; - overflow-x: auto; - background: #f1efee; - color: #68615e; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-heath-dark.css b/arrow-site/docs/_sass/vendors/highlight/atelier-heath-dark.css deleted file mode 100644 index fe01ff721b9..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-heath-dark.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Base16 Atelier Heath Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Heath Comment */ -.hljs-comment, -.hljs-quote { - color: #9e8f9e; -} - -/* Atelier-Heath Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #ca402b; -} - -/* Atelier-Heath Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #a65926; -} - -/* Atelier-Heath Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #918b3b; -} - -/* Atelier-Heath Blue */ -.hljs-title, -.hljs-section { - color: #516aec; -} - -/* Atelier-Heath Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #7b59c0; -} - -.hljs { - display: block; - overflow-x: auto; - background: #1b181b; - color: #ab9bab; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-heath-light.css b/arrow-site/docs/_sass/vendors/highlight/atelier-heath-light.css deleted file mode 100644 index ee43786d12e..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-heath-light.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Base16 Atelier Heath Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Heath Comment */ -.hljs-comment, -.hljs-quote { - color: #776977; -} - -/* Atelier-Heath Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #ca402b; -} - -/* Atelier-Heath Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #a65926; -} - -/* Atelier-Heath Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #918b3b; -} - -/* Atelier-Heath Blue */ -.hljs-title, -.hljs-section { - color: #516aec; -} - -/* Atelier-Heath Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #7b59c0; -} - -.hljs { - display: block; - overflow-x: auto; - background: #f7f3f7; - color: #695d69; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-lakeside-dark.css b/arrow-site/docs/_sass/vendors/highlight/atelier-lakeside-dark.css deleted file mode 100644 index a937d3bf5f7..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-lakeside-dark.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Base16 Atelier Lakeside Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Lakeside Comment */ -.hljs-comment, -.hljs-quote { - color: #7195a8; -} - -/* Atelier-Lakeside Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #d22d72; -} - -/* Atelier-Lakeside Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #935c25; -} - -/* Atelier-Lakeside Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #568c3b; -} - -/* Atelier-Lakeside Blue */ -.hljs-title, -.hljs-section { - color: #257fad; -} - -/* Atelier-Lakeside Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #6b6bb8; -} - -.hljs { - display: block; - overflow-x: auto; - background: #161b1d; - color: #7ea2b4; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-lakeside-light.css b/arrow-site/docs/_sass/vendors/highlight/atelier-lakeside-light.css deleted file mode 100644 index 6c7e8f9ef2d..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-lakeside-light.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Base16 Atelier Lakeside Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Lakeside Comment */ -.hljs-comment, -.hljs-quote { - color: #5a7b8c; -} - -/* Atelier-Lakeside Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #d22d72; -} - -/* Atelier-Lakeside Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #935c25; -} - -/* Atelier-Lakeside Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #568c3b; -} - -/* Atelier-Lakeside Blue */ -.hljs-title, -.hljs-section { - color: #257fad; -} - -/* Atelier-Lakeside Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #6b6bb8; -} - -.hljs { - display: block; - overflow-x: auto; - background: #ebf8ff; - color: #516d7b; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-plateau-dark.css b/arrow-site/docs/_sass/vendors/highlight/atelier-plateau-dark.css deleted file mode 100644 index 3bb052693c1..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-plateau-dark.css +++ /dev/null @@ -1,84 +0,0 @@ -/* Base16 Atelier Plateau Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Plateau Comment */ -.hljs-comment, -.hljs-quote { - color: #7e7777; -} - -/* Atelier-Plateau Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #ca4949; -} - -/* Atelier-Plateau Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #b45a3c; -} - -/* Atelier-Plateau Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #4b8b8b; -} - -/* Atelier-Plateau Blue */ -.hljs-title, -.hljs-section { - color: #7272ca; -} - -/* Atelier-Plateau Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #8464c4; -} - -.hljs-deletion, -.hljs-addition { - color: #1b1818; - display: inline-block; - width: 100%; -} - -.hljs-deletion { - background-color: #ca4949; -} - -.hljs-addition { - background-color: #4b8b8b; -} - -.hljs { - display: block; - overflow-x: auto; - background: #1b1818; - color: #8a8585; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-plateau-light.css b/arrow-site/docs/_sass/vendors/highlight/atelier-plateau-light.css deleted file mode 100644 index 5f0222bec1f..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-plateau-light.css +++ /dev/null @@ -1,84 +0,0 @@ -/* Base16 Atelier Plateau Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Plateau Comment */ -.hljs-comment, -.hljs-quote { - color: #655d5d; -} - -/* Atelier-Plateau Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #ca4949; -} - -/* Atelier-Plateau Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #b45a3c; -} - -/* Atelier-Plateau Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #4b8b8b; -} - -/* Atelier-Plateau Blue */ -.hljs-title, -.hljs-section { - color: #7272ca; -} - -/* Atelier-Plateau Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #8464c4; -} - -.hljs-deletion, -.hljs-addition { - color: #1b1818; - display: inline-block; - width: 100%; -} - -.hljs-deletion { - background-color: #ca4949; -} - -.hljs-addition { - background-color: #4b8b8b; -} - -.hljs { - display: block; - overflow-x: auto; - background: #f4ecec; - color: #585050; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-savanna-dark.css b/arrow-site/docs/_sass/vendors/highlight/atelier-savanna-dark.css deleted file mode 100644 index 38f831431c3..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-savanna-dark.css +++ /dev/null @@ -1,84 +0,0 @@ -/* Base16 Atelier Savanna Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Savanna Comment */ -.hljs-comment, -.hljs-quote { - color: #78877d; -} - -/* Atelier-Savanna Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #b16139; -} - -/* Atelier-Savanna Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #9f713c; -} - -/* Atelier-Savanna Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #489963; -} - -/* Atelier-Savanna Blue */ -.hljs-title, -.hljs-section { - color: #478c90; -} - -/* Atelier-Savanna Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #55859b; -} - -.hljs-deletion, -.hljs-addition { - color: #171c19; - display: inline-block; - width: 100%; -} - -.hljs-deletion { - background-color: #b16139; -} - -.hljs-addition { - background-color: #489963; -} - -.hljs { - display: block; - overflow-x: auto; - background: #171c19; - color: #87928a; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-savanna-light.css b/arrow-site/docs/_sass/vendors/highlight/atelier-savanna-light.css deleted file mode 100644 index 1ccd7c6858f..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-savanna-light.css +++ /dev/null @@ -1,84 +0,0 @@ -/* Base16 Atelier Savanna Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Savanna Comment */ -.hljs-comment, -.hljs-quote { - color: #5f6d64; -} - -/* Atelier-Savanna Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #b16139; -} - -/* Atelier-Savanna Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #9f713c; -} - -/* Atelier-Savanna Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #489963; -} - -/* Atelier-Savanna Blue */ -.hljs-title, -.hljs-section { - color: #478c90; -} - -/* Atelier-Savanna Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #55859b; -} - -.hljs-deletion, -.hljs-addition { - color: #171c19; - display: inline-block; - width: 100%; -} - -.hljs-deletion { - background-color: #b16139; -} - -.hljs-addition { - background-color: #489963; -} - -.hljs { - display: block; - overflow-x: auto; - background: #ecf4ee; - color: #526057; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-seaside-dark.css b/arrow-site/docs/_sass/vendors/highlight/atelier-seaside-dark.css deleted file mode 100644 index df29949c69f..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-seaside-dark.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Base16 Atelier Seaside Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Seaside Comment */ -.hljs-comment, -.hljs-quote { - color: #809980; -} - -/* Atelier-Seaside Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #e6193c; -} - -/* Atelier-Seaside Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #87711d; -} - -/* Atelier-Seaside Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #29a329; -} - -/* Atelier-Seaside Blue */ -.hljs-title, -.hljs-section { - color: #3d62f5; -} - -/* Atelier-Seaside Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #ad2bee; -} - -.hljs { - display: block; - overflow-x: auto; - background: #131513; - color: #8ca68c; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-seaside-light.css b/arrow-site/docs/_sass/vendors/highlight/atelier-seaside-light.css deleted file mode 100644 index 9d960f29f38..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-seaside-light.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Base16 Atelier Seaside Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Seaside Comment */ -.hljs-comment, -.hljs-quote { - color: #687d68; -} - -/* Atelier-Seaside Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #e6193c; -} - -/* Atelier-Seaside Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #87711d; -} - -/* Atelier-Seaside Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #29a329; -} - -/* Atelier-Seaside Blue */ -.hljs-title, -.hljs-section { - color: #3d62f5; -} - -/* Atelier-Seaside Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #ad2bee; -} - -.hljs { - display: block; - overflow-x: auto; - background: #f4fbf4; - color: #5e6e5e; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-sulphurpool-dark.css b/arrow-site/docs/_sass/vendors/highlight/atelier-sulphurpool-dark.css deleted file mode 100644 index c2ab7938d84..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-sulphurpool-dark.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Base16 Atelier Sulphurpool Dark - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Sulphurpool Comment */ -.hljs-comment, -.hljs-quote { - color: #898ea4; -} - -/* Atelier-Sulphurpool Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #c94922; -} - -/* Atelier-Sulphurpool Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #c76b29; -} - -/* Atelier-Sulphurpool Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #ac9739; -} - -/* Atelier-Sulphurpool Blue */ -.hljs-title, -.hljs-section { - color: #3d8fd1; -} - -/* Atelier-Sulphurpool Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #6679cc; -} - -.hljs { - display: block; - overflow-x: auto; - background: #202746; - color: #979db4; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atelier-sulphurpool-light.css b/arrow-site/docs/_sass/vendors/highlight/atelier-sulphurpool-light.css deleted file mode 100644 index 96c47d08608..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atelier-sulphurpool-light.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Base16 Atelier Sulphurpool Light - Theme */ -/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */ -/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ - -/* Atelier-Sulphurpool Comment */ -.hljs-comment, -.hljs-quote { - color: #6b7394; -} - -/* Atelier-Sulphurpool Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-regexp, -.hljs-link, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #c94922; -} - -/* Atelier-Sulphurpool Orange */ -.hljs-number, -.hljs-meta, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #c76b29; -} - -/* Atelier-Sulphurpool Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet { - color: #ac9739; -} - -/* Atelier-Sulphurpool Blue */ -.hljs-title, -.hljs-section { - color: #3d8fd1; -} - -/* Atelier-Sulphurpool Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #6679cc; -} - -.hljs { - display: block; - overflow-x: auto; - background: #f5f7ff; - color: #5e6687; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atom-one-dark-reasonable.css b/arrow-site/docs/_sass/vendors/highlight/atom-one-dark-reasonable.css deleted file mode 100644 index fd41c996a3c..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atom-one-dark-reasonable.css +++ /dev/null @@ -1,77 +0,0 @@ -/* - -Atom One Dark With support for ReasonML by Gidi Morris, based off work by Daniel Gamage - -Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax - -*/ -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - line-height: 1.3em; - color: #abb2bf; - background: #282c34; - border-radius: 5px; -} -.hljs-keyword, .hljs-operator { - color: #F92672; -} -.hljs-pattern-match { - color: #F92672; -} -.hljs-pattern-match .hljs-constructor { - color: #61aeee; -} -.hljs-function { - color: #61aeee; -} -.hljs-function .hljs-params { - color: #A6E22E; -} -.hljs-function .hljs-params .hljs-typing { - color: #FD971F; -} -.hljs-module-access .hljs-module { - color: #7e57c2; -} -.hljs-constructor { - color: #e2b93d; -} -.hljs-constructor .hljs-string { - color: #9CCC65; -} -.hljs-comment, .hljs-quote { - color: #b18eb1; - font-style: italic; -} -.hljs-doctag, .hljs-formula { - color: #c678dd; -} -.hljs-section, .hljs-name, .hljs-selector-tag, .hljs-deletion, .hljs-subst { - color: #e06c75; -} -.hljs-literal { - color: #56b6c2; -} -.hljs-string, .hljs-regexp, .hljs-addition, .hljs-attribute, .hljs-meta-string { - color: #98c379; -} -.hljs-built_in, .hljs-class .hljs-title { - color: #e6c07b; -} -.hljs-attr, .hljs-variable, .hljs-template-variable, .hljs-type, .hljs-selector-class, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-number { - color: #d19a66; -} -.hljs-symbol, .hljs-bullet, .hljs-link, .hljs-meta, .hljs-selector-id, .hljs-title { - color: #61aeee; -} -.hljs-emphasis { - font-style: italic; -} -.hljs-strong { - font-weight: bold; -} -.hljs-link { - text-decoration: underline; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/atom-one-light.css b/arrow-site/docs/_sass/vendors/highlight/atom-one-light.css deleted file mode 100644 index d5bd1d2a9a3..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/atom-one-light.css +++ /dev/null @@ -1,96 +0,0 @@ -/* - -Atom One Light by Daniel Gamage -Original One Light Syntax theme from https://github.com/atom/one-light-syntax - -base: #fafafa -mono-1: #383a42 -mono-2: #686b77 -mono-3: #a0a1a7 -hue-1: #0184bb -hue-2: #4078f2 -hue-3: #a626a4 -hue-4: #50a14f -hue-5: #e45649 -hue-5-2: #c91243 -hue-6: #986801 -hue-6-2: #c18401 - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #383a42; - background: #fafafa; -} - -.hljs-comment, -.hljs-quote { - color: #a0a1a7; - font-style: italic; -} - -.hljs-doctag, -.hljs-keyword, -.hljs-formula { - color: #a626a4; -} - -.hljs-section, -.hljs-name, -.hljs-selector-tag, -.hljs-deletion, -.hljs-subst { - color: #e45649; -} - -.hljs-literal { - color: #0184bb; -} - -.hljs-string, -.hljs-regexp, -.hljs-addition, -.hljs-attribute, -.hljs-meta-string { - color: #50a14f; -} - -.hljs-built_in, -.hljs-class .hljs-title { - color: #c18401; -} - -.hljs-attr, -.hljs-variable, -.hljs-template-variable, -.hljs-type, -.hljs-selector-class, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-number { - color: #986801; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-link, -.hljs-meta, -.hljs-selector-id, -.hljs-title { - color: #4078f2; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-link { - text-decoration: underline; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/brown-paper.css b/arrow-site/docs/_sass/vendors/highlight/brown-paper.css deleted file mode 100644 index f0197b924c1..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/brown-paper.css +++ /dev/null @@ -1,64 +0,0 @@ -/* - -Brown Paper style from goldblog.com.ua (c) Zaripov Yura - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background:#b7a68e url(./brown-papersq.png); -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal { - color:#005599; - font-weight:bold; -} - -.hljs, -.hljs-subst { - color: #363c69; -} - -.hljs-string, -.hljs-title, -.hljs-section, -.hljs-type, -.hljs-attribute, -.hljs-symbol, -.hljs-bullet, -.hljs-built_in, -.hljs-addition, -.hljs-variable, -.hljs-template-tag, -.hljs-template-variable, -.hljs-link, -.hljs-name { - color: #2c009f; -} - -.hljs-comment, -.hljs-quote, -.hljs-meta, -.hljs-deletion { - color: #802022; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-doctag, -.hljs-title, -.hljs-section, -.hljs-type, -.hljs-name, -.hljs-strong { - font-weight: bold; -} - -.hljs-emphasis { - font-style: italic; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/brown-papersq.png b/arrow-site/docs/_sass/vendors/highlight/brown-papersq.png deleted file mode 100644 index 3813903dbf9..00000000000 Binary files a/arrow-site/docs/_sass/vendors/highlight/brown-papersq.png and /dev/null differ diff --git a/arrow-site/docs/_sass/vendors/highlight/codepen-embed.css b/arrow-site/docs/_sass/vendors/highlight/codepen-embed.css deleted file mode 100644 index 195c4a07843..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/codepen-embed.css +++ /dev/null @@ -1,60 +0,0 @@ -/* - codepen.io Embed Theme - Author: Justin Perry - Original theme - https://github.com/chriskempson/tomorrow-theme -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #222; - color: #fff; -} - -.hljs-comment, -.hljs-quote { - color: #777; -} - -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-regexp, -.hljs-meta, -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-params, -.hljs-symbol, -.hljs-bullet, -.hljs-link, -.hljs-deletion { - color: #ab875d; -} - -.hljs-section, -.hljs-title, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-type, -.hljs-attribute { - color: #9b869b; -} - -.hljs-string, -.hljs-keyword, -.hljs-selector-tag, -.hljs-addition { - color: #8f9c6c; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/dark.css b/arrow-site/docs/_sass/vendors/highlight/dark.css deleted file mode 100644 index b4724f5f50d..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/dark.css +++ /dev/null @@ -1,63 +0,0 @@ -/* - -Dark style from softwaremaniacs.org (c) Ivan Sagalaev - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #444; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-section, -.hljs-link { - color: white; -} - -.hljs, -.hljs-subst { - color: #ddd; -} - -.hljs-string, -.hljs-title, -.hljs-name, -.hljs-type, -.hljs-attribute, -.hljs-symbol, -.hljs-bullet, -.hljs-built_in, -.hljs-addition, -.hljs-variable, -.hljs-template-tag, -.hljs-template-variable { - color: #d88; -} - -.hljs-comment, -.hljs-quote, -.hljs-deletion, -.hljs-meta { - color: #777; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-title, -.hljs-section, -.hljs-doctag, -.hljs-type, -.hljs-name, -.hljs-strong { - font-weight: bold; -} - -.hljs-emphasis { - font-style: italic; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/darkula.css b/arrow-site/docs/_sass/vendors/highlight/darkula.css deleted file mode 100644 index f4646c3c5dc..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/darkula.css +++ /dev/null @@ -1,6 +0,0 @@ -/* - Deprecated due to a typo in the name and left here for compatibility purpose only. - Please use darcula.css instead. -*/ - -@import url('darcula.css'); diff --git a/arrow-site/docs/_sass/vendors/highlight/docco.css b/arrow-site/docs/_sass/vendors/highlight/docco.css deleted file mode 100644 index db366be372b..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/docco.css +++ /dev/null @@ -1,97 +0,0 @@ -/* -Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars) -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #000; - background: #f8f8ff; -} - -.hljs-comment, -.hljs-quote { - color: #408080; - font-style: italic; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-subst { - color: #954121; -} - -.hljs-number { - color: #40a070; -} - -.hljs-string, -.hljs-doctag { - color: #219161; -} - -.hljs-selector-id, -.hljs-selector-class, -.hljs-section, -.hljs-type { - color: #19469d; -} - -.hljs-params { - color: #00f; -} - -.hljs-title { - color: #458; - font-weight: bold; -} - -.hljs-tag, -.hljs-name, -.hljs-attribute { - color: #000080; - font-weight: normal; -} - -.hljs-variable, -.hljs-template-variable { - color: #008080; -} - -.hljs-regexp, -.hljs-link { - color: #b68; -} - -.hljs-symbol, -.hljs-bullet { - color: #990073; -} - -.hljs-built_in, -.hljs-builtin-name { - color: #0086b3; -} - -.hljs-meta { - color: #999; - font-weight: bold; -} - -.hljs-deletion { - background: #fdd; -} - -.hljs-addition { - background: #dfd; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/dracula.css b/arrow-site/docs/_sass/vendors/highlight/dracula.css deleted file mode 100644 index d591db6801e..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/dracula.css +++ /dev/null @@ -1,76 +0,0 @@ -/* - -Dracula Theme v1.2.0 - -https://github.com/zenorocha/dracula-theme - -Copyright 2015, All rights reserved - -Code licensed under the MIT license -http://zenorocha.mit-license.org - -@author Éverton Ribeiro -@author Zeno Rocha - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #282a36; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-section, -.hljs-link { - color: #8be9fd; -} - -.hljs-function .hljs-keyword { - color: #ff79c6; -} - -.hljs, -.hljs-subst { - color: #f8f8f2; -} - -.hljs-string, -.hljs-title, -.hljs-name, -.hljs-type, -.hljs-attribute, -.hljs-symbol, -.hljs-bullet, -.hljs-addition, -.hljs-variable, -.hljs-template-tag, -.hljs-template-variable { - color: #f1fa8c; -} - -.hljs-comment, -.hljs-quote, -.hljs-deletion, -.hljs-meta { - color: #6272a4; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-title, -.hljs-section, -.hljs-doctag, -.hljs-type, -.hljs-name, -.hljs-strong { - font-weight: bold; -} - -.hljs-emphasis { - font-style: italic; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/far.css b/arrow-site/docs/_sass/vendors/highlight/far.css deleted file mode 100644 index 2b3f87b5623..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/far.css +++ /dev/null @@ -1,71 +0,0 @@ -/* - -FAR Style (c) MajestiC - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #000080; -} - -.hljs, -.hljs-subst { - color: #0ff; -} - -.hljs-string, -.hljs-attribute, -.hljs-symbol, -.hljs-bullet, -.hljs-built_in, -.hljs-builtin-name, -.hljs-template-tag, -.hljs-template-variable, -.hljs-addition { - color: #ff0; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-section, -.hljs-type, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-variable { - color: #fff; -} - -.hljs-comment, -.hljs-quote, -.hljs-doctag, -.hljs-deletion { - color: #888; -} - -.hljs-number, -.hljs-regexp, -.hljs-literal, -.hljs-link { - color: #0f0; -} - -.hljs-meta { - color: #008080; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-title, -.hljs-section, -.hljs-name, -.hljs-strong { - font-weight: bold; -} - -.hljs-emphasis { - font-style: italic; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/foundation.css b/arrow-site/docs/_sass/vendors/highlight/foundation.css deleted file mode 100644 index f1fe64b3771..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/foundation.css +++ /dev/null @@ -1,88 +0,0 @@ -/* -Description: Foundation 4 docs style for highlight.js -Author: Dan Allen -Website: http://foundation.zurb.com/docs/ -Version: 1.0 -Date: 2013-04-02 -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #eee; color: black; -} - -.hljs-link, -.hljs-emphasis, -.hljs-attribute, -.hljs-addition { - color: #070; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong, -.hljs-string, -.hljs-deletion { - color: #d14; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-quote, -.hljs-comment { - color: #998; - font-style: italic; -} - -.hljs-section, -.hljs-title { - color: #900; -} - -.hljs-class .hljs-title, -.hljs-type { - color: #458; -} - -.hljs-variable, -.hljs-template-variable { - color: #336699; -} - -.hljs-bullet { - color: #997700; -} - -.hljs-meta { - color: #3344bb; -} - -.hljs-code, -.hljs-number, -.hljs-literal, -.hljs-keyword, -.hljs-selector-tag { - color: #099; -} - -.hljs-regexp { - background-color: #fff0ff; - color: #880088; -} - -.hljs-symbol { - color: #990073; -} - -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #007700; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/github-gist.css b/arrow-site/docs/_sass/vendors/highlight/github-gist.css deleted file mode 100644 index 18240c88821..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/github-gist.css +++ /dev/null @@ -1,79 +0,0 @@ -/** - * GitHub Gist Theme - * Author : Anthony Attard - https://github.com/AnthonyAttard - * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro - */ - -.hljs { - display: block; - background: white; - padding: 0.5em; - color: #333333; - overflow-x: auto; -} - -.hljs-comment, -.hljs-meta { - color: #969896; -} - -.hljs-variable, -.hljs-template-variable, -.hljs-strong, -.hljs-emphasis, -.hljs-quote { - color: #df5000; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-type { - color: #d73a49; -} - -.hljs-literal, -.hljs-symbol, -.hljs-bullet, -.hljs-attribute { - color: #0086b3; -} - -.hljs-section, -.hljs-name { - color: #63a35c; -} - -.hljs-tag { - color: #333333; -} - -.hljs-title, -.hljs-attr, -.hljs-selector-id, -.hljs-selector-class, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #6f42c1; -} - -.hljs-addition { - color: #55a532; - background-color: #eaffea; -} - -.hljs-deletion { - color: #bd2c00; - background-color: #ffecec; -} - -.hljs-link { - text-decoration: underline; -} - -.hljs-number { - color: #005cc5; -} - -.hljs-string { - color: #032f62; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/github.css b/arrow-site/docs/_sass/vendors/highlight/github.css deleted file mode 100644 index 791932b87ea..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/github.css +++ /dev/null @@ -1,99 +0,0 @@ -/* - -github.com style (c) Vasily Polovnyov - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #333; - background: #f8f8f8; -} - -.hljs-comment, -.hljs-quote { - color: #998; - font-style: italic; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-subst { - color: #333; - font-weight: bold; -} - -.hljs-number, -.hljs-literal, -.hljs-variable, -.hljs-template-variable, -.hljs-tag .hljs-attr { - color: #008080; -} - -.hljs-string, -.hljs-doctag { - color: #d14; -} - -.hljs-title, -.hljs-section, -.hljs-selector-id { - color: #900; - font-weight: bold; -} - -.hljs-subst { - font-weight: normal; -} - -.hljs-type, -.hljs-class .hljs-title { - color: #458; - font-weight: bold; -} - -.hljs-tag, -.hljs-name, -.hljs-attribute { - color: #000080; - font-weight: normal; -} - -.hljs-regexp, -.hljs-link { - color: #009926; -} - -.hljs-symbol, -.hljs-bullet { - color: #990073; -} - -.hljs-built_in, -.hljs-builtin-name { - color: #0086b3; -} - -.hljs-meta { - color: #999; - font-weight: bold; -} - -.hljs-deletion { - background: #fdd; -} - -.hljs-addition { - background: #dfd; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/gml.css b/arrow-site/docs/_sass/vendors/highlight/gml.css deleted file mode 100644 index ffb5e474ade..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/gml.css +++ /dev/null @@ -1,78 +0,0 @@ -/* - -GML Theme - Meseta - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #222222; - color: #C0C0C0; -} - -.hljs-keywords { - color: #FFB871; - font-weight: bold; -} - -.hljs-built_in { - color: #FFB871; -} - -.hljs-literal { - color: #FF8080; -} - -.hljs-symbol { - color: #58E55A; -} - -.hljs-comment { - color: #5B995B; -} - -.hljs-string { - color: #FFFF00; -} - -.hljs-number { - color: #FF8080; -} - -.hljs-attribute, -.hljs-selector-tag, -.hljs-doctag, -.hljs-name, -.hljs-bullet, -.hljs-code, -.hljs-addition, -.hljs-regexp, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-type, -.hljs-selector-id, -.hljs-selector-class, -.hljs-quote, -.hljs-template-tag, -.hljs-deletion, -.hljs-title, -.hljs-section, -.hljs-function, -.hljs-meta-keyword, -.hljs-meta, -.hljs-subst { - color: #C0C0C0; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/googlecode.css b/arrow-site/docs/_sass/vendors/highlight/googlecode.css deleted file mode 100644 index 884ad63538e..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/googlecode.css +++ /dev/null @@ -1,89 +0,0 @@ -/* - -Google Code style (c) Aahan Krish - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: white; - color: black; -} - -.hljs-comment, -.hljs-quote { - color: #800; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-section, -.hljs-title, -.hljs-name { - color: #008; -} - -.hljs-variable, -.hljs-template-variable { - color: #660; -} - -.hljs-string, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-regexp { - color: #080; -} - -.hljs-literal, -.hljs-symbol, -.hljs-bullet, -.hljs-meta, -.hljs-number, -.hljs-link { - color: #066; -} - -.hljs-title, -.hljs-doctag, -.hljs-type, -.hljs-attr, -.hljs-built_in, -.hljs-builtin-name, -.hljs-params { - color: #606; -} - -.hljs-attribute, -.hljs-subst { - color: #000; -} - -.hljs-formula { - background-color: #eee; - font-style: italic; -} - -.hljs-selector-id, -.hljs-selector-class { - color: #9B703F -} - -.hljs-addition { - background-color: #baeeba; -} - -.hljs-deletion { - background-color: #ffc8bd; -} - -.hljs-doctag, -.hljs-strong { - font-weight: bold; -} - -.hljs-emphasis { - font-style: italic; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/grayscale.css b/arrow-site/docs/_sass/vendors/highlight/grayscale.css deleted file mode 100644 index 5376f340648..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/grayscale.css +++ /dev/null @@ -1,101 +0,0 @@ -/* - -grayscale style (c) MY Sun - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #333; - background: #fff; -} - -.hljs-comment, -.hljs-quote { - color: #777; - font-style: italic; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-subst { - color: #333; - font-weight: bold; -} - -.hljs-number, -.hljs-literal { - color: #777; -} - -.hljs-string, -.hljs-doctag, -.hljs-formula { - color: #333; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJ0lEQVQIW2O8e/fufwYGBgZBQUEQxcCIIfDu3Tuwivfv30NUoAsAALHpFMMLqZlPAAAAAElFTkSuQmCC) repeat; -} - -.hljs-title, -.hljs-section, -.hljs-selector-id { - color: #000; - font-weight: bold; -} - -.hljs-subst { - font-weight: normal; -} - -.hljs-class .hljs-title, -.hljs-type, -.hljs-name { - color: #333; - font-weight: bold; -} - -.hljs-tag { - color: #333; -} - -.hljs-regexp { - color: #333; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAAPUlEQVQYV2NkQAN37979r6yszIgujiIAU4RNMVwhuiQ6H6wQl3XI4oy4FMHcCJPHcDS6J2A2EqUQpJhohQDexSef15DBCwAAAABJRU5ErkJggg==) repeat; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-link { - color: #000; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAKElEQVQIW2NkQAO7d+/+z4gsBhJwdXVlhAvCBECKwIIwAbhKZBUwBQA6hBpm5efZsgAAAABJRU5ErkJggg==) repeat; -} - -.hljs-built_in, -.hljs-builtin-name { - color: #000; - text-decoration: underline; -} - -.hljs-meta { - color: #999; - font-weight: bold; -} - -.hljs-deletion { - color: #fff; - background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAE0lEQVQIW2MMDQ39zzhz5kwIAQAyxweWgUHd1AAAAABJRU5ErkJggg==) repeat; -} - -.hljs-addition { - color: #000; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAALUlEQVQYV2N89+7dfwYk8P79ewZBQUFkIQZGOiu6e/cuiptQHAPl0NtNxAQBAM97Oejj3Dg7AAAAAElFTkSuQmCC) repeat; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/gruvbox-dark.css b/arrow-site/docs/_sass/vendors/highlight/gruvbox-dark.css deleted file mode 100644 index f563811a862..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/gruvbox-dark.css +++ /dev/null @@ -1,108 +0,0 @@ -/* - -Gruvbox style (dark) (c) Pavel Pertsev (original style at https://github.com/morhetz/gruvbox) - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #282828; -} - -.hljs, -.hljs-subst { - color: #ebdbb2; -} - -/* Gruvbox Red */ -.hljs-deletion, -.hljs-formula, -.hljs-keyword, -.hljs-link, -.hljs-selector-tag { - color: #fb4934; -} - -/* Gruvbox Blue */ -.hljs-built_in, -.hljs-emphasis, -.hljs-name, -.hljs-quote, -.hljs-strong, -.hljs-title, -.hljs-variable { - color: #83a598; -} - -/* Gruvbox Yellow */ -.hljs-attr, -.hljs-params, -.hljs-template-tag, -.hljs-type { - color: #fabd2f; -} - -/* Gruvbox Purple */ -.hljs-builtin-name, -.hljs-doctag, -.hljs-literal, -.hljs-number { - color: #8f3f71; -} - -/* Gruvbox Orange */ -.hljs-code, -.hljs-meta, -.hljs-regexp, -.hljs-selector-id, -.hljs-template-variable { - color: #fe8019; -} - -/* Gruvbox Green */ -.hljs-addition, -.hljs-meta-string, -.hljs-section, -.hljs-selector-attr, -.hljs-selector-class, -.hljs-string, -.hljs-symbol { - color: #b8bb26; -} - -/* Gruvbox Aqua */ -.hljs-attribute, -.hljs-bullet, -.hljs-class, -.hljs-function, -.hljs-function .hljs-keyword, -.hljs-meta-keyword, -.hljs-selector-pseudo, -.hljs-tag { - color: #8ec07c; -} - -/* Gruvbox Gray */ -.hljs-comment { - color: #928374; -} - -/* Gruvbox Purple */ -.hljs-link_label, -.hljs-literal, -.hljs-number { - color: #d3869b; -} - -.hljs-comment, -.hljs-emphasis { - font-style: italic; -} - -.hljs-section, -.hljs-strong, -.hljs-tag { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/gruvbox-light.css b/arrow-site/docs/_sass/vendors/highlight/gruvbox-light.css deleted file mode 100644 index ff45468eb2e..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/gruvbox-light.css +++ /dev/null @@ -1,108 +0,0 @@ -/* - -Gruvbox style (light) (c) Pavel Pertsev (original style at https://github.com/morhetz/gruvbox) - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #fbf1c7; -} - -.hljs, -.hljs-subst { - color: #3c3836; -} - -/* Gruvbox Red */ -.hljs-deletion, -.hljs-formula, -.hljs-keyword, -.hljs-link, -.hljs-selector-tag { - color: #9d0006; -} - -/* Gruvbox Blue */ -.hljs-built_in, -.hljs-emphasis, -.hljs-name, -.hljs-quote, -.hljs-strong, -.hljs-title, -.hljs-variable { - color: #076678; -} - -/* Gruvbox Yellow */ -.hljs-attr, -.hljs-params, -.hljs-template-tag, -.hljs-type { - color: #b57614; -} - -/* Gruvbox Purple */ -.hljs-builtin-name, -.hljs-doctag, -.hljs-literal, -.hljs-number { - color: #8f3f71; -} - -/* Gruvbox Orange */ -.hljs-code, -.hljs-meta, -.hljs-regexp, -.hljs-selector-id, -.hljs-template-variable { - color: #af3a03; -} - -/* Gruvbox Green */ -.hljs-addition, -.hljs-meta-string, -.hljs-section, -.hljs-selector-attr, -.hljs-selector-class, -.hljs-string, -.hljs-symbol { - color: #79740e; -} - -/* Gruvbox Aqua */ -.hljs-attribute, -.hljs-bullet, -.hljs-class, -.hljs-function, -.hljs-function .hljs-keyword, -.hljs-meta-keyword, -.hljs-selector-pseudo, -.hljs-tag { - color: #427b58; -} - -/* Gruvbox Gray */ -.hljs-comment { - color: #928374; -} - -/* Gruvbox Purple */ -.hljs-link_label, -.hljs-literal, -.hljs-number { - color: #8f3f71; -} - -.hljs-comment, -.hljs-emphasis { - font-style: italic; -} - -.hljs-section, -.hljs-strong, -.hljs-tag { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/hopscotch.css b/arrow-site/docs/_sass/vendors/highlight/hopscotch.css deleted file mode 100644 index 32e60d230a5..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/hopscotch.css +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Hopscotch - * by Jan T. Sott - * https://github.com/idleberg/Hopscotch - * - * This work is licensed under the Creative Commons CC0 1.0 Universal License - */ - -/* Comment */ -.hljs-comment, -.hljs-quote { - color: #989498; -} - -/* Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-attribute, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-link, -.hljs-deletion { - color: #dd464c; -} - -/* Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params { - color: #fd8b19; -} - -/* Yellow */ -.hljs-class .hljs-title { - color: #fdcc59; -} - -/* Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #8fc13e; -} - -/* Aqua */ -.hljs-meta { - color: #149b93; -} - -/* Blue */ -.hljs-function, -.hljs-section, -.hljs-title { - color: #1290bf; -} - -/* Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #c85e7c; -} - -.hljs { - display: block; - background: #322931; - color: #b9b5b8; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/hybrid.css b/arrow-site/docs/_sass/vendors/highlight/hybrid.css deleted file mode 100644 index 29735a18904..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/hybrid.css +++ /dev/null @@ -1,102 +0,0 @@ -/* - -vim-hybrid theme by w0ng (https://github.com/w0ng/vim-hybrid) - -*/ - -/*background color*/ -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #1d1f21; -} - -/*selection color*/ -.hljs::selection, -.hljs span::selection { - background: #373b41; -} - -.hljs::-moz-selection, -.hljs span::-moz-selection { - background: #373b41; -} - -/*foreground color*/ -.hljs { - color: #c5c8c6; -} - -/*color: fg_yellow*/ -.hljs-title, -.hljs-name { - color: #f0c674; -} - -/*color: fg_comment*/ -.hljs-comment, -.hljs-meta, -.hljs-meta .hljs-keyword { - color: #707880; -} - -/*color: fg_red*/ -.hljs-number, -.hljs-symbol, -.hljs-literal, -.hljs-deletion, -.hljs-link { - color: #cc6666 -} - -/*color: fg_green*/ -.hljs-string, -.hljs-doctag, -.hljs-addition, -.hljs-regexp, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #b5bd68; -} - -/*color: fg_purple*/ -.hljs-attribute, -.hljs-code, -.hljs-selector-id { - color: #b294bb; -} - -/*color: fg_blue*/ -.hljs-keyword, -.hljs-selector-tag, -.hljs-bullet, -.hljs-tag { - color: #81a2be; -} - -/*color: fg_aqua*/ -.hljs-subst, -.hljs-variable, -.hljs-template-tag, -.hljs-template-variable { - color: #8abeb7; -} - -/*color: fg_orange*/ -.hljs-type, -.hljs-built_in, -.hljs-builtin-name, -.hljs-quote, -.hljs-section, -.hljs-selector-class { - color: #de935f; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/idea.css b/arrow-site/docs/_sass/vendors/highlight/idea.css deleted file mode 100644 index 3bf1892bd4a..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/idea.css +++ /dev/null @@ -1,97 +0,0 @@ -/* - -Intellij Idea-like styling (c) Vasily Polovnyov - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #000; - background: #fff; -} - -.hljs-subst, -.hljs-title { - font-weight: normal; - color: #000; -} - -.hljs-comment, -.hljs-quote { - color: #808080; - font-style: italic; -} - -.hljs-meta { - color: #808000; -} - -.hljs-tag { - background: #efefef; -} - -.hljs-section, -.hljs-name, -.hljs-literal, -.hljs-keyword, -.hljs-selector-tag, -.hljs-type, -.hljs-selector-id, -.hljs-selector-class { - font-weight: bold; - color: #000080; -} - -.hljs-attribute, -.hljs-number, -.hljs-regexp, -.hljs-link { - font-weight: bold; - color: #0000ff; -} - -.hljs-number, -.hljs-regexp, -.hljs-link { - font-weight: normal; -} - -.hljs-string { - color: #008000; - font-weight: bold; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-formula { - color: #000; - background: #d0eded; - font-style: italic; -} - -.hljs-doctag { - text-decoration: underline; -} - -.hljs-variable, -.hljs-template-variable { - color: #660e7a; -} - -.hljs-addition { - background: #baeeba; -} - -.hljs-deletion { - background: #ffc8bd; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/ir-black.css b/arrow-site/docs/_sass/vendors/highlight/ir-black.css deleted file mode 100644 index bd4c755ed8a..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/ir-black.css +++ /dev/null @@ -1,73 +0,0 @@ -/* - IR_Black style (c) Vasily Mikhailitchenko -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #000; - color: #f8f8f8; -} - -.hljs-comment, -.hljs-quote, -.hljs-meta { - color: #7c7c7c; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-tag, -.hljs-name { - color: #96cbfe; -} - -.hljs-attribute, -.hljs-selector-id { - color: #ffffb6; -} - -.hljs-string, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-addition { - color: #a8ff60; -} - -.hljs-subst { - color: #daefa3; -} - -.hljs-regexp, -.hljs-link { - color: #e9c062; -} - -.hljs-title, -.hljs-section, -.hljs-type, -.hljs-doctag { - color: #ffffb6; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-variable, -.hljs-template-variable, -.hljs-literal { - color: #c6c5fe; -} - -.hljs-number, -.hljs-deletion { - color:#ff73fd; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/isbl-editor-dark.css b/arrow-site/docs/_sass/vendors/highlight/isbl-editor-dark.css deleted file mode 100644 index 2f1d95dd502..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/isbl-editor-dark.css +++ /dev/null @@ -1,112 +0,0 @@ -/* - -ISBL Editor style dark color scheme (c) Dmitriy Tarasov - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #404040; - color: #f0f0f0; -} - -/* Base color: saturation 0; */ - -.hljs, -.hljs-subst { - color: #f0f0f0; -} - -.hljs-comment { - color: #b5b5b5; - font-style: italic; -} - -.hljs-keyword, -.hljs-attribute, -.hljs-selector-tag, -.hljs-meta-keyword, -.hljs-doctag, -.hljs-name { - color: #f0f0f0; - font-weight: bold; -} - - -/* User color: hue: 0 */ - -.hljs-string { - color: #97bf0d; -} - -.hljs-type, -.hljs-number, -.hljs-selector-id, -.hljs-selector-class, -.hljs-quote, -.hljs-template-tag, -.hljs-deletion { - color: #f0f0f0; -} - -.hljs-title, -.hljs-section { - color: #df471e; -} - -.hljs-title>.hljs-built_in { - color: #81bce9; - font-weight: normal; -} - -.hljs-regexp, -.hljs-symbol, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #e2c696; -} - -/* Language color: hue: 90; */ - -.hljs-built_in, -.hljs-literal { - color: #97bf0d; - font-weight: bold; -} - -.hljs-bullet, -.hljs-code, -.hljs-addition { - color: #397300; -} - -.hljs-class { - color: #ce9d4d; - font-weight: bold; -} - -/* Meta color: hue: 200 */ - -.hljs-meta { - color: #1f7199; -} - -.hljs-meta-string { - color: #4d99bf; -} - - -/* Misc effects */ - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/isbl-editor-light.css b/arrow-site/docs/_sass/vendors/highlight/isbl-editor-light.css deleted file mode 100644 index 633070dcff6..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/isbl-editor-light.css +++ /dev/null @@ -1,112 +0,0 @@ -/* - -ISBL Editor style light color schemec (c) Dmitriy Tarasov - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: white; - color: black; -} - -/* Base color: saturation 0; */ - -.hljs, -.hljs-subst { - color: #000000; -} - -.hljs-comment { - color: #555555; - font-style: italic; -} - -.hljs-keyword, -.hljs-attribute, -.hljs-selector-tag, -.hljs-meta-keyword, -.hljs-doctag, -.hljs-name { - color: #000000; - font-weight: bold; -} - - -/* User color: hue: 0 */ - -.hljs-string { - color: #000080; -} - -.hljs-type, -.hljs-number, -.hljs-selector-id, -.hljs-selector-class, -.hljs-quote, -.hljs-template-tag, -.hljs-deletion { - color: #000000; -} - -.hljs-title, -.hljs-section { - color: #fb2c00; -} - -.hljs-title>.hljs-built_in { - color: #008080; - font-weight: normal; -} - -.hljs-regexp, -.hljs-symbol, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #5e1700; -} - -/* Language color: hue: 90; */ - -.hljs-built_in, -.hljs-literal { - color: #000080; - font-weight: bold; -} - -.hljs-bullet, -.hljs-code, -.hljs-addition { - color: #397300; -} - -.hljs-class { - color: #6f1C00; - font-weight: bold; -} - -/* Meta color: hue: 200 */ - -.hljs-meta { - color: #1f7199; -} - -.hljs-meta-string { - color: #4d99bf; -} - - -/* Misc effects */ - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/kimbie.dark.css b/arrow-site/docs/_sass/vendors/highlight/kimbie.dark.css deleted file mode 100644 index d139cb5d0c9..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/kimbie.dark.css +++ /dev/null @@ -1,74 +0,0 @@ -/* - Name: Kimbie (dark) - Author: Jan T. Sott - License: Creative Commons Attribution-ShareAlike 4.0 Unported License - URL: https://github.com/idleberg/Kimbie-highlight.js -*/ - -/* Kimbie Comment */ -.hljs-comment, -.hljs-quote { - color: #d6baad; -} - -/* Kimbie Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-meta { - color: #dc3958; -} - -/* Kimbie Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-deletion, -.hljs-link { - color: #f79a32; -} - -/* Kimbie Yellow */ -.hljs-title, -.hljs-section, -.hljs-attribute { - color: #f06431; -} - -/* Kimbie Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #889b4a; -} - -/* Kimbie Purple */ -.hljs-keyword, -.hljs-selector-tag, -.hljs-function { - color: #98676a; -} - -.hljs { - display: block; - overflow-x: auto; - background: #221a0f; - color: #d3af86; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/kimbie.light.css b/arrow-site/docs/_sass/vendors/highlight/kimbie.light.css deleted file mode 100644 index 04ff6ed3a2d..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/kimbie.light.css +++ /dev/null @@ -1,74 +0,0 @@ -/* - Name: Kimbie (light) - Author: Jan T. Sott - License: Creative Commons Attribution-ShareAlike 4.0 Unported License - URL: https://github.com/idleberg/Kimbie-highlight.js -*/ - -/* Kimbie Comment */ -.hljs-comment, -.hljs-quote { - color: #a57a4c; -} - -/* Kimbie Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-meta { - color: #dc3958; -} - -/* Kimbie Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-deletion, -.hljs-link { - color: #f79a32; -} - -/* Kimbie Yellow */ -.hljs-title, -.hljs-section, -.hljs-attribute { - color: #f06431; -} - -/* Kimbie Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #889b4a; -} - -/* Kimbie Purple */ -.hljs-keyword, -.hljs-selector-tag, -.hljs-function { - color: #98676a; -} - -.hljs { - display: block; - overflow-x: auto; - background: #fbebd4; - color: #84613d; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/lightfair.css b/arrow-site/docs/_sass/vendors/highlight/lightfair.css deleted file mode 100644 index a247c8eb5d0..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/lightfair.css +++ /dev/null @@ -1,87 +0,0 @@ -/* - -Lightfair style (c) Tristian Kelly - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; -} - -.hljs-name { - color:#01a3a3; -} - -.hljs-tag,.hljs-meta { - color:#778899; -} - -.hljs, -.hljs-subst { - color: #444 -} - -.hljs-comment { - color: #888888 -} - -.hljs-keyword, -.hljs-attribute, -.hljs-selector-tag, -.hljs-meta-keyword, -.hljs-doctag, -.hljs-name { - font-weight: bold -} - -.hljs-type, -.hljs-string, -.hljs-number, -.hljs-selector-id, -.hljs-selector-class, -.hljs-quote, -.hljs-template-tag, -.hljs-deletion { - color: #4286f4 -} - -.hljs-title, -.hljs-section { - color: #4286f4; - font-weight: bold -} - -.hljs-regexp, -.hljs-symbol, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #BC6060 -} - -.hljs-literal { - color: #62bcbc -} - -.hljs-built_in, -.hljs-bullet, -.hljs-code, -.hljs-addition { - color: #25c6c6 -} - -.hljs-meta-string { - color: #4d99bf -} - -.hljs-emphasis { - font-style: italic -} - -.hljs-strong { - font-weight: bold -} diff --git a/arrow-site/docs/_sass/vendors/highlight/magula.css b/arrow-site/docs/_sass/vendors/highlight/magula.css deleted file mode 100644 index 44dee5e8e10..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/magula.css +++ /dev/null @@ -1,70 +0,0 @@ -/* -Description: Magula style for highligh.js -Author: Ruslan Keba -Website: http://rukeba.com/ -Version: 1.0 -Date: 2009-01-03 -Music: Aphex Twin / Xtal -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background-color: #f4f4f4; -} - -.hljs, -.hljs-subst { - color: black; -} - -.hljs-string, -.hljs-title, -.hljs-symbol, -.hljs-bullet, -.hljs-attribute, -.hljs-addition, -.hljs-variable, -.hljs-template-tag, -.hljs-template-variable { - color: #050; -} - -.hljs-comment, -.hljs-quote { - color: #777; -} - -.hljs-number, -.hljs-regexp, -.hljs-literal, -.hljs-type, -.hljs-link { - color: #800; -} - -.hljs-deletion, -.hljs-meta { - color: #00e; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-doctag, -.hljs-title, -.hljs-section, -.hljs-built_in, -.hljs-tag, -.hljs-name { - font-weight: bold; - color: navy; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/mono-blue.css b/arrow-site/docs/_sass/vendors/highlight/mono-blue.css deleted file mode 100644 index 884c97c7673..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/mono-blue.css +++ /dev/null @@ -1,59 +0,0 @@ -/* - Five-color theme from a single blue hue. -*/ -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #eaeef3; -} - -.hljs { - color: #00193a; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-title, -.hljs-section, -.hljs-doctag, -.hljs-name, -.hljs-strong { - font-weight: bold; -} - -.hljs-comment { - color: #738191; -} - -.hljs-string, -.hljs-title, -.hljs-section, -.hljs-built_in, -.hljs-literal, -.hljs-type, -.hljs-addition, -.hljs-tag, -.hljs-quote, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #0048ab; -} - -.hljs-meta, -.hljs-subst, -.hljs-symbol, -.hljs-regexp, -.hljs-attribute, -.hljs-deletion, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-bullet { - color: #4c81c9; -} - -.hljs-emphasis { - font-style: italic; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/monokai-sublime.css b/arrow-site/docs/_sass/vendors/highlight/monokai-sublime.css deleted file mode 100644 index 2864170daf6..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/monokai-sublime.css +++ /dev/null @@ -1,83 +0,0 @@ -/* - -Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/ - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #23241f; -} - -.hljs, -.hljs-tag, -.hljs-subst { - color: #f8f8f2; -} - -.hljs-strong, -.hljs-emphasis { - color: #a8a8a2; -} - -.hljs-bullet, -.hljs-quote, -.hljs-number, -.hljs-regexp, -.hljs-literal, -.hljs-link { - color: #ae81ff; -} - -.hljs-code, -.hljs-title, -.hljs-section, -.hljs-selector-class { - color: #a6e22e; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-name, -.hljs-attr { - color: #f92672; -} - -.hljs-symbol, -.hljs-attribute { - color: #66d9ef; -} - -.hljs-params, -.hljs-class .hljs-title { - color: #f8f8f2; -} - -.hljs-string, -.hljs-type, -.hljs-built_in, -.hljs-builtin-name, -.hljs-selector-id, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-addition, -.hljs-variable, -.hljs-template-variable { - color: #e6db74; -} - -.hljs-comment, -.hljs-deletion, -.hljs-meta { - color: #75715e; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/monokai.css b/arrow-site/docs/_sass/vendors/highlight/monokai.css deleted file mode 100644 index 775d53f91aa..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/monokai.css +++ /dev/null @@ -1,70 +0,0 @@ -/* -Monokai style - ported by Luigi Maselli - http://grigio.org -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #272822; color: #ddd; -} - -.hljs-tag, -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-strong, -.hljs-name { - color: #f92672; -} - -.hljs-code { - color: #66d9ef; -} - -.hljs-class .hljs-title { - color: white; -} - -.hljs-attribute, -.hljs-symbol, -.hljs-regexp, -.hljs-link { - color: #bf79db; -} - -.hljs-string, -.hljs-bullet, -.hljs-subst, -.hljs-title, -.hljs-section, -.hljs-emphasis, -.hljs-type, -.hljs-built_in, -.hljs-builtin-name, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-addition, -.hljs-variable, -.hljs-template-tag, -.hljs-template-variable { - color: #a6e22e; -} - -.hljs-comment, -.hljs-quote, -.hljs-deletion, -.hljs-meta { - color: #75715e; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-doctag, -.hljs-title, -.hljs-section, -.hljs-type, -.hljs-selector-id { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/nord.css b/arrow-site/docs/_sass/vendors/highlight/nord.css deleted file mode 100644 index 424038443aa..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/nord.css +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Copyright (c) 2017-present Arctic Ice Studio - * Copyright (c) 2017-present Sven Greb - * - * Project: Nord highlight.js - * Version: 0.1.0 - * Repository: https://github.com/arcticicestudio/nord-highlightjs - * License: MIT - * References: - * https://github.com/arcticicestudio/nord - */ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #2E3440; -} - -.hljs, -.hljs-subst { - color: #D8DEE9; -} - -.hljs-selector-tag { - color: #81A1C1; -} - -.hljs-selector-id { - color: #8FBCBB; - font-weight: bold; -} - -.hljs-selector-class { - color: #8FBCBB; -} - -.hljs-selector-attr { - color: #8FBCBB; -} - -.hljs-selector-pseudo { - color: #88C0D0; -} - -.hljs-addition { - background-color: rgba(163, 190, 140, 0.5); -} - -.hljs-deletion { - background-color: rgba(191, 97, 106, 0.5); -} - -.hljs-built_in, -.hljs-type { - color: #8FBCBB; -} - -.hljs-class { - color: #8FBCBB; -} - -.hljs-function { - color: #88C0D0; -} - -.hljs-function > .hljs-title { - color: #88C0D0; -} - -.hljs-keyword, -.hljs-literal, -.hljs-symbol { - color: #81A1C1; -} - -.hljs-number { - color: #B48EAD; -} - -.hljs-regexp { - color: #EBCB8B; -} - -.hljs-string { - color: #A3BE8C; -} - -.hljs-title { - color: #8FBCBB; -} - -.hljs-params { - color: #D8DEE9; -} - -.hljs-bullet { - color: #81A1C1; -} - -.hljs-code { - color: #8FBCBB; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-formula { - color: #8FBCBB; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-link:hover { - text-decoration: underline; -} - -.hljs-quote { - color: #4C566A; -} - -.hljs-comment { - color: #4C566A; -} - -.hljs-doctag { - color: #8FBCBB; -} - -.hljs-meta, -.hljs-meta-keyword { - color: #5E81AC; -} - -.hljs-meta-string { - color: #A3BE8C; -} - -.hljs-attr { - color: #8FBCBB; -} - -.hljs-attribute { - color: #D8DEE9; -} - -.hljs-builtin-name { - color: #81A1C1; -} - -.hljs-name { - color: #81A1C1; -} - -.hljs-section { - color: #88C0D0; -} - -.hljs-tag { - color: #81A1C1; -} - -.hljs-variable { - color: #D8DEE9; -} - -.hljs-template-variable { - color: #D8DEE9; -} - -.hljs-template-tag { - color: #5E81AC; -} - -.abnf .hljs-attribute { - color: #88C0D0; -} - -.abnf .hljs-symbol { - color: #EBCB8B; -} - -.apache .hljs-attribute { - color: #88C0D0; -} - -.apache .hljs-section { - color: #81A1C1; -} - -.arduino .hljs-built_in { - color: #88C0D0; -} - -.aspectj .hljs-meta { - color: #D08770; -} - -.aspectj > .hljs-title { - color: #88C0D0; -} - -.bnf .hljs-attribute { - color: #8FBCBB; -} - -.clojure .hljs-name { - color: #88C0D0; -} - -.clojure .hljs-symbol { - color: #EBCB8B; -} - -.coq .hljs-built_in { - color: #88C0D0; -} - -.cpp .hljs-meta-string { - color: #8FBCBB; -} - -.css .hljs-built_in { - color: #88C0D0; -} - -.css .hljs-keyword { - color: #D08770; -} - -.diff .hljs-meta { - color: #8FBCBB; -} - -.ebnf .hljs-attribute { - color: #8FBCBB; -} - -.glsl .hljs-built_in { - color: #88C0D0; -} - -.groovy .hljs-meta:not(:first-child) { - color: #D08770; -} - -.haxe .hljs-meta { - color: #D08770; -} - -.java .hljs-meta { - color: #D08770; -} - -.ldif .hljs-attribute { - color: #8FBCBB; -} - -.lisp .hljs-name { - color: #88C0D0; -} - -.lua .hljs-built_in { - color: #88C0D0; -} - -.moonscript .hljs-built_in { - color: #88C0D0; -} - -.nginx .hljs-attribute { - color: #88C0D0; -} - -.nginx .hljs-section { - color: #5E81AC; -} - -.pf .hljs-built_in { - color: #88C0D0; -} - -.processing .hljs-built_in { - color: #88C0D0; -} - -.scss .hljs-keyword { - color: #81A1C1; -} - -.stylus .hljs-keyword { - color: #81A1C1; -} - -.swift .hljs-meta { - color: #D08770; -} - -.vim .hljs-built_in { - color: #88C0D0; - font-style: italic; -} - -.yaml .hljs-meta { - color: #D08770; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/obsidian.css b/arrow-site/docs/_sass/vendors/highlight/obsidian.css deleted file mode 100644 index 356630fa234..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/obsidian.css +++ /dev/null @@ -1,88 +0,0 @@ -/** - * Obsidian style - * ported by Alexander Marenin (http://github.com/ioncreature) - */ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #282b2e; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-selector-id { - color: #93c763; -} - -.hljs-number { - color: #ffcd22; -} - -.hljs { - color: #e0e2e4; -} - -.hljs-attribute { - color: #668bb0; -} - -.hljs-code, -.hljs-class .hljs-title, -.hljs-section { - color: white; -} - -.hljs-regexp, -.hljs-link { - color: #d39745; -} - -.hljs-meta { - color: #557182; -} - -.hljs-tag, -.hljs-name, -.hljs-bullet, -.hljs-subst, -.hljs-emphasis, -.hljs-type, -.hljs-built_in, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-addition, -.hljs-variable, -.hljs-template-tag, -.hljs-template-variable { - color: #8cbbad; -} - -.hljs-string, -.hljs-symbol { - color: #ec7600; -} - -.hljs-comment, -.hljs-quote, -.hljs-deletion { - color: #818e96; -} - -.hljs-selector-class { - color: #A082BD -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-doctag, -.hljs-title, -.hljs-section, -.hljs-type, -.hljs-name, -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/ocean.css b/arrow-site/docs/_sass/vendors/highlight/ocean.css deleted file mode 100644 index 5901581b40a..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/ocean.css +++ /dev/null @@ -1,74 +0,0 @@ -/* Ocean Dark Theme */ -/* https://github.com/gavsiu */ -/* Original theme - https://github.com/chriskempson/base16 */ - -/* Ocean Comment */ -.hljs-comment, -.hljs-quote { - color: #65737e; -} - -/* Ocean Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-deletion { - color: #bf616a; -} - -/* Ocean Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-meta, -.hljs-link { - color: #d08770; -} - -/* Ocean Yellow */ -.hljs-attribute { - color: #ebcb8b; -} - -/* Ocean Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #a3be8c; -} - -/* Ocean Blue */ -.hljs-title, -.hljs-section { - color: #8fa1b3; -} - -/* Ocean Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #b48ead; -} - -.hljs { - display: block; - overflow-x: auto; - background: #2b303b; - color: #c0c5ce; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/paraiso-dark.css b/arrow-site/docs/_sass/vendors/highlight/paraiso-dark.css deleted file mode 100644 index e7292401c6e..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/paraiso-dark.css +++ /dev/null @@ -1,72 +0,0 @@ -/* - Paraíso (dark) - Created by Jan T. Sott (http://github.com/idleberg) - Inspired by the art of Rubens LP (http://www.rubenslp.com.br) -*/ - -/* Paraíso Comment */ -.hljs-comment, -.hljs-quote { - color: #8d8687; -} - -/* Paraíso Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-link, -.hljs-meta { - color: #ef6155; -} - -/* Paraíso Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-deletion { - color: #f99b15; -} - -/* Paraíso Yellow */ -.hljs-title, -.hljs-section, -.hljs-attribute { - color: #fec418; -} - -/* Paraíso Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #48b685; -} - -/* Paraíso Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #815ba4; -} - -.hljs { - display: block; - overflow-x: auto; - background: #2f1e2e; - color: #a39e9b; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/paraiso-light.css b/arrow-site/docs/_sass/vendors/highlight/paraiso-light.css deleted file mode 100644 index 944857cd8d3..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/paraiso-light.css +++ /dev/null @@ -1,72 +0,0 @@ -/* - Paraíso (light) - Created by Jan T. Sott (http://github.com/idleberg) - Inspired by the art of Rubens LP (http://www.rubenslp.com.br) -*/ - -/* Paraíso Comment */ -.hljs-comment, -.hljs-quote { - color: #776e71; -} - -/* Paraíso Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-link, -.hljs-meta { - color: #ef6155; -} - -/* Paraíso Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-deletion { - color: #f99b15; -} - -/* Paraíso Yellow */ -.hljs-title, -.hljs-section, -.hljs-attribute { - color: #fec418; -} - -/* Paraíso Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #48b685; -} - -/* Paraíso Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #815ba4; -} - -.hljs { - display: block; - overflow-x: auto; - background: #e7e9db; - color: #4f424c; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/pojoaque.css b/arrow-site/docs/_sass/vendors/highlight/pojoaque.css deleted file mode 100644 index 2e07847b2b2..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/pojoaque.css +++ /dev/null @@ -1,83 +0,0 @@ -/* - -Pojoaque Style by Jason Tate -http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html -Based on Solarized Style from http://ethanschoonover.com/solarized - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #dccf8f; - background: url(./pojoaque.jpg) repeat scroll left top #181914; -} - -.hljs-comment, -.hljs-quote { - color: #586e75; - font-style: italic; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-addition { - color: #b64926; -} - -.hljs-number, -.hljs-string, -.hljs-doctag, -.hljs-regexp { - color: #468966; -} - -.hljs-title, -.hljs-section, -.hljs-built_in, -.hljs-name { - color: #ffb03b; -} - -.hljs-variable, -.hljs-template-variable, -.hljs-class .hljs-title, -.hljs-type, -.hljs-tag { - color: #b58900; -} - -.hljs-attribute { - color: #b89859; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-link, -.hljs-subst, -.hljs-meta { - color: #cb4b16; -} - -.hljs-deletion { - color: #dc322f; -} - -.hljs-selector-id, -.hljs-selector-class { - color: #d3a60c; -} - -.hljs-formula { - background: #073642; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/pojoaque.jpg b/arrow-site/docs/_sass/vendors/highlight/pojoaque.jpg deleted file mode 100644 index 9c07d4ab40b..00000000000 Binary files a/arrow-site/docs/_sass/vendors/highlight/pojoaque.jpg and /dev/null differ diff --git a/arrow-site/docs/_sass/vendors/highlight/purebasic.css b/arrow-site/docs/_sass/vendors/highlight/purebasic.css deleted file mode 100644 index 5ce9b9e0710..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/purebasic.css +++ /dev/null @@ -1,96 +0,0 @@ -/* - -PureBASIC native IDE style ( version 1.0 - April 2016 ) - -by Tristano Ajmone - -Public Domain - -NOTE_1: PureBASIC code syntax highlighting only applies the following classes: - .hljs-comment - .hljs-function - .hljs-keywords - .hljs-string - .hljs-symbol - - Other classes are added here for the benefit of styling other languages with the look and feel of PureBASIC native IDE style. - If you need to customize a stylesheet for PureBASIC only, remove all non-relevant classes -- PureBASIC-related classes are followed by - a "--- used for PureBASIC ... ---" comment on same line. - -NOTE_2: Color names provided in comments were derived using "Name that Color" online tool: - http://chir.ag/projects/name-that-color -*/ - -.hljs { /* Common set of rules required by highlight.js (don'r remove!) */ - display: block; - overflow-x: auto; - padding: 0.5em; - background: #FFFFDF; /* Half and Half (approx.) */ -/* --- Uncomment to add PureBASIC native IDE styled font! - font-family: Consolas; -*/ -} - -.hljs, /* --- used for PureBASIC base color --- */ -.hljs-type, /* --- used for PureBASIC Procedures return type --- */ -.hljs-function, /* --- used for wrapping PureBASIC Procedures definitions --- */ -.hljs-name, -.hljs-number, -.hljs-attr, -.hljs-params, -.hljs-subst { - color: #000000; /* Black */ -} - -.hljs-comment, /* --- used for PureBASIC Comments --- */ -.hljs-regexp, -.hljs-section, -.hljs-selector-pseudo, -.hljs-addition { - color: #00AAAA; /* Persian Green (approx.) */ -} - -.hljs-title, /* --- used for PureBASIC Procedures Names --- */ -.hljs-tag, -.hljs-variable, -.hljs-code { - color: #006666; /* Blue Stone (approx.) */ -} - -.hljs-keyword, /* --- used for PureBASIC Keywords --- */ -.hljs-class, -.hljs-meta-keyword, -.hljs-selector-class, -.hljs-built_in, -.hljs-builtin-name { - color: #006666; /* Blue Stone (approx.) */ - font-weight: bold; -} - -.hljs-string, /* --- used for PureBASIC Strings --- */ -.hljs-selector-attr { - color: #0080FF; /* Azure Radiance (approx.) */ -} - -.hljs-symbol, /* --- used for PureBASIC Constants --- */ -.hljs-link, -.hljs-deletion, -.hljs-attribute { - color: #924B72; /* Cannon Pink (approx.) */ -} - -.hljs-meta, -.hljs-literal, -.hljs-selector-id { - color: #924B72; /* Cannon Pink (approx.) */ - font-weight: bold; -} - -.hljs-strong, -.hljs-name { - font-weight: bold; -} - -.hljs-emphasis { - font-style: italic; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/qtcreator_dark.css b/arrow-site/docs/_sass/vendors/highlight/qtcreator_dark.css deleted file mode 100644 index 7aa56a3655f..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/qtcreator_dark.css +++ /dev/null @@ -1,83 +0,0 @@ -/* - -Qt Creator dark color scheme - -*/ - - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #000000; -} - -.hljs, -.hljs-subst, -.hljs-tag, -.hljs-title { - color: #aaaaaa; -} - -.hljs-strong, -.hljs-emphasis { - color: #a8a8a2; -} - -.hljs-bullet, -.hljs-quote, -.hljs-number, -.hljs-regexp, -.hljs-literal { - color: #ff55ff; -} - -.hljs-code -.hljs-selector-class { - color: #aaaaff; -} - -.hljs-emphasis, -.hljs-stronge, -.hljs-type { - font-style: italic; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-function, -.hljs-section, -.hljs-symbol, -.hljs-name { - color: #ffff55; -} - -.hljs-attribute { - color: #ff5555; -} - -.hljs-variable, -.hljs-params, -.hljs-class .hljs-title { - color: #8888ff; -} - -.hljs-string, -.hljs-selector-id, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-type, -.hljs-built_in, -.hljs-builtin-name, -.hljs-template-tag, -.hljs-template-variable, -.hljs-addition, -.hljs-link { - color: #ff55ff; -} - -.hljs-comment, -.hljs-meta, -.hljs-deletion { - color: #55ffff; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/qtcreator_light.css b/arrow-site/docs/_sass/vendors/highlight/qtcreator_light.css deleted file mode 100644 index 1efa2c660f0..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/qtcreator_light.css +++ /dev/null @@ -1,83 +0,0 @@ -/* - -Qt Creator light color scheme - -*/ - - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #ffffff; -} - -.hljs, -.hljs-subst, -.hljs-tag, -.hljs-title { - color: #000000; -} - -.hljs-strong, -.hljs-emphasis { - color: #000000; -} - -.hljs-bullet, -.hljs-quote, -.hljs-number, -.hljs-regexp, -.hljs-literal { - color: #000080; -} - -.hljs-code -.hljs-selector-class { - color: #800080; -} - -.hljs-emphasis, -.hljs-stronge, -.hljs-type { - font-style: italic; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-function, -.hljs-section, -.hljs-symbol, -.hljs-name { - color: #808000; -} - -.hljs-attribute { - color: #800000; -} - -.hljs-variable, -.hljs-params, -.hljs-class .hljs-title { - color: #0055AF; -} - -.hljs-string, -.hljs-selector-id, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-type, -.hljs-built_in, -.hljs-builtin-name, -.hljs-template-tag, -.hljs-template-variable, -.hljs-addition, -.hljs-link { - color: #008000; -} - -.hljs-comment, -.hljs-meta, -.hljs-deletion { - color: #008000; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/railscasts.css b/arrow-site/docs/_sass/vendors/highlight/railscasts.css deleted file mode 100644 index 008cdc5bf14..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/railscasts.css +++ /dev/null @@ -1,106 +0,0 @@ -/* - -Railscasts-like style (c) Visoft, Inc. (Damien White) - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #232323; - color: #e6e1dc; -} - -.hljs-comment, -.hljs-quote { - color: #bc9458; - font-style: italic; -} - -.hljs-keyword, -.hljs-selector-tag { - color: #c26230; -} - -.hljs-string, -.hljs-number, -.hljs-regexp, -.hljs-variable, -.hljs-template-variable { - color: #a5c261; -} - -.hljs-subst { - color: #519f50; -} - -.hljs-tag, -.hljs-name { - color: #e8bf6a; -} - -.hljs-type { - color: #da4939; -} - - -.hljs-symbol, -.hljs-bullet, -.hljs-built_in, -.hljs-builtin-name, -.hljs-attr, -.hljs-link { - color: #6d9cbe; -} - -.hljs-params { - color: #d0d0ff; -} - -.hljs-attribute { - color: #cda869; -} - -.hljs-meta { - color: #9b859d; -} - -.hljs-title, -.hljs-section { - color: #ffc66d; -} - -.hljs-addition { - background-color: #144212; - color: #e6e1dc; - display: inline-block; - width: 100%; -} - -.hljs-deletion { - background-color: #600; - color: #e6e1dc; - display: inline-block; - width: 100%; -} - -.hljs-selector-class { - color: #9b703f; -} - -.hljs-selector-id { - color: #8b98ab; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-link { - text-decoration: underline; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/rainbow.css b/arrow-site/docs/_sass/vendors/highlight/rainbow.css deleted file mode 100644 index 905eb8ef187..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/rainbow.css +++ /dev/null @@ -1,85 +0,0 @@ -/* - -Style with support for rainbow parens - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #474949; - color: #d1d9e1; -} - - -.hljs-comment, -.hljs-quote { - color: #969896; - font-style: italic; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-type, -.hljs-addition { - color: #cc99cc; -} - -.hljs-number, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #f99157; -} - -.hljs-string, -.hljs-doctag, -.hljs-regexp { - color: #8abeb7; -} - -.hljs-title, -.hljs-name, -.hljs-section, -.hljs-built_in { - color: #b5bd68; -} - -.hljs-variable, -.hljs-template-variable, -.hljs-selector-id, -.hljs-class .hljs-title { - color: #ffcc66; -} - -.hljs-section, -.hljs-name, -.hljs-strong { - font-weight: bold; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-subst, -.hljs-meta, -.hljs-link { - color: #f99157; -} - -.hljs-deletion { - color: #dc322f; -} - -.hljs-formula { - background: #eee8d5; -} - -.hljs-attr, -.hljs-attribute { - color: #81a2be; -} - -.hljs-emphasis { - font-style: italic; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/routeros.css b/arrow-site/docs/_sass/vendors/highlight/routeros.css deleted file mode 100644 index ebe23990daa..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/routeros.css +++ /dev/null @@ -1,108 +0,0 @@ -/* - - highlight.js style for Microtik RouterOS script - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #F0F0F0; -} - -/* Base color: saturation 0; */ - -.hljs, -.hljs-subst { - color: #444; -} - -.hljs-comment { - color: #888888; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-meta-keyword, -.hljs-doctag, -.hljs-name { - font-weight: bold; -} - -.hljs-attribute { - color: #0E9A00; -} - -.hljs-function { - color: #99069A; -} - -.hljs-builtin-name { - color: #99069A; -} - -/* User color: hue: 0 */ - -.hljs-type, -.hljs-string, -.hljs-number, -.hljs-selector-id, -.hljs-selector-class, -.hljs-quote, -.hljs-template-tag, -.hljs-deletion { - color: #880000; -} - -.hljs-title, -.hljs-section { - color: #880000; - font-weight: bold; -} - -.hljs-regexp, -.hljs-symbol, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #BC6060; -} - - -/* Language color: hue: 90; */ - -.hljs-literal { - color: #78A960; -} - -.hljs-built_in, -.hljs-bullet, -.hljs-code, -.hljs-addition { - color: #0C9A9A; -} - - -/* Meta color: hue: 200 */ - -.hljs-meta { - color: #1f7199; -} - -.hljs-meta-string { - color: #4d99bf; -} - - -/* Misc effects */ - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/school-book.css b/arrow-site/docs/_sass/vendors/highlight/school-book.css deleted file mode 100644 index 94838513f16..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/school-book.css +++ /dev/null @@ -1,69 +0,0 @@ -/* - -School Book style from goldblog.com.ua (c) Zaripov Yura - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 15px 0.5em 0.5em 30px; - font-size: 11px; - line-height:16px; - background:#f6f6ae url(./school-book.png); - border-top: solid 2px #d2e8b9; - border-bottom: solid 1px #d2e8b9; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal { - color:#005599; - font-weight:bold; -} - -.hljs, -.hljs-subst { - color: #3e5915; -} - -.hljs-string, -.hljs-title, -.hljs-section, -.hljs-type, -.hljs-symbol, -.hljs-bullet, -.hljs-attribute, -.hljs-built_in, -.hljs-builtin-name, -.hljs-addition, -.hljs-variable, -.hljs-template-tag, -.hljs-template-variable, -.hljs-link { - color: #2c009f; -} - -.hljs-comment, -.hljs-quote, -.hljs-deletion, -.hljs-meta { - color: #e60415; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-doctag, -.hljs-title, -.hljs-section, -.hljs-type, -.hljs-name, -.hljs-selector-id, -.hljs-strong { - font-weight: bold; -} - -.hljs-emphasis { - font-style: italic; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/school-book.png b/arrow-site/docs/_sass/vendors/highlight/school-book.png deleted file mode 100644 index 956e9790a0e..00000000000 Binary files a/arrow-site/docs/_sass/vendors/highlight/school-book.png and /dev/null differ diff --git a/arrow-site/docs/_sass/vendors/highlight/shades-of-purple.css b/arrow-site/docs/_sass/vendors/highlight/shades-of-purple.css deleted file mode 100644 index c0e899e0eb4..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/shades-of-purple.css +++ /dev/null @@ -1,97 +0,0 @@ -/** - * Shades of Purple Theme — for Highlightjs. - * - * @author (c) Ahmad Awais - * @link GitHub Repo → https://github.com/ahmadawais/Shades-of-Purple-HighlightJS - * @version 1.5.0 - */ - -.hljs { - display: block; - overflow-x: auto; - /* Custom font is optional */ - /* font-family: 'Operator Mono', 'Fira Code', 'Menlo', 'Monaco', 'Courier New', 'monospace'; */ - line-height: 1.45; - padding: 2rem; - background: #2d2b57; - font-weight: normal; -} - -.hljs-title { - color: #fad000; - font-weight: normal; -} - -.hljs-name { - color: #a1feff; -} - -.hljs-tag { - color: #ffffff; -} - -.hljs-attr { - color: #f8d000; - font-style: italic; -} - -.hljs-built_in, -.hljs-selector-tag, -.hljs-section { - color: #fb9e00; -} - -.hljs-keyword { - color: #fb9e00; -} - -.hljs, -.hljs-subst { - color: #e3dfff; -} - -.hljs-string, -.hljs-attribute, -.hljs-symbol, -.hljs-bullet, -.hljs-addition, -.hljs-code, -.hljs-regexp, -.hljs-selector-class, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-template-tag, -.hljs-quote, -.hljs-deletion { - color: #4cd213; -} - -.hljs-meta, -.hljs-meta-string { - color: #fb9e00; -} - -.hljs-comment { - color: #ac65ff; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-name, -.hljs-strong { - font-weight: normal; -} - -.hljs-literal, -.hljs-number { - color: #fa658d; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/solarized-dark.css b/arrow-site/docs/_sass/vendors/highlight/solarized-dark.css deleted file mode 100644 index b4c0da1f786..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/solarized-dark.css +++ /dev/null @@ -1,84 +0,0 @@ -/* - -Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #002b36; - color: #839496; -} - -.hljs-comment, -.hljs-quote { - color: #586e75; -} - -/* Solarized Green */ -.hljs-keyword, -.hljs-selector-tag, -.hljs-addition { - color: #859900; -} - -/* Solarized Cyan */ -.hljs-number, -.hljs-string, -.hljs-meta .hljs-meta-string, -.hljs-literal, -.hljs-doctag, -.hljs-regexp { - color: #2aa198; -} - -/* Solarized Blue */ -.hljs-title, -.hljs-section, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #268bd2; -} - -/* Solarized Yellow */ -.hljs-attribute, -.hljs-attr, -.hljs-variable, -.hljs-template-variable, -.hljs-class .hljs-title, -.hljs-type { - color: #b58900; -} - -/* Solarized Orange */ -.hljs-symbol, -.hljs-bullet, -.hljs-subst, -.hljs-meta, -.hljs-meta .hljs-keyword, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-link { - color: #cb4b16; -} - -/* Solarized Red */ -.hljs-built_in, -.hljs-deletion { - color: #dc322f; -} - -.hljs-formula { - background: #073642; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/solarized-light.css b/arrow-site/docs/_sass/vendors/highlight/solarized-light.css deleted file mode 100644 index fdcfcc72c45..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/solarized-light.css +++ /dev/null @@ -1,84 +0,0 @@ -/* - -Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #fdf6e3; - color: #657b83; -} - -.hljs-comment, -.hljs-quote { - color: #93a1a1; -} - -/* Solarized Green */ -.hljs-keyword, -.hljs-selector-tag, -.hljs-addition { - color: #859900; -} - -/* Solarized Cyan */ -.hljs-number, -.hljs-string, -.hljs-meta .hljs-meta-string, -.hljs-literal, -.hljs-doctag, -.hljs-regexp { - color: #2aa198; -} - -/* Solarized Blue */ -.hljs-title, -.hljs-section, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #268bd2; -} - -/* Solarized Yellow */ -.hljs-attribute, -.hljs-attr, -.hljs-variable, -.hljs-template-variable, -.hljs-class .hljs-title, -.hljs-type { - color: #b58900; -} - -/* Solarized Orange */ -.hljs-symbol, -.hljs-bullet, -.hljs-subst, -.hljs-meta, -.hljs-meta .hljs-keyword, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-link { - color: #cb4b16; -} - -/* Solarized Red */ -.hljs-built_in, -.hljs-deletion { - color: #dc322f; -} - -.hljs-formula { - background: #eee8d5; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/sunburst.css b/arrow-site/docs/_sass/vendors/highlight/sunburst.css deleted file mode 100644 index f56dd5e9b61..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/sunburst.css +++ /dev/null @@ -1,102 +0,0 @@ -/* - -Sunburst-like style (c) Vasily Polovnyov - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #000; - color: #f8f8f8; -} - -.hljs-comment, -.hljs-quote { - color: #aeaeae; - font-style: italic; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-type { - color: #e28964; -} - -.hljs-string { - color: #65b042; -} - -.hljs-subst { - color: #daefa3; -} - -.hljs-regexp, -.hljs-link { - color: #e9c062; -} - -.hljs-title, -.hljs-section, -.hljs-tag, -.hljs-name { - color: #89bdff; -} - -.hljs-class .hljs-title, -.hljs-doctag { - text-decoration: underline; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-number { - color: #3387cc; -} - -.hljs-params, -.hljs-variable, -.hljs-template-variable { - color: #3e87e3; -} - -.hljs-attribute { - color: #cda869; -} - -.hljs-meta { - color: #8996a8; -} - -.hljs-formula { - background-color: #0e2231; - color: #f8f8f8; - font-style: italic; -} - -.hljs-addition { - background-color: #253b22; - color: #f8f8f8; -} - -.hljs-deletion { - background-color: #420e09; - color: #f8f8f8; -} - -.hljs-selector-class { - color: #9b703f; -} - -.hljs-selector-id { - color: #8b98ab; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/tomorrow-night-blue.css b/arrow-site/docs/_sass/vendors/highlight/tomorrow-night-blue.css deleted file mode 100644 index 78e59cc8cb0..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/tomorrow-night-blue.css +++ /dev/null @@ -1,75 +0,0 @@ -/* Tomorrow Night Blue Theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-quote { - color: #7285b7; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-deletion { - color: #ff9da4; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-meta, -.hljs-link { - color: #ffc58f; -} - -/* Tomorrow Yellow */ -.hljs-attribute { - color: #ffeead; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #d1f1a9; -} - -/* Tomorrow Blue */ -.hljs-title, -.hljs-section { - color: #bbdaff; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #ebbbff; -} - -.hljs { - display: block; - overflow-x: auto; - background: #002451; - color: white; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/tomorrow-night-bright.css b/arrow-site/docs/_sass/vendors/highlight/tomorrow-night-bright.css deleted file mode 100644 index e05af8ae245..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/tomorrow-night-bright.css +++ /dev/null @@ -1,74 +0,0 @@ -/* Tomorrow Night Bright Theme */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-quote { - color: #969896; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-deletion { - color: #d54e53; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-meta, -.hljs-link { - color: #e78c45; -} - -/* Tomorrow Yellow */ -.hljs-attribute { - color: #e7c547; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #b9ca4a; -} - -/* Tomorrow Blue */ -.hljs-title, -.hljs-section { - color: #7aa6da; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #c397d8; -} - -.hljs { - display: block; - overflow-x: auto; - background: black; - color: #eaeaea; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/tomorrow-night-eighties.css b/arrow-site/docs/_sass/vendors/highlight/tomorrow-night-eighties.css deleted file mode 100644 index 08fd51c742a..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/tomorrow-night-eighties.css +++ /dev/null @@ -1,74 +0,0 @@ -/* Tomorrow Night Eighties Theme */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-quote { - color: #999999; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-deletion { - color: #f2777a; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-meta, -.hljs-link { - color: #f99157; -} - -/* Tomorrow Yellow */ -.hljs-attribute { - color: #ffcc66; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #99cc99; -} - -/* Tomorrow Blue */ -.hljs-title, -.hljs-section { - color: #6699cc; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #cc99cc; -} - -.hljs { - display: block; - overflow-x: auto; - background: #2d2d2d; - color: #cccccc; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/tomorrow-night.css b/arrow-site/docs/_sass/vendors/highlight/tomorrow-night.css deleted file mode 100644 index ddd270a4e76..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/tomorrow-night.css +++ /dev/null @@ -1,75 +0,0 @@ -/* Tomorrow Night Theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-quote { - color: #969896; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-deletion { - color: #cc6666; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-meta, -.hljs-link { - color: #de935f; -} - -/* Tomorrow Yellow */ -.hljs-attribute { - color: #f0c674; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #b5bd68; -} - -/* Tomorrow Blue */ -.hljs-title, -.hljs-section { - color: #81a2be; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #b294bb; -} - -.hljs { - display: block; - overflow-x: auto; - background: #1d1f21; - color: #c5c8c6; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/tomorrow.scss b/arrow-site/docs/_sass/vendors/highlight/tomorrow.scss deleted file mode 100644 index 026a62fe3be..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/tomorrow.scss +++ /dev/null @@ -1,72 +0,0 @@ -/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ - -/* Tomorrow Comment */ -.hljs-comment, -.hljs-quote { - color: #8e908c; -} - -/* Tomorrow Red */ -.hljs-variable, -.hljs-template-variable, -.hljs-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-regexp, -.hljs-deletion { - color: #c82829; -} - -/* Tomorrow Orange */ -.hljs-number, -.hljs-built_in, -.hljs-builtin-name, -.hljs-literal, -.hljs-type, -.hljs-params, -.hljs-meta, -.hljs-link { - color: #f5871f; -} - -/* Tomorrow Yellow */ -.hljs-attribute { - color: #eab700; -} - -/* Tomorrow Green */ -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-addition { - color: #718c00; -} - -/* Tomorrow Blue */ -.hljs-title, -.hljs-section { - color: #4271ae; -} - -/* Tomorrow Purple */ -.hljs-keyword, -.hljs-selector-tag { - color: #8959a8; -} - -.hljs { - display: block; - overflow-x: auto; - background: white; - color: #4d4d4c; - padding: 0.5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/vs.css b/arrow-site/docs/_sass/vendors/highlight/vs.css deleted file mode 100644 index c5d07d3115d..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/vs.css +++ /dev/null @@ -1,68 +0,0 @@ -/* - -Visual Studio-like style based on original C# coloring by Jason Diamond - -*/ -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: white; - color: black; -} - -.hljs-comment, -.hljs-quote, -.hljs-variable { - color: #008000; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-built_in, -.hljs-name, -.hljs-tag { - color: #00f; -} - -.hljs-string, -.hljs-title, -.hljs-section, -.hljs-attribute, -.hljs-literal, -.hljs-template-tag, -.hljs-template-variable, -.hljs-type, -.hljs-addition { - color: #a31515; -} - -.hljs-deletion, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-meta { - color: #2b91af; -} - -.hljs-doctag { - color: #808080; -} - -.hljs-attr { - color: #f00; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-link { - color: #00b0e8; -} - - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/vs2015.css b/arrow-site/docs/_sass/vendors/highlight/vs2015.css deleted file mode 100644 index d1d9be3caa5..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/vs2015.css +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Visual Studio 2015 dark style - * Author: Nicolas LLOBERA - */ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #1E1E1E; - color: #DCDCDC; -} - -.hljs-keyword, -.hljs-literal, -.hljs-symbol, -.hljs-name { - color: #569CD6; -} -.hljs-link { - color: #569CD6; - text-decoration: underline; -} - -.hljs-built_in, -.hljs-type { - color: #4EC9B0; -} - -.hljs-number, -.hljs-class { - color: #B8D7A3; -} - -.hljs-string, -.hljs-meta-string { - color: #D69D85; -} - -.hljs-regexp, -.hljs-template-tag { - color: #9A5334; -} - -.hljs-subst, -.hljs-function, -.hljs-title, -.hljs-params, -.hljs-formula { - color: #DCDCDC; -} - -.hljs-comment, -.hljs-quote { - color: #57A64A; - font-style: italic; -} - -.hljs-doctag { - color: #608B4E; -} - -.hljs-meta, -.hljs-meta-keyword, -.hljs-tag { - color: #9B9B9B; -} - -.hljs-variable, -.hljs-template-variable { - color: #BD63C5; -} - -.hljs-attr, -.hljs-attribute, -.hljs-builtin-name { - color: #9CDCFE; -} - -.hljs-section { - color: gold; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} - -/*.hljs-code { - font-family:'Monospace'; -}*/ - -.hljs-bullet, -.hljs-selector-tag, -.hljs-selector-id, -.hljs-selector-class, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #D7BA7D; -} - -.hljs-addition { - background-color: #144212; - display: inline-block; - width: 100%; -} - -.hljs-deletion { - background-color: #600; - display: inline-block; - width: 100%; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/xcode.css b/arrow-site/docs/_sass/vendors/highlight/xcode.css deleted file mode 100644 index b3056655cc6..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/xcode.css +++ /dev/null @@ -1,104 +0,0 @@ -/* - -XCode style (c) Angel Garcia - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #fff; - color: black; -} - -/* Gray DOCTYPE selectors like WebKit */ -.xml .hljs-meta { - color: #c0c0c0; -} - -.hljs-comment, -.hljs-quote { - color: #007400; -} - -.hljs-tag, -.hljs-attribute, -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-name { - color: #aa0d91; -} - -.hljs-variable, -.hljs-template-variable { - color: #3F6E74; -} - -.hljs-code, -.hljs-string, -.hljs-meta-string { - color: #c41a16; -} - -.hljs-regexp, -.hljs-link { - color: #0E0EFF; -} - -.hljs-title, -.hljs-symbol, -.hljs-bullet, -.hljs-number { - color: #1c00cf; -} - -.hljs-section, -.hljs-meta { - color: #643820; -} - - -.hljs-class .hljs-title, -.hljs-type, -.hljs-built_in, -.hljs-builtin-name, -.hljs-params { - color: #5c2699; -} - -.hljs-attr { - color: #836C28; -} - -.hljs-subst { - color: #000; -} - -.hljs-formula { - background-color: #eee; - font-style: italic; -} - -.hljs-addition { - background-color: #baeeba; -} - -.hljs-deletion { - background-color: #ffc8bd; -} - -.hljs-selector-id, -.hljs-selector-class { - color: #9b703f; -} - -.hljs-doctag, -.hljs-strong { - font-weight: bold; -} - -.hljs-emphasis { - font-style: italic; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/xt256.css b/arrow-site/docs/_sass/vendors/highlight/xt256.css deleted file mode 100644 index 3e35ad2d5c7..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/xt256.css +++ /dev/null @@ -1,92 +0,0 @@ - -/* - xt256.css - - Contact: initbar [at] protonmail [dot] ch - : github.com/initbar -*/ - -.hljs { - display: block; - overflow-x: auto; - color: #eaeaea; - background: #000; - padding: 0.5em; -} - -.hljs-subst { - color: #eaeaea; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-builtin-name, -.hljs-type { - color: #eaeaea; -} - -.hljs-params { - color: #da0000; -} - -.hljs-literal, -.hljs-number, -.hljs-name { - color: #ff0000; - font-weight: bolder; -} - -.hljs-comment { - color: #969896; -} - -.hljs-selector-id, -.hljs-quote { - color: #00ffff; -} - -.hljs-template-variable, -.hljs-variable, -.hljs-title { - color: #00ffff; - font-weight: bold; -} - -.hljs-selector-class, -.hljs-keyword, -.hljs-symbol { - color: #fff000; -} - -.hljs-string, -.hljs-bullet { - color: #00ff00; -} - -.hljs-tag, -.hljs-section { - color: #000fff; -} - -.hljs-selector-tag { - color: #000fff; - font-weight: bold; -} - -.hljs-attribute, -.hljs-built_in, -.hljs-regexp, -.hljs-link { - color: #ff00ff; -} - -.hljs-meta { - color: #fff; - font-weight: bolder; -} diff --git a/arrow-site/docs/_sass/vendors/highlight/zenburn.css b/arrow-site/docs/_sass/vendors/highlight/zenburn.css deleted file mode 100644 index 07be502016b..00000000000 --- a/arrow-site/docs/_sass/vendors/highlight/zenburn.css +++ /dev/null @@ -1,80 +0,0 @@ -/* - -Zenburn style from voldmar.ru (c) Vladimir Epifanov -based on dark.css by Ivan Sagalaev - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #3f3f3f; - color: #dcdcdc; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-tag { - color: #e3ceab; -} - -.hljs-template-tag { - color: #dcdcdc; -} - -.hljs-number { - color: #8cd0d3; -} - -.hljs-variable, -.hljs-template-variable, -.hljs-attribute { - color: #efdcbc; -} - -.hljs-literal { - color: #efefaf; -} - -.hljs-subst { - color: #8f8f8f; -} - -.hljs-title, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class, -.hljs-section, -.hljs-type { - color: #efef8f; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-link { - color: #dca3a3; -} - -.hljs-deletion, -.hljs-string, -.hljs-built_in, -.hljs-builtin-name { - color: #cc9393; -} - -.hljs-addition, -.hljs-comment, -.hljs-quote, -.hljs-meta { - color: #7f9f7f; -} - - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/arrow-site/docs/css/docs-styles.scss b/arrow-site/docs/css/docs-styles.scss deleted file mode 100644 index 7fa3bd735d4..00000000000 --- a/arrow-site/docs/css/docs-styles.scss +++ /dev/null @@ -1,41 +0,0 @@ ---- ---- - -// Utils -@import "utils/variables"; -@import "utils/mixins/links"; -@import "utils/mixins/breakpoint"; -@import "utils/mixins/general-mixins"; - -// Vendors -@import "vendors/highlight/default"; - -// Base -@import "base/reset"; -@import "base/base"; -@import "base/helpers"; -@import "base/fonts"; - -// Components -@import "components/docs/playground-theme"; -@import "components/docs/highlight"; -@import "components/docs/code"; -@import "components/docs/doc-body"; -@import "components/docs/doc-content-core"; -@import "components/docs/doc-content-fx"; -@import "components/docs/doc-content-optics"; -@import "components/docs/doc-content"; -@import "components/docs/doc-header"; -@import "components/docs/media-content"; -@import "components/docs/sidebar-fx"; -@import "components/docs/sidebar-optics"; -@import "components/docs/sidebar-menu"; -@import "components/docs/sidebar"; -@import "components/docs/sidebar-core"; -@import "components/docs/sidebar-quickstart"; -@import "components/docs/navigation"; -@import "components/common/dropdown"; -@import "components/common/button"; -@import "components/docs/quickstart-doc"; - -@include dropdown($dropdown-config...); diff --git a/arrow-site/docs/css/home-styles.scss b/arrow-site/docs/css/home-styles.scss deleted file mode 100644 index 91dfd5f261c..00000000000 --- a/arrow-site/docs/css/home-styles.scss +++ /dev/null @@ -1,27 +0,0 @@ ---- ---- - -// Utils -@import "utils/variables"; -@import "utils/mixins/breakpoint"; -@import "utils/mixins/links"; - -// Base -@import "base/reset"; -@import "base/base"; -@import "base/helpers"; -@import "base/fonts"; -@import "base/animated"; - -// Components - -@import "components/common/button"; -@import "components/common/footer"; -@import "components/home/nav"; -@import "components/home/header"; -@import "components/home/main"; -@import "components/home/quickstart"; -@import "components/docs/doc-body"; -@import "components/docs/doc-content"; -@import "components/docs/highlight"; -@import "components/docs/code"; diff --git a/arrow-site/docs/docs/arrow/typeclasses/const/README.md b/arrow-site/docs/docs/arrow/typeclasses/const/README.md deleted file mode 100644 index c61622b08c8..00000000000 --- a/arrow-site/docs/docs/arrow/typeclasses/const/README.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -layout: docs-core -title: Const -permalink: /arrow/typeclasses/const/ ---- - -## Const - - - - -### Supported type classes - diff --git a/arrow-site/docs/docs/arrow/typeclasses/monoid/README.md b/arrow-site/docs/docs/arrow/typeclasses/monoid/README.md deleted file mode 100644 index d0d3722a68e..00000000000 --- a/arrow-site/docs/docs/arrow/typeclasses/monoid/README.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -layout: docs-core -title: Monoid -permalink: /arrow/typeclasses/monoid/ ---- - -## Monoid - -`Monoid` extends the `Semigroup` type class, adding an `empty` function to semigroup's `combine`. The empty method must return a value that, when combined with any other instance of that type, returns the other instance, i.e., - -```kotlin -(a.combine(empty()) == empty().combine(a) == a) -``` - -For example, if we have a `Monoid` with `combine` defined as string concatenation, then `empty() = ""`. - -Having `empty` defined allows us to combine all the elements of some potentially empty collection of `T` for which a `Monoid` is defined and return a `T`, rather than an `Option` as we have a sensible default to fall back to. - -Let's see the instance of Monoid in action: - -```kotlin -import arrow.typeclasses.Monoid - -Monoid.string().run { empty() } -``` - -```kotlin -Monoid.string().run { - listOf("Λ", "R", "R", "O", "W").combineAll() -} -``` - -```kotlin -import arrow.core.Option -import arrow.core.Some -import arrow.typeclasses.Monoid - -Monoid.option(Monoid.int()).run { listOf>(Some(1), Some(1)).combineAll() } -``` - -The advantage of using these type class provided methods, rather than the specific ones for each type, is that we can compose monoids to allow us to operate on more complex types, for example. - -This is also true if we define our own instances. As an example, let's use `Foldable`'s `foldMap`, which maps over values accumulating the results, using the available `Monoid` for the type mapped onto. - -```kotlin -import arrow.core.foldMap -import arrow.core.identity -import arrow.typeclasses.Monoid - -listOf(1, 2, 3, 4, 5).foldMap(Monoid.int(), ::identity) -``` - -```kotlin -import arrow.core.foldMap -import arrow.typeclasses.Monoid - -listOf(1, 2, 3, 4, 5).foldMap(Monoid.string()) { it.toString() } -``` - -To use this with a function that produces a pair, we can define a Monoid for a pair that will be valid for any pair where the types it contains also have a Monoid available. - -```kotlin -import arrow.typeclasses.Monoid - -fun monoidPair(MA: Monoid, MB: Monoid): Monoid> = - object : Monoid> { - - override fun Pair.combine(other: Pair): Pair { - val (thisA, thisB) = this - val (otherA, otherB) = other - return Pair(MA.run { thisA.combine(otherA) }, MB.run { thisB.combine(otherB) }) - } - - override fun empty(): Pair = Pair(MA.empty(), MB.empty()) -} -``` - -This way, we are able to combine both values in one pass, hurrah! - -```kotlin -import arrow.core.foldMap -import arrow.typeclasses.Monoid - -val M = monoidPair(Monoid.int(), Monoid.string()) -val list = listOf(1, 1) - -list.foldMap(M) { n: Int -> - Pair(n, n.toString()) -} -``` diff --git a/arrow-site/docs/docs/arrow/typeclasses/semigroup/README.md b/arrow-site/docs/docs/arrow/typeclasses/semigroup/README.md deleted file mode 100644 index 8745ab1c6fb..00000000000 --- a/arrow-site/docs/docs/arrow/typeclasses/semigroup/README.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -layout: docs-core -title: Semigroup -permalink: /arrow/typeclasses/semigroup/ ---- - -## Semigroup - - - - -A semigroup for some given type `A` has a single operation (which we will call `combine`), which takes two values of type `A`, and returns a value of type `A`. This operation must be guaranteed to be associative. That is to say that, - -```kotlin -(a.combine(b)).combine(c) -``` - -must be the same as - -```kotlin -a.combine(b.combine(c)) -``` - -for all possible values of a, b, c. - -There are instances of `Semigroup` defined for many types found in Arrow and the Kotlin std lib. -For example, `Int` values are combined using addition by default, but multiplication is also associative and forms another `Semigroup`. - -### Examples - -Now that you've learned about the Semigroup instance for Int, try to guess how it works in the following examples: - -```kotlin -import arrow.typeclasses.Semigroup - -Semigroup.int().run { 1.combine(2) } -``` - -```kotlin -import arrow.typeclasses.Semigroup - -Semigroup.list().run { - listOf(1, 2, 3).combine(listOf(4, 5, 6)) -} -``` - -```kotlin -import arrow.core.Option -import arrow.typeclasses.Semigroup - -Semigroup.option(Semigroup.int()).run { - Option(1).combine(Option(2)) -} -``` - -```kotlin -import arrow.core.Option -import arrow.core.None -import arrow.typeclasses.Semigroup - -Semigroup.option(Semigroup.int()).run { - Option(1).combine(None) -} -``` - -Many of these types have methods defined directly on them, which allow for this example of combining: `+` on `List`. But the value of having a `Semigroup` typeclass available is that these compose. - -Additionally, `Semigroup` adds `+` syntax to all types for which a Semigroup instance exists: - -```kotlin -Semigroup.option(Semigroup.int()).run { - Option(1) + Option(2) -} -``` - -Contents partially adapted from [Scala Exercises Cat's Semigroup Tutorial](https://www.scala-exercises.org/cats/semigroup) diff --git a/arrow-site/docs/docs/collections_dsl/README.md b/arrow-site/docs/docs/collections_dsl/README.md deleted file mode 100644 index 12bcccdedd4..00000000000 --- a/arrow-site/docs/docs/collections_dsl/README.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -layout: docs-optics -title: Syntax DSL -permalink: /optics/collections_dsl/ ---- - -## Optics DSL for Collections - -The Optics DSL has special support for optics that refer to elements in a collection. - -### [Every]({{ '/optics/every' | relative_url }}) - -`Every` can be used to focus into a structure `S` and see all its foci `A`. Here, we focus into all `Employee`s in the `Employees`. - -```kotlin -@optics data class Employees(val employees: List) { - companion object -} -``` - -```kotlin:ank -import arrow.optics.Every - -val jane = Employee("Jane Doe", Company("Kategory", Address("Functional city", Street(42, "lambda street")))) -val employees = Employees(listOf(john, jane)) - -Employees.employees.every(Every.list()).company.address.street.name.modify(employees, String::capitalize) -``` - -If you are in the scope of `Each`, you don't need to specify the instance. - -```kotlin:ank -Every.list().run { - Employees.employees.every.company.address.street.name.modify(employees, String::capitalize) -} -``` - -### [At]({{ '/optics/at' | relative_url }}) - -`At` can be used to focus in `A` at a given index `I` for a given structure `S`. - -```kotlin -@optics data class Db(val content: Map) { - companion object -} -``` - -Here we focus into the value of a given key in `MapK`. - -```kotlin:ank -import arrow.optics.typeclasses.At - -val db = Db(mapOf( - 1 to "one", - 2 to "two", - 3 to "three" -)) - -Db.content.at(At.map(), 2).some.modify(db, String::reversed) -``` - -If you are in the scope of `At`, you don't need to specify the instance. - -```kotlin:ank -At.map().run { - Db.content.at(2).some.modify(db, String::reversed) -} -``` - -### [Index]({{ '/optics/index' | relative_url }}) - -`Index` can be used to operate on a structure `S` that can index `A` by an index `I` (i.e., a `List` by its index position or a `Map` by its keys `K`). - - -```kotlin:ank -import arrow.optics.typeclasses.Index - -val updatedJohn = Employees.employees.index(Index.list(), 0).company.address.street.name.modify(employees, String::capitalize) -updatedJohn -``` - -In the scope of `Index`, you don't need to specify the instance, so we can enable `operator fun get` syntax. - -```kotlin:ank -Index.list().run { - Employees.employees[0].company.address.street.name.getOrNull(updatedJohn) -} -``` - -Since [Index]({{ '/optics/index' | relative_url }}) returns an [Optional]({{ '/optics/optional' | relative_url }}), `index` and `[]` are safe operations. - -```kotlin:ank -Index.list().run { - Employees.employees[2].company.address.street.name.getOrNull(employees) -} -``` diff --git a/arrow-site/docs/docs/cons/README.md b/arrow-site/docs/docs/cons/README.md deleted file mode 100644 index 2462690cfcf..00000000000 --- a/arrow-site/docs/docs/cons/README.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -layout: docs-optics -title: Cons -permalink: /optics/cons/ ---- - -## Cons - -`Cons` provides a [Prism]({{ '/optics/prism' | relative_url }}) between a structure `S` and its first element `A` and tail `S`. -It provides a convenient way to attach or detach elements to the beginning side of a structure [S]. - -It can be constructed by providing the `Prism`. - -```kotlin -import arrow.optics.typeclasses.Cons - -val listFirst = Cons.list().cons() -val instance = Cons(listFirst) -instance -``` - -It defines two functions: `cons` and `uncons`. - -`cons` prepends an element `A` to a structure `S`. - -```kotlin -import arrow.optics.cons - -1 cons listOf(2, 3) -``` - -`uncons` detaches the first element `A` from a structure `S`. - -```kotlin -import arrow.optics.uncons - -listOf(1, 2, 3).uncons() -``` -```kotlin -emptyList().uncons() -``` diff --git a/arrow-site/docs/docs/core/README.md b/arrow-site/docs/docs/core/README.md deleted file mode 100644 index c110e304e52..00000000000 --- a/arrow-site/docs/docs/core/README.md +++ /dev/null @@ -1,251 +0,0 @@ ---- -layout: quickstart-core -title: Core -permalink: /core/ ---- - -
-[![Maven Central](https://img.shields.io/maven-central/v/io.arrow-kt/arrow-core?color=4caf50&label=latest%20release)](https://maven-badges.herokuapp.com/maven-central/io.arrow-kt/arrow-core) -[![Latest snapshot](https://img.shields.io/badge/dynamic/xml?color=orange&label=latest%20snapshot&prefix=v&query=%2F%2Fmetadata%2Fversioning%2Flatest&url=https%3A%2F%2Foss.sonatype.org%2Fservice%2Flocal%2Frepositories%2Fsnapshots%2Fcontent%2Fio%2Farrow-kt%2Farrow-core%2Fmaven-metadata.xml)](https://oss.sonatype.org/service/local/repositories/snapshots/content/io/arrow-kt/) -[![Kotlin version](https://img.shields.io/badge/Kotlin-1.4-blue)](https://kotlinlang.org/docs/reference/whatsnew14.html) -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0) -[![StackOverflow](https://img.shields.io/badge/arrow--kt-grey.svg?logo=stackoverflow)](https://stackoverflow.com/questions/tagged/arrow-kt) -[![Twitter](https://img.shields.io/twitter/follow/arrow_kt?color=blue&style=flat)](https://twitter.com/arrow_kt) -
- -
-
- -# Arrow Core. Functional companion to Kotlin’s Standard Library - -Arrow Core includes types such as [`Either`]({{ '/apidocs/arrow-core/arrow.core/-either/' | -relative_url }}), [`Validated`]({{ '/apidocs/arrow-core/arrow.core/-validated/' | relative_url }}) -and many extensions to [`Iterable`]({{ '/apidocs/arrow-core/arrow.core/index.html#functions' | -relative_url }}) that can be used when implementing [error handling patterns]({{ '/patterns/error_handling/' | relative_url }}). - -Core also includes the base continuation effects system, which includes patterns to remove callbacks -and enables controlled effects in direct syntax. Some applications of the effect system reduce -boilerplate and enable direct syntax including [monad comprehensions and computation expressions]( -{{ '/patterns/monad_comprehensions/' | relative_url }}). -
- -
-## Arrow Core Overview - -
- -
-#### Quick Start - - [Gradle Setup]({{ '/core/#Gradle-kotlin' | relative_url }}) - - [Maven Setup]({{ '/core/#Maven' | relative_url }}) - -#### Effects & Continuations - - [Effect]({{ '/apidocs/arrow-core/arrow.core.continuations/-effect/' | relative_url }}) - - [EffectScope]({{ '/apidocs/arrow-core/arrow.core.continuations/-effect-scope/' | relative_url }}) - - [EagerEffect]({{ '/apidocs/arrow-core/arrow.core.continuations/-eager-effect/' | relative_url }}) - - [EagerEffectScope]({{ '/apidocs/arrow-core/arrow.core.continuations/-eager-effect-scope/' | relative_url }}) - -
- -
-#### Extensions and data types - - [Either]({{ '/apidocs/arrow-core/arrow.core/-either/' | relative_url }}) - - [Validated]({{ '/apidocs/arrow-core/arrow.core/-validated/' | relative_url }}) - - [Option]({{ '/apidocs/arrow-core/arrow.core/-option/' | relative_url }}) - - [NonEmptyList]({{ '/apidocs/arrow-core/arrow.core/-non-empty-list/' | relative_url }}) - - [Ior]({{ '/apidocs/arrow-core/arrow.core/-ior/' | relative_url }}) - - [Eval]({{ '/apidocs/arrow-core/arrow.core/-eval/' | relative_url }}) - - [Monoid]({{ '/arrow/typeclasses/monoid/' | relative_url }}) - - [Semiring]({{ '/apidocs/arrow-core/arrow.typeclasses/-semiring/' | relative_url }}) - - [Extensions]({{ '/apidocs/arrow-core/arrow.core/index.html#functions' | relative_url }}) - -
- -
-#### Tutorials - - [Error Handling]({{ '/patterns/error_handling/' | relative_url }}) - - [Monads]({{ '/patterns/monads/' | relative_url }}) - - [Monad Comprehensions]({{ '/patterns/monad_comprehensions/' | relative_url }}) - - [Coroutines & Computation blocks]({{ '/fx/coroutines/' | relative_url }}) - -
- -
-#### Additional information - - [Kotlin's Std Lib Guide](https://kotlinlang.org/api/latest/jvm/stdlib/) - - [Pure & Referentially Transparent Functions]({{ '/fx/purity-and-referentially-transparent-functions/' | relative_url }}) - - [Why suspend over IO monad]({{ '/effects/io/' | relative_url }}) - - [Semantics of Structured Concurrency and Effect]({{ '/arrow/core/continuations/' | relative_url }}) -
-
-
- -
-## Setup - -{: .setup-subtitle} -Configure Arrow for your project -
-
-![Jdk]({{ "/img/quickstart/jdk-logo.svg" | relative_url }} "jdk") - -Make sure to have the latest version of JDK 1.8 installed. -
-
-![Android]({{ "/img/quickstart/android-logo.svg" | relative_url }} "android") - - -Arrow supports Android starting on API 21 and up. -
-
- -
- -
- - - -
- - -
- -#### Basic Setup - -In your project's root `build.gradle.kts`, append this repository to your list: - -``` -allprojects { - repositories { - mavenCentral() - } -} -``` - -Add the dependencies into the project's `build.gradle.kts`: - -``` -dependencies { - implementation("io.arrow-kt:arrow-core:1.1.2") -} -``` - -#### BOM file - -To avoid specifying the Arrow version for every dependency, a BOM file is available: - -``` -dependencies { - implementation(platform("io.arrow-kt:arrow-stack:1.1.2")) - - implementation("io.arrow-kt:arrow-core") - ... -} -``` - -#### Next development version - -If you want to try the latest features, replace `1.1.2` with on of the latest `alpha`, `beta` or `rc` publications. - -
- -
- -#### Basic Setup - -In your project's root `build.gradle`, append this repository to your list: - -```groovy -allprojects { - repositories { - mavenCentral() - } -} -``` - -Add the dependencies into the project's `build.gradle`: - -##### Arrow Core - -```groovy -def arrow_version = "1.1.2" -dependencies { - implementation "io.arrow-kt:arrow-core:$arrow_version" -} -``` - -#### BOM file - -To avoid specifying the Arrow version for every dependency, a BOM file is available: - -```groovy -def arrow_version = "1.1.2" -dependencies { - implementation platform("io.arrow-kt:arrow-stack:$arrow_version") - - implementation "io.arrow-kt:arrow-core" - ... -} -``` - -#### Next development version - -If you want to try the latest features, replace `1.1.2` with one of the latest `alpha`, `beta` or `rc` publications. - -
- -
- -#### Basic Setup - -Make sure to have at least the latest version of JDK 1.8 installed. Add to your pom.xml file the -following properties: - -```xml - - - 1.6.10 - 1.1.2 - -``` - -Add the dependencies that you want to use: - -```xml - - - io.arrow-kt - arrow-core - ${arrow.version} - -``` - -#### BOM file - -To avoid specifying the Arrow version for every dependency, a BOM file is available: - -```xml - - - - - io.arrow-kt - arrow-stack - ${arrow.version} - pom - import - - - -... - -``` - -#### Next development version - -If you want to try the latest features, replace `1.1.2` with one of the latest `alpha`, `beta` or `rc` publications. - -
-
- -
diff --git a/arrow-site/docs/docs/datatypes/basic/README.md b/arrow-site/docs/docs/datatypes/basic/README.md deleted file mode 100644 index ac36afe5a2b..00000000000 --- a/arrow-site/docs/docs/datatypes/basic/README.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -layout: docs-core -title: Basic Types -permalink: /datatypes/basic/ ---- - -## Basic Types - - - - -Arrow provides [typeclass]({{ '/patterns/glossary/' | relative_url }}) instances for several platform types. -These instances are available in the module `arrow-instances`. - -### Numbers - -- [`Show`]({{ '/arrow/typeclasses/show/' | relative_url }}) - -- [`Eq`]({{ '/arrow/typeclasses/eq/' | relative_url }}) - -- [`Order`]({{ '/arrow/typeclasses/order/' | relative_url }}) - -- [`Semigroup`]({{ '/arrow/typeclasses/semigroup/' | relative_url }}) - -- [`Monoid`]({{ '/arrow/typeclasses/monoid/' | relative_url }}) - -### String - -- [`Show`]({{ '/arrow/typeclasses/show/' | relative_url }}) - -- [`Eq`]({{ '/arrow/typeclasses/eq/' | relative_url }}) - -- [`Order`]({{ '/arrow/typeclasses/order/' | relative_url }}) - -- [`Semigroup`]({{ '/arrow/typeclasses/semigroup/' | relative_url }}) - -- [`Monoid`]({{ '/arrow/typeclasses/monoid/' | relative_url }}) - -- [`FilterIndex`]({{ '/optics/filterindex/' | relative_url }}) - -- [`Index`]({{ '/optics/index/' | relative_url }}) - -### Boolean - -Note that, because `Boolean` doesn't have a companion object, you'll find these in `BooleanInstances`. - -- [`Show`]({{ '/arrow/typeclasses/show/' | relative_url }}) - -- [`Eq`]({{ '/arrow/typeclasses/eq/' | relative_url }}) - -### Char - -- [`Show`]({{ '/arrow/typeclasses/show/' | relative_url }}) - -- [`Eq`]({{ '/arrow/typeclasses/eq/' | relative_url }}) - -- [`Order`]({{ '/arrow/typeclasses/order/' | relative_url }}) diff --git a/arrow-site/docs/docs/datatypes/day/README.md b/arrow-site/docs/docs/datatypes/day/README.md deleted file mode 100644 index 84a459100cc..00000000000 --- a/arrow-site/docs/docs/datatypes/day/README.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: docs-core -title: Day -permalink: /arrow/ui/day/ ---- - -## Day - -When building user interfaces, it is common to have two screens side by side evolving their states independently. In order to implement this behavior, we can use `Day`. - -`Day` is a [`comonadic`]({{ '/arrow/typeclasses/comonad' | relative_url }}) data structure that holds two `Comonads` and a rendering function for both states. diff --git a/arrow-site/docs/docs/datatypes/intro/README.md b/arrow-site/docs/docs/datatypes/intro/README.md deleted file mode 100644 index 6f52d131fcd..00000000000 --- a/arrow-site/docs/docs/datatypes/intro/README.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -layout: docs-core -title: Intro to datatypes -permalink: /datatypes/intro/ ---- - -## Datatypes - -A datatype is an abstraction that encapsulates one reusable coding pattern. -These solutions have a canonical implementation that is generalized for all possible uses. - -A datatype is implemented by a data class, or a sealed hierarchy of data classes and objects. -These datatypes are generalized by having one or several generic parameters. - -#### Example - -`Option
` is a datatype that represents absence. -It has one generic parameter `A`, representing the type of the values that `Option` may contain. -`Option` can be specialized for any type `A` because this type does not affect its behavior. -`Option` behaves the same for `Int`, `String`, or `DomainUserClass`. - -The implementation of `Option` is a sealed class with two subtypes: An object `None` and a data class `Some`. -`Some` represents presence of the value and thus it has one field containing it, and `None` represents absence. - -All operations over `Option` have to take into account absence or presence, -so there is a function `fold()` that takes a continuation function per case, `() -> B` and `(A) -> B`. -The implementation of `fold()` is a simple `when` that checks whether `this` is a `None` or a `Some`, and it applies the appropriate continuation function. - -All other functions provided by `Option` are implemented by using `fold()`, making for idiomatic helper functions like `getOrNull`, `getOrElse`, or `map`. These functions work for any value of `A` and `B`. This way, what `Option` does for each individual case of `String`, `Int`, or absence is up to the functions passed by the user. - -Feel free to explore the [implementation of `Option`](https://github.com/arrow-kt/arrow/blob/main/arrow-libs/core/arrow-core/src/main/kotlin/arrow/core/extensions/option.kt) and [other datatypes](https://github.com/arrow-kt/arrow-core/tree/main/arrow-core-data/src/main/kotlin/arrow/core) to discover their behavior! - -### Datatypes in Arrow - -We will list all the datatypes available in Arrow by the module they belong to, and a short description of the coding pattern they abstract. - -#### Core - -Core contains the datatypes that are also used by the public API of several [typeclasses]({{ '/patterns/glossary/' | relative_url }}), -so they are always required. - -- [`Option`]({{ '/apidocs/arrow-core/arrow.core/-option/' | relative_url }}) - absence of a value, or failure to construct a correct value - -- [`Either`]({{ '/apidocs/arrow-core/arrow.core/-either/' | relative_url }}) - an if/else branch in execution - -- [`Eval`]({{ '/apidocs/arrow-core/arrow.core/-eval' | relative_url }}) - lazy evaluation of functions with stack safety and memoization - -- `TupleN` - a heterogeneous grouping of 4-9 values without creating a named class - -#### Data - -Data contains the bulk of the datatypes provided by Arrow. We can separate them into several categories. - -##### General use - -- [`NonEmptyList`]({{ '/apidocs/arrow-core/arrow.core/-non-empty-list/' | relative_url }}) - a homogeneous list that has at least 1 value - -- [`Ior`]({{ '/apidocs/arrow-core/arrow.core/-ior/' | relative_url }}) - a branch in execution for three possible paths: One, two, or both - -- [`Const`]({{ '/arrow/typeclasses/const/' | relative_url }}) - tags a value with a "phantom generic" that's never instantiated, and it can be used for example to represents units or state - -##### Error handling - -- [`Validated`]({{ '/apidocs/arrow-core/arrow.core/-validated/' | relative_url }}) - returns the result of aggregating multiple calculations that can fail, and it also aggregates the errors - -- [`Either`]({{ '/apidocs/arrow-core/arrow.core/-either/' | relative_url }}) - an if/else branch in execution - -#### Effects - -All effects are different implementations of the same abstraction: Lazy execution of code that can move to other threads and cause exceptions. -They are more general than the other datatypes as they combine the abstractions of several of them. - -For an overview on Arrow's Effect system see [Arrow Fx Coroutines](https://arrow-kt.io/docs/fx/) for support of KotlinX Coroutines primitives and Flow based streams. - - -##### Codata - -- [`Store`]({{ '/apidocs/arrow-ui-data/arrow.ui/-store/' | relative_url }}) - a datatype that holds an initial state and a function for extracting a representation of it. - -- [`Moore`]({{ '/apidocs/arrow-ui-data/arrow.ui/-moore/' | relative_url }}) - a datatype that holds an initial state and can move to new states only when an event of a specific type is dispatched. - -- [`Sum`]({{ '/apidocs/arrow-ui-data/arrow.ui/-sum/' | relative_url }}) - a datatype that holds two comonads and a flag for indicating which one is active. Both sides evolve at the same time. - -- [`Day`]({{ '/apidocs/arrow-ui-data/arrow.ui/-day/' | relative_url }}) - a datatype that holds two comonads which evolve independently. diff --git a/arrow-site/docs/docs/datatypes/moore/README.md b/arrow-site/docs/docs/datatypes/moore/README.md deleted file mode 100644 index e40b2a59011..00000000000 --- a/arrow-site/docs/docs/datatypes/moore/README.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: docs-core -title: Moore -permalink: /arrow/ui/moore/ ---- - -## Moore - - - - - -A `Moore` machine is a [comonadic]({{ '/arrow/typeclasses/comonad' | relative_url }}) data structure that holds a state and, in order to change it, we need to dispatch events of some specific type. This approach is similar to the [_Elm architecture_](https://guide.elm-lang.org/architecture/) or [_Redux_](https://redux.js.org). - -For creating a `Moore` machine, we need its initial state and a `handle` function that will determine the inputs it can accept and how the state will change with each one. - -We also have an `extract` function that returns the current state, and a `coflatMap` that transforms its type. diff --git a/arrow-site/docs/docs/datatypes/nonemptylist/README.md b/arrow-site/docs/docs/datatypes/nonemptylist/README.md deleted file mode 100644 index a2a0966fc67..00000000000 --- a/arrow-site/docs/docs/datatypes/nonemptylist/README.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -layout: docs-core -title: NonEmptyList -permalink: /arrow/core/nonemptylist/ -video: TC6IzE61OyE ---- - -## NonEmptyList - - - - -`NonEmptyList` is a data type used in __Λrrow__ to model ordered lists that have at least one value. -`NonEmptyList` is available in the `arrow-core-data` module under the `import arrow.core.NonEmptyList` - -```groovy -// gradle -compile "io.arrow-kt:arrow-core-data:$arrow_version" -``` - -```kotlin -// namespace -import arrow.core.* -``` - -## of - -A `NonEmptyList` guarantees the list always has at least 1 element. - -```kotlin -nonEmptyListOf(1, 2, 3, 4, 5) // NonEmptyList -nonEmptyListOf(1, 2) // NonEmptyList -//nonEmptyListOf() // does not compile -``` - -## head - -Unlike `List#[0]`, `NonEmptyList#head` is a safe operation that guarantees no exception throwing. - -```kotlin -nonEmptyListOf(1, 2, 3, 4, 5).head -``` - -## foldLeft - -When we fold over a `NonEmptyList`, we turn a `NonEmptyList< A >` into `B` by providing a __seed__ value and a __function__ that carries the state on each iteration over the elements of the list. -The first argument is a function that addresses the __seed value__, this can be any object of any type which will then become the resulting typed value. -The second argument is a function that takes the current state and element in the iteration and returns the new state after transformations have been applied. - -```kotlin -fun sumNel(nel: NonEmptyList): Int = - nel.foldLeft(0) { acc, n -> acc + n } - -sumNel(nonEmptyListOf(1, 1, 1, 1)) -``` - -## map - -`map` allows us to transform `A` into `B` in `NonEmptyList< A >` - -```kotlin -nonEmptyListOf(1, 1, 1, 1).map { it + 1 } -``` - -## flatMap - -`flatMap` allows us to compute over the contents of multiple `NonEmptyList< * >` values - -```kotlin -val nelOne: NonEmptyList = nonEmptyListOf(1) -val nelTwo: NonEmptyList = nonEmptyListOf(2) - -nelOne.flatMap { one -> - nelTwo.map { two -> - one + two - } -} -``` - -## Applicative Builder - -Λrrow contains methods that allow you to preserve type information when computing over different `NonEmptyList` typed values. - -```kotlin -import arrow.core.* -import java.util.* - -data class Person(val id: UUID, val name: String, val year: Int) - -// Note each NonEmptyList is of a different type -val nelId: NonEmptyList = nonEmptyListOf(UUID.randomUUID(), UUID.randomUUID()) -val nelName: NonEmptyList = nonEmptyListOf("William Alvin Howard", "Haskell Curry") -val nelYear: NonEmptyList = nonEmptyListOf(1926, 1900) - -nelId.zip(nelName, nelYear) { id, name, year -> - Person(id, name, year) -} -``` - -### Summary - -- `NonEmptyList` is __used to model lists that guarantee at least one element__ -- We can easily construct values of `NonEmptyList` with `nonEmptyListOf` -- `foldLeft`, `map`, `flatMap`, and others are used to compute over the internal contents of a `NonEmptyList` value. -- `NonEmptyList.mapN(..) { ... }` can be used to compute over multiple `NonEmptyList` values preserving type information and __abstracting over arity__ with `map` diff --git a/arrow-site/docs/docs/dsl/README.md b/arrow-site/docs/docs/dsl/README.md deleted file mode 100644 index e6684c40599..00000000000 --- a/arrow-site/docs/docs/dsl/README.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -layout: docs-optics -title: Syntax DSL -permalink: /optics/dsl/ ---- - -## Optics DSL - - -Arrow offers an Optics DSL to compose different Optics while improving ease of use and readability. -To avoid boilerplate, Arrow will generate this property-like DSL using `@optics` annotation. For Arrow Optics to generate the DSL all the annotated classes should declare a `companion object` where the optics properties will be projected as extensions. - -```kotlin -package com.example.domain - -@optics data class Street(val number: Int, val name: String) { - companion object -} -@optics data class Address(val city: String, val street: Street) { - companion object -} -@optics data class Company(val name: String, val address: Address) { - companion object -} -@optics data class Employee(val name: String, val company: Company?) { - companion object -} -``` - -The DSL will be generated in the same package as your `data class`, and can be used on the `Companion` of your class. In most cases those optics will be [lenses]({{ '/optics/lens' | relative_url }}), which allow both focus and modification, as shown in the next snippet. - -```kotlin -import arrow.optics.dsl.* -import com.example.domain.* -import arrow.optics.Optional - -val john = Employee("John Doe", Company("Kategory", Address("Functional city", Street(42, "lambda street")))) - -val optional: Optional = Employee.company.address.street.name -optional.modify(john, String::toUpperCase) -``` - -Arrow can also generate DSL for a `sealed class`, which can help reduce boilerplate code, or improve readability. In that case we speak of [optionals]({{ '/optics/optional' | relative_url }}), which allow dealing with possibly-missing data, and [prisms]({{ '/optics/prism' | relative_url }}), which provide construction. - -```kotlin -package com.example.domain - -@optics sealed class NetworkResult { - companion object -} -@optics data class Success(val content: String): NetworkResult() { - companion object -} -@optics sealed class NetworkError : NetworkResult() { - companion object -} -@optics data class HttpError(val message: String): NetworkError() { - companion object -} -object TimeoutError: NetworkError() -``` - -Let's imagine we have a function `f` of type `(HttpError) -> HttpError`, and we want to invoke it on the `NetworkResult`. - -```kotlin -val networkResult: NetworkResult = HttpError("boom!") -val f: (String) -> String = String::toUpperCase - -when (networkResult) { - is HttpError -> networkResult.copy(f(networkResult.message)) - else -> networkResult -} -``` - -We can rewrite this code with our generated DSL. - -```kotlin -NetworkResult.networkError.httpError.message.modify(networkResult, f) -``` - -There are more kinds of optics, you can read about them in the sidebar to the left. In particular, handling containers of data (lists, collections) becomes easier when using the [optics for collections]({{ '/optics/collections_dsl/' | relative_url }}). \ No newline at end of file diff --git a/arrow-site/docs/docs/every/README.md b/arrow-site/docs/docs/every/README.md deleted file mode 100644 index 999e2e6530c..00000000000 --- a/arrow-site/docs/docs/every/README.md +++ /dev/null @@ -1,134 +0,0 @@ ---- -layout: docs-optics -title: Every -permalink: /optics/every/ ---- - -## Every - -`Every` is an optic that can see into a structure and get, set, or modify 0 to N foci. -It is useful when you want to focus into a structure that has 0 to N elements, such as collections etc. - -`Every` is a composition of both `Traversal` and `Fold`, which means it's a generalization of both `map` and `foldMap`. - -A structure `S` that has a focus `A`: - - to which we can apply a function `(A) -> B` to `S` and get `T`. For example, `S == List` to which we apply `(Int) -> String` and we get `T == List` - - to which we can apply a function `(A) -> R` with `Monoid` to `S` and get `R`. For example, `S == List` to which we apply `(Int) -> String` with `Monoid` and we get `R == String` - -An `Every` can simply be created by providing the `map` & `foldMap` function. - -```kotlin -import arrow.optics.* -import arrow.core.foldMap -import arrow.typeclasses.Monoid - -fun main(): Unit { - //startSample - val every: Every, Int> = - object : Every, Int> { - override fun modify(source: List, map: (focus: Int) -> Int): List = - source.map(map) - - override fun foldMap(M: Monoid, source: List, map: (focus: Int) -> R): R = - source.foldMap(M, map) - } - - val source = listOf(1, 2, 3, 4) - val target = every.modify(source, Int::inc) - //endSample - println(target) -} -``` - -Or by using any of the pre-defined of `Every` on its `Companion` object. - -```kotlin -Every.list().modify(listOf(1, 2, 3, 4), Int::inc) -``` - -Arrow optics also provides a number of predefined `Traversal` optics. - -## Usage - -```kotlin -data class Street(val number: Int, val name: String) -data class Address(val city: String, val street: Street) -data class Company(val name: String, val address: Address) -data class Employee(val name: String, val company: Company) -data class Employees(val employees: List) -``` -```kotlin -val john = Employee("John Doe", Company("Arrow", Address("Functional city", Street(23, "lambda street")))) -val jane = Employee("John Doe", Company("Arrow", Address("Functional city", Street(23, "lambda street")))) -val employees = Employees(listOf(john, jane)) -``` - -Without lenses, we could use the `copy` method provided on a `data class` for dealing with immutable structures. - -```kotlin -employees.employees.map { employee -> - employee.copy( - company = employee.company.copy( - address = employee.company.address.copy( - street = employee.company.address.street.copy( - name = employee.company.address.street.name.capitalize() - ) - ) - ) - ) -} -``` - -Imagine how complex this would look if we would also introduce `sealed class` into our domain. -This is hard to read, does not scale very well, and it draws attention away from the simple operation we wanted to do `name.capitalize()`. - -What we actually wanted to do here is the following: focus into _every_ employee, `and then` focus into the employee's company, `and then` focus into the company's address, `and then` focus into the street address, and finally, modify the street name by capitalizing it. - -```kotlin -val employees: Lens> = Lens( - get = { it.company }, - set = { employee, company -> employee.copy(company = company) } -) - -val everyEmployee = Every.list() - -val employeeCompany: Lens = Lens( - get = { it.company }, - set = { employee, company -> employee.copy(company = company) } -) - -val companyAddress: Lens = Lens( - get = { it.address }, - set = { company, address -> company.copy(address = address) } -) - -val addressStrees: Lens = Lens( - get = { it.street }, - set = { address, street -> address.copy(street = street) } -) - -val streetName: Lens = Lens( - get = { it.name }, - set = { street, name -> street.copy(name = name) } -) - -val employeesStreetName: Lens = employees compose everyEmployee compose employeeCompany compose companyAddress compose addressStrees compose streetName - -employeesStreetName.getAll(employee) -``` - -## Composition - -Composing `Every` can be used for accessing and modifying foci in nested structures. - -`Traversal` can be composed with all optics, and results in the following optics: - -| | Iso | Lens | Prism |Optional | Getter | Setter | Fold | Traversal | -| --- | --- | --- | --- |--- | --- | --- | --- | --- | -| Every | Every | Every | Every | Every | Every | Every | Every | Every | - -### Polymorphic Every - -When dealing with polymorphic types, we can also have polymorphic `Every`s that allow us to morph the type of the foci. -Previously, we used a `Every, Int>`; it was able to morph the `Int` values in the constructed type `List`. -With a `PEvery, List, Int, String>`, we can morph an `Int` to a `String`, and thus, also morph the type from `List` to `List`. diff --git a/arrow-site/docs/docs/fold/README.md b/arrow-site/docs/docs/fold/README.md deleted file mode 100644 index 7e36d0731e8..00000000000 --- a/arrow-site/docs/docs/fold/README.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -layout: docs-optics -title: Fold -permalink: /optics/fold/ ---- - -## Fold - -A `Fold` is an optic that can see into a structure and get 0 to N foci. -It is a generalization of [`fold`](https://kotlinlang.org/docs/reference/collection-aggregate.html#fold-and-reduce), and implements all operators that can be derived from it. - -A structure `S` that has a focus `A` to which we can apply a function `(A) -> R` with `Monoid` to `S` and get `R`. -For example, `S == List` to which we apply `(Int) -> String` with `Monoid` and we get `R == String` - -Creating a `Fold` can be done by manually defining `foldMap`. - -```kotlin -import arrow.core.* -import arrow.optics.* -import arrow.typeclasses.* - -fun nullableFold(): Fold = object : Fold { - override fun foldMap(M: Monoid, s: T?, f: (T) -> R): R = - s?.let(f) ?: M.empty() -} -``` - -`Fold` has an API similar to `kotlin.collections`, but because it's defined in terms of `foldMap`, there are no associative fold functions available. - -```kotlin -nullableFold().isEmpty(null) -``` -```kotlin -Fold.nonEmptyList().combineAll(Monoid.int(), nonEmptyListOf(1, 2, 3)) -``` -```kotlin -nullableFold().firstOrNull(null) -``` -```kotlin -Fold.nonEmptyList().firstOrNull(nonEmptyListOf(1, 2, 3, 4)) -``` - -## Composition - -Composing `Fold` can be used for accessing foci in nested structures. - -```kotlin -val nestedNelFold: Fold>, NonEmptyList> = Fold.nonEmptyList() - -val nestedNel = nonEmptyListOf(1, 2, 3, 4).map { - nonEmptyListOf(it, it) -} - -(nestedNelFold compose Fold.nonEmptyList()).getAll(nestedNel) -``` - -`Fold` can be composed with all optics except `Setter`, and results in the following optics. - -| | Iso | Lens | Prism |Optional | Getter | Setter | Fold | Traversal | -| --- | --- | --- | --- |--- | --- | --- | --- | --- | -| Fold | Fold | Fold | Fold | Fold | Fold | X | Fold | Fold | diff --git a/arrow-site/docs/docs/fx/README.md b/arrow-site/docs/docs/fx/README.md deleted file mode 100644 index d0237c6d934..00000000000 --- a/arrow-site/docs/docs/fx/README.md +++ /dev/null @@ -1,255 +0,0 @@ ---- -layout: quickstart-fx -title: Arrow Fx. Async and Concurrent Functional Programming for Kotlin -permalink: /fx/ ---- - -
-[![Maven Central](https://img.shields.io/maven-central/v/io.arrow-kt/arrow-core?color=4caf50&label=latest%20release)](https://maven-badges.herokuapp.com/maven-central/io.arrow-kt/arrow-core) -[![Latest snapshot](https://img.shields.io/badge/dynamic/xml?color=orange&label=latest%20snapshot&prefix=v&query=%2F%2Fmetadata%2Fversioning%2Flatest&url=https%3A%2F%2Foss.sonatype.org%2Fservice%2Flocal%2Frepositories%2Fsnapshots%2Fcontent%2Fio%2Farrow-kt%2Farrow-core%2Fmaven-metadata.xml)](https://oss.sonatype.org/service/local/repositories/snapshots/content/io/arrow-kt/) -[![Kotlin version](https://img.shields.io/badge/Kotlin-1.4-blue)](https://kotlinlang.org/docs/reference/whatsnew14.html) -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0) -[![StackOverflow](https://img.shields.io/badge/arrow--kt-grey.svg?logo=stackoverflow)](https://stackoverflow.com/questions/tagged/arrow-kt) -[![Twitter](https://img.shields.io/twitter/follow/arrow_kt?color=blue&style=flat)](https://twitter.com/arrow_kt) -
- -
-
- -# Arrow Fx. Typed FP for the masses - -Arrow Fx is a next-generation Typed FP Effects Library that makes tracked effectful programming -first class in Kotlin built on top of Kotlin's suspend system -and [KotlinX Coroutines](https://kotlinlang.org/docs/reference/coroutines/coroutines-guide.html) -Arrow Fx is a functional companion to KotlinX Coroutines augmenting its api with well known -functional operators making it easier to compose async and concurrent programs. - -The library brings purity, referential transparency, and direct imperative syntax to typed FP in -Kotlin, and is a fun and easy tool for creating Typed Pure Functional Programs. - -If you're not familiar yet with Coroutines in Kotlin, it's recommended to first read Kotlin' -s [Coroutines Guide](https://kotlinlang.org/docs/coroutines-guide.html) on KotlinX Coroutines. -
- -
-## Arrow Fx Coroutines Overview - -
- -
-#### Quick Start - - [Gradle Setup]({{ '/fx/#Gradle-kotlin' | relative_url }}) - - [Maven Setup]({{ '/fx/#Maven' | relative_url }}) -
- -
-#### Extensions and data types - - [Parallel]({{ '/fx/parallel' | relative_url }}) - - [Schedule]({{ '/apidocs/arrow-fx-coroutines/arrow.fx.coroutines/-schedule/' | relative_url }}) - - [Resource]({{ '/apidocs/arrow-fx-coroutines/arrow.fx.coroutines/-resource/' | relative_url }}) - - [CircuitBreaker]({{ '/apidocs/arrow-fx-coroutines/arrow.fx.coroutines/-circuit-breaker' | relative_url }}) - - [Atomic]({{ '/apidocs/arrow-fx-coroutines/arrow.fx.coroutines/-atomic/' | relative_url }}) - - [STM]({{ '/apidocs/arrow-fx-stm/arrow.fx.stm/-s-t-m/' | relative_url }}) -
- -
-#### Integrating - - [Integrating with 3rd-party libraries]({{ '/fx/#integrating-with-3rd-party-libraries' | relative_url }}) -
- -
-#### Additional Information - - [Kotlin's Coroutines Guide](https://kotlinlang.org/docs/coroutines-guide.html) - - [Pure & Referentially Transparent Functions]({{ '/fx/purity-and-referentially-transparent-functions/' | relative_url }}) - - [Kotlin's Std Coroutines package]({{ '/fx/coroutines/' | relative_url }}) - - [Why suspend over IO monad]({{ '/effects/io/' | relative_url }}) - - [Semantics of Structured Concurrency and Effect]({{ '/arrow/core/continuations/' | relative_url }}) -
-
-
- - - -
-## Setup - -{: .setup-subtitle} -Configure Arrow for your project -
-
-![Jdk]({{ "/img/quickstart/jdk-logo.svg" | relative_url }} "jdk") - -Make sure to have the latest version of JDK 1.8 installed. -
-
-![Android]({{ "/img/quickstart/android-logo.svg" | relative_url }} "android") - - -Arrow supports Android starting on API 21 and up. -
-
- -
- -
- - - -
- - -
- -#### Basic Setup - -In your project's root `build.gradle.kts`, append this repository to your list: - -``` -allprojects { - repositories { - mavenCentral() - } -} -``` - -Add the dependencies into the project's `build.gradle.kts`: - -``` -dependencies { - implementation("io.arrow-kt:arrow-fx-coroutines:1.0.1") - implementation("io.arrow-kt:arrow-fx-stm:1.0.1") -} -``` - -#### BOM file - -To avoid specifying the Arrow version for every dependency, a BOM file is available: - -``` -dependencies { - implementation(platform("io.arrow-kt:arrow-stack:1.0.1")) - - implementation("io.arrow-kt:arrow-fx-coroutines") - implementation("io.arrow-kt:arrow-fx-stm") -} -``` - -#### Next development version - -If you want to try the latest features, replace `1.0.1` with one of the latest `alpha`, `beta` or `rc` publications. - -
- -
- -#### Basic Setup - -In your project's root `build.gradle`, append this repository to your list: - -```groovy -allprojects { - repositories { - mavenCentral() - } -} -``` - -Add the dependencies into the project's `build.gradle`: - -```groovy -def arrow_version = "1.0.1" -dependencies { - implementation "io.arrow-kt:arrow-fx-coroutines:$arrow_version" - implementation "io.arrow-kt:arrow-fx-stm:$arrow_version" -} -``` - -#### BOM file - -To avoid specifying the Arrow version for every dependency, a BOM file is available: - -```groovy -def arrow_version = "1.0.1" -dependencies { - implementation platform("io.arrow-kt:arrow-stack:$arrow_version") - - implementation "io.arrow-kt:arrow-fx-coroutines" - implementation "io.arrow-kt:arrow-fx-stm" -} -``` - -#### Next development version - -If you want to try the latest features, replace `1.0.1` with one of the latest `alpha`, `beta` or `rc` publications. - -
- -
- -#### Basic Setup - -Make sure to have at least the latest version of JDK 1.8 installed. Add to your pom.xml file the -following properties: - -```xml - - 1.6.10 - 1.0.1 - -``` - -Add the dependencies that you want to use: - -```xml - - - io.arrow-kt - arrow-core - ${arrow.version} - -``` - -#### BOM file - -To avoid specifying the Arrow version for every dependency, a BOM file is available: - -```xml - - - - - io.arrow-kt - arrow-stack - ${arrow.version} - pom - import - - - -... - -``` - -#### Next development version - -If you want to try the latest features, replace `1.0.1` with one of the latest `alpha`, `beta` or `rc` publications. - -
-
- -
- -
-## Integrating with 3rd-party libraries - -Arrow Fx integrates with KotlinX Coroutines Fx, Reactor framework, and any library that can model -effectful async/concurrent computations as `suspend`. - -If you are interested in the Arrow Fx library, please contact us in the #Arrow channel on the -official [Kotlin Lang Slack](https://kotlinlang.slack.com/messages/C5UPMM0A0) with any questions and -we'll help you along the way. -
-
diff --git a/arrow-site/docs/docs/fx/coroutines/README.md b/arrow-site/docs/docs/fx/coroutines/README.md deleted file mode 100644 index c753fc74a84..00000000000 --- a/arrow-site/docs/docs/fx/coroutines/README.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -layout: docs-fx -title: "Kotlin Std Coroutines package" -permalink: /fx/coroutines/ ---- - -# Kotlin Std Coroutines & Arrow Computation blocks - -Arrow computation blocks are built on top of Kotlin Std's Coroutines intrinsics and don't depend on the KotlinX Coroutines library. -Computation blocks support cancellation automatically observing [`CancellationException`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.cancellation/-cancellation-exception/) available in the Kotlin Standard Library. - -Let's take a deeper look at what we can find in the Kotlin Std Coroutines package. - -## Demystify Coroutine - -Kotlin's standard library defines a `Coroutine` as an instance of a suspendable computation. - -In other words, a `Coroutine` is a compiled `suspend () -> A` program wired to a `Continuation`. - -Which can be created by using [`kotlin.coroutines.intrinsics.createCoroutineUnintercepted`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.intrinsics/create-coroutine-unintercepted.html). - -So let's take a quick look at an example. - -```kotlin -import kotlin.coroutines.intrinsics.createCoroutineUnintercepted -import kotlin.coroutines.Continuation -import kotlin.coroutines.EmptyCoroutineContext -import kotlin.coroutines.resume - -suspend fun one(): Int = 1 - -val cont: Continuation = ::one - .createCoroutineUnintercepted(Continuation(EmptyCoroutineContext, ::println)) - -cont.resume(Unit) -``` - -As you can see here above we create a `Coroutine` using `createCoroutineUnintercepted` which returns us `Continuation`. -Strange, you might've expected a `Coroutine` type but a `Coroutine` in the type system is represented by `Continuation`. - -This `typealias Coroutine = Contination` will start running every time you call `resume(Unit)`, which allows you to run the suspend program as many times as you want. - -## Kotlin Standard Library Coroutines - -The standard library offers a powerful set of primitives to build powerful applications on top of `Continuation`s, -together with the compiler's ability to rewrite continuation based code to a beautiful `suspend` syntax. - -They can be used to implement a very wide range use-cases, and or *not* bound to asynchronous -or concurrency use-cases. - -- Arrow Core, offers [computational DSLs]({{ '/apidocs/arrow-core/arrow.core.continuations/-effect/' | relative_url }}) build on top of Kotlin's Coroutines `either { }`, `effect { }`, `eagerEffect { }`, etc. - -- [`DeepRecursiveFunction`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-deep-recursive-function/) explained [here](https://medium.com/@elizarov/deep-recursion-with-coroutines-7c53e15993e3) - -- [Semantics of Structured Concurrency and Effect]({{ '/arrow/core/continuations/' | relative_url }}) - -The above image is not exhaustive list of the primitives you can find in the standard library. -For an exhaustive list check the Kotlin Standard Library API docs: - - - [`kotlin.coroutines`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines/) - - - [`kotlin.coroutines.intrinsics`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.intrinsics/) diff --git a/arrow-site/docs/docs/fx/parallel/README.MD b/arrow-site/docs/docs/fx/parallel/README.MD deleted file mode 100644 index 5f58d80b090..00000000000 --- a/arrow-site/docs/docs/fx/parallel/README.MD +++ /dev/null @@ -1,170 +0,0 @@ ---- -layout: docs-fx -title: "Parallel combinators" -permalink: /fx/parallel/ ---- - -# Parallel functions - -Arrow Fx benefits from the `suspend` syntax for very succinct programs without callbacks. -This allows us to use direct style syntax with asynchronous, concurrent and parallel operations while preserving effect control in the types and runtime. -The resulting expressions enjoy the same syntax that most OOP and Java programmers are already accustomed to—direct blocking imperative style. - -This page discuss the semantics of parallel operations in Arrow Fx, which follows the system of Structured Concurrency. - -You can find all functions and extension functions for Kotlin's Std in the API docs [here](/docs/apidocs/arrow-fx-coroutines/arrow.fx.coroutines/index.html#functions). - -## Parallelization & Concurrency - -Arrow Fx comes with a set of built-in concurrent and parallel functions and data types that accompany what you find in KotlinX Coroutines. This allows users to write complex parallel and concurrent code in suspend style, in a elegant and imperative way without wrappers. - -To follow [Structured Concurrency](https://kotlinlang.org/docs/composing-suspending-functions.html#structured-concurrency-with-async), all parallel suspend operators in Arrow Fx behave in the following way: - -#### Parallel exceptions - -All parallel functions guarantee that when one of their children fails that all other children will be cancelled before the parallel function returns. This allows the other paralell running tasks to gracefully exit and close their resources before the parallel function returns. - -``` -import arrow.fx.coroutines.* -import kotlinx.coroutines.* - -//sampleStart -suspend fun main(): Unit = coroutineScope { - val fiber = async { - parZip({ - delay(100) - throw RuntimeException("Boom") - }, { - guaranteeCase({ - never() - }) { exitCase -> println("I never complete: $exitCase") } - }) { _, _ -> println("I am never called!") } - } - - delay(200) // Wait until after task 1 threw - fiber.await() -} - -//sampleEnd -I never complete: Cancelled(exception=kotlinx.coroutines.JobCancellationException: Parent job is Cancelling; job=ScopeCoroutine{Cancelling}@157f5e97) - -Exception in thread "main" java.lang.RuntimeException: Boom - at TestKt$main$2$fiber$1$invokeSuspend$$inlined$parZip$1$1.invokeSuspend(ParZip.kt:679) - at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) - at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) - at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) - at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) - at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) - at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665) -``` - - In the snippet above we can see that the second task _never_ completes, and it gets cancelled with `ExitCase.Cancelled` by the `RuntimeException` that occurs in the first task. - After `parZip` has gracefully finished, it will rethrow the original `RuntimeException`. - - All parallel operators you find in Arrow Fx Coroutines follow this same pattern when exceptions occur. - -#### Parallel cancellation - -All parallel functions guarantee that if they get cancelled, that all children will also get cancelled before the parallel function returns. This allows the other parallel running tasks to gracefully exit and close their resources before returning. - -``` -import arrow.fx.coroutines.* -import kotlinx.coroutines.* - -//sampleStart -suspend fun main(): Unit = coroutineScope { - val fiber = async { - parZip({ - guaranteeCase({ - // Finish immediately - }) { exitCase -> println("I completed immediately: $exitCase") } - }, { - guaranteeCase({ - never() - }) { exitCase -> println("I never complete: $exitCase") } - }) { _, _ -> println("I am never called!") } - } - - delay(50) - fiber.cancel() - fiber.await() -} - -//sampleEnd -I completed immediately: ExitCase.Completed - -I never complete: Cancelled(exception=kotlinx.coroutines.JobCancellationException: DeferredCoroutine was cancelled; job=DeferredCoroutine{Cancelling}@56783f97) - -Exception in thread "main" kotlinx.coroutines.JobCancellationException: DeferredCoroutine was cancelled; job=DeferredCoroutine{Cancelled}@56783f97 -``` - - In the snippet above we can see that first task finished immediately and prints `ExitCase.Completed`, the second task _never_ completes, and it gets cancelled with `ExitCase.Cancelled` by the parent scope. - After `parZip` has gracefully cancelled all its children, `async` will throw the `JobCancellationException`. - - All parallel operators you find in Arrow Fx Coroutines follow this same pattern when exceptions occur. - -### Co-operative cancellation / Semi-Automatic cancellation - -The cancellation system is inherited from KotlinX Coroutines and works the same. See [KotlinX Coroutines documentation on cancellation](https://kotlinlang.org/docs/reference/coroutines/cancellation-and-timeouts.html). - -All operators found in Arrow Fx check for cancellation, and make your `suspend` code cancellable. - -A small example of an infinite loop below, where `parZip` checks for cancellation and the `sleeper` function is cancellable even though it runs in an infinite recursion loop. - -```kotlin -import arrow.fx.coroutines.* -import kotlinx.coroutines.* - -//sampleStart -tailrec suspend fun sleeper(): Unit { - println("I am sleepy. I'm going to nap") - parZip( // <-- cancellation check-point - { Thread.currentThread().name }, - { Thread.currentThread().name } - ) { a, b -> println("A on $a, B on $b") } - println("Too short nap.. Going to sleep some more") - sleeper() // <-- cancellation check-point -} - -suspend fun main(): Unit = coroutineScope { - val fiber = async { - guaranteeCase({ sleeper() }) { exitCase -> - println("Somebody woke me up with $exitCase") - } - } - delay(100) - fiber.cancel() -} -//sampleEnd -``` - -### Racing parallel operations - -Racing parallel tasks has an additional propety to the ones described above. - -When racing multiple parallel tasks against each-other, the winning task cancels the others. When the winner of a race is known, we can cancel all other tasks because their results will get discarded anyway. -This allows the other paralell running tasks to gracefully exit and close their resources as soon as possible. - -```kotlin -import arrow.fx.coroutines.* - -//sampleStart -suspend fun main(): Unit { - val winner = raceN({ - guaranteeCase({ never() }) { exitcase -> - println("I can never win the race. Finished with $exitcase") - } - }, { - "I am going to win, immediately" - }) - println(winner) -} -//sampleEnd -I can never win the race. Finished with Cancelled(exception=kotlinx.coroutines.JobCancellationException: DeferredCoroutine was cancelled; job=DeferredCoroutine{Cancelling}@89897d5) - -Either.Right(I am going to win, immediately) -``` - -Here we see that if we race a first task that is never going to finish with a second task that wins immediately, the first losing task gets cancelled before we declare the second task the winner. - -So this also follows the pattern of [Structured Concurrency](https://kotlinlang.org/docs/composing-suspending-functions.html#structured-concurrency-with-async), where all children are completed before continuing. diff --git a/arrow-site/docs/docs/fx/purity-and-referentially-transparent-functions/README.MD b/arrow-site/docs/docs/fx/purity-and-referentially-transparent-functions/README.MD deleted file mode 100644 index 90dc7ac0869..00000000000 --- a/arrow-site/docs/docs/fx/purity-and-referentially-transparent-functions/README.MD +++ /dev/null @@ -1,129 +0,0 @@ ---- -layout: docs-fx -title: "Kotlin Standard Library and Arrow Fx Coroutines" -permalink: /fx/purity-and-referentially-transparent-functions/ ---- - -## Pure & Referentially Transparent Functions - -A pure function is a function that consistently returns the same output when given the same input. -Pure functions exhibit a deterministic behavior and cause no observable effects externally. We call this property referential transparency. - -Referential transparency allows us to reason about the different pieces of our program in isolation. - -To create a pure function in Kotlin, let's use the keyword `fun`: - -```kotlin -//sampleStart -fun helloWorld(): String = - "Hello World" - -//sampleEnd -fun main() { - println(helloWorld()) -} -``` - -We can state that `helloWorld` is a pure and referentially transparent function because invoking `helloWorld()` consistently returns the same output given the same input, and does not produce observable changes in the external world. - -## Side effects - -A side effect is an externally observable effect a function performs in addition to returning a value. - -Performing network or file I/O, writing to streams, and, in general, all functions that return `Unit` are very likely to produce side effects. That's because a `Unit` return value denotes *no useful return*, which implies that the function does nothing but perform effects. - -In Arrow Fx, we use `suspend fun` to denote a function that may cause side effects when invoked. - -In the example below, `println(a : Any): Unit` is a side effect because, every time it's invoked, it causes observable effects by interacting with the `System.out` stream and signals that it produces no useful output by returning `Unit`. - -When we denote side effects as `suspend`, the Kotlin compiler will ensure that we're not applying uncontrolled side effects in the pure environment. - -```kotlin -//sampleStart -fun helloWorld(): String = - "Hello World" - -suspend fun sayHello(): Unit = - println(helloWorld()) - -fun main() { - sayHello() -} -//sampleEnd -``` - -Compiling the snippet above will result in `javax.script.ScriptException: error: suspend function 'sayHello' should be called only from a coroutine or another suspend function` compilation error for `sayHello` call. - -The Kotlin compiler disallows the invocation of suspended functions in the pure environment because `suspend fun` requires declaration inside another suspended function or a continuation. - -A continuation is a Kotlin Interface, `Continuation
`, that proves we know how to handle success and error cases resulting from running the suspended effect. - -This is a great built-in feature of the Kotlin compiler that already makes it an ideal choice for Typed FP, but it's not the only one. - -Continue reading on if you're curious to see how the Kotlin Compiler and Arrow Fx can eliminate many of the functional idioms by using direct syntax, over effect monads. - -#### `suspend` composition - -Applying and composing suspended side effects is allowed in the presence of other suspended side effects. - -In the example below, `sayHello` and `sayGoodBye` are valid inside `greet` because they are all suspended functions. - -```kotlin -suspend fun sayGoodBye(): Unit = - println("Good bye World!") - -suspend fun sayHello(): Unit = - println("Hello World") - -suspend fun greet(): Unit { - sayHello() // this is ok because - sayGoodBye() // `greet` is also `suspend` -} -``` - -## Executing effectful programs - -The `greet` program is ready to run as soon as the user is ready to commit to an execution strategy that is either `blocking` or `non-blocking`. -`blocking` execution strategies will block the current thread that's waiting for the program to yield a value, whereas `non-blocking` strategies will immediately return and perform the program's work without blocking the current thread. -Since both blocking and non-blocking execution scenarios perform side effects, we consider running effects as an `unsafe` operation. - -KotlinX Coroutines offers `runBlocking`, `launch` and `async` to run a suspended program. -Usage of unsafe runner functions (like `runBlocking` in this case) is reserved for the end of the world and may be the only impure execution of a well-typed functional program. -`launch` and `async` can however also be used in pure/safe ways if they're used within another `suspend fun`. - -```kotlin -import kotlinx.coroutines.* -import arrow.fx.coroutines.* - -//sampleStart -suspend fun sayHello(): Unit = - println("Hello World") - -suspend fun sayGoodBye(): Unit = - println("Good bye World!") - -suspend fun greet(): Unit { - sayHello() - sayGoodBye() -} - -fun main(): Unit = runBlocking { // The edge of our world - greet() -} -//sampleEnd -``` - -Arrow Fx emphasizes the guarantee that users understand where they are performing side effects in their program declaration. - -If you're not very familiar with Functional Programming, and you've made it this far, you may realize that, despite the buzzwords and some FP jargon, you already know how to use Arrow Fx in general. -This is because Arrow Fx brings the most popular imperative style to effectful programs with few simple primitives for effect control and asynchronous programming. - -# Conclusion - -Arrow Fx offers an idiomatic way of doing effectfull FP with Kotlin's coroutine system. -It does this by providing support for cancellation, error handling, resource handling, and all features you might be familiar with from other functional effect systems. - -Arrow Fx offers direct style syntax and effect control without compromises, and removes the syntactic burden of type parametrization while still yielding programs that are pure, safe, and referentially transparent. - - -Come check out Arrow fx and join the discussion in the [Kotlin Slack](https://kotlinlang.slack.com/messages/C5UPMM0A0) and [Gitter](https://gitter.im/arrow-kt/Lobby) diff --git a/arrow-site/docs/docs/getter/README.md b/arrow-site/docs/docs/getter/README.md deleted file mode 100644 index ac4f55802d0..00000000000 --- a/arrow-site/docs/docs/getter/README.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -layout: docs-optics -title: Getter -permalink: /optics/getter/ ---- - -## Getter - - -A `Getter` is an optic that can focus into a structure and `get` its focus. -It can be seen as a wrapper of a get function `(S) -> A` that can be composed with other optics. - -Creating a `Getter` can be done by referencing a property of a data classes or by providing a function. - -```kotlin -import arrow.optics.* -import arrow.* - -data class Player(val health: Int) - -val healthGetter = Getter(Player::health) -val player = Player(75) -healthGetter.get(player) -``` -```kotlin -import arrow.core.* - -fun nonEmptyListHead() = Getter, T> { - it.head -} - -nonEmptyListHead().get(nonEmptyListOf(1, 2, 3, 4)) -``` - -Or, from any of the optics defined in `arrow-optics` that allow getting its focus safely. - -```kotlin -import arrow.core.* -import arrow.optics.* - -val headGetter: Getter, String> = Lens.nonEmptyListHead() -val tupleGetter: Getter, String> = PLens.pairFirst() -``` - -## Composition - -Unlike a regular `get` function, a `Getter` composes. Similar to a `Lens`, we can compose `Getter`s to create telescopes and zoom into nested structures. - -```kotlin -val firstBar: Getter, Int> = Lens.nonEmptyListHead() compose healthGetter -firstBar.get(Player(5).nel()) -``` - -`Getter` can be composed with `Getter`, `Iso`, `Lens`, and `Fold`, and the composition results in the following optics: - -| | Iso | Lens | Prism |Optional | Getter | Setter | Fold | Traversal | -| --- | --- | --- | --- |--- | --- | --- | --- | --- | -| Getter | Getter | Getter | X | X | Getter | X | Fold | X | diff --git a/arrow-site/docs/docs/integrations/kindedj/README.md b/arrow-site/docs/docs/integrations/kindedj/README.md deleted file mode 100644 index 8eda6972bc0..00000000000 --- a/arrow-site/docs/docs/integrations/kindedj/README.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -layout: docs-core -title: KindedJ -permalink: /integrations/kindedj/ ---- - -## KindedJ - -[KindedJ](https://github.com/KindedJ/KindedJ/) is a project to create an interop layer between multiple libraries that emulate [higher kinds]({{ '/patterns/glossary' | relative_url }}) in the JVM -using lightweight higher kind polymorphisms. You can read more about this emulation in [KindedJ's Readme](https://github.com/KindedJ/KindedJ/blob/master/README.md). - -### Generation of KindedJ interfaces - -Annotating a [datatype]({{ '/patterns/glossary' | relative_url }}) with `@higherkind` will create a typealias `KindedJ` that'll be directly available to be used by any other libraries that use [KindedJ](https://github.com/KindedJ/KindedJ/). -Due to the difference in [generics between Kotlin and Java](https://kotlinlang.org/docs/reference/generics.html), this typealias will only be generated if all the generic parameters of the datatype are invariant. - -Working with datatypes whose generic parameters are not invariant requires a conversion layer. - -### Conversion module - -The arrow-kindedj module provides a conversion layer between Arrow and KindedJ where the Kotlin generics `in` and `out` get on the way. - -It uses an integration construct called `Convert`, alongside several extension functions. - -#### Using KindedJ in Arrow from Kotlin - -Using the conversion layer, we're able to use an intermediate representation of any KindedJ datatype generically by converting it into a `Kind2`, -where F is the [original representation of the container]({{ '/patterns/glossary' | relative_url }}). - -Let's see an example of a Java class defined by a third party: - -```java -class IdJ implements io.kindedj.Hk { - public A a; -} -``` - -You can convert it to Arrow using the extension function `fromKindedJ()`: - -```kotlin -val idj = IdJ(1) - -val id: Kind2 = idj.fromKindedJ() -``` - -and convert it back using `fromArrow()`: - -```kotlin -val idj2: io.kindedj.Hk = id.fromArrow() -``` - -#### Using Arrow in KindedJ from Java - -Using the conversion layer, we're able to use an intermediate representation of any Arrow datatype generically by converting it into a `io.kindedj.Hk2`, -where F is the [original representation of the container]({{ '/patterns/glossary' | relative_url }}). Note that the typealias `io.kindedj.Hk2` is only available in Kotlin. - -#### How to work with the conversion layer - -It is important to understand that the integration with KindedJ works at a level of genericity where values inside one of the intermediate representations cannot be accessed directly. -It's required to use the constructs inside Arrow or the 3rd party lib implementing KindedJ to be able to use functions like `map` or `flatMap`. - -Further integration in KindedJ of constructs such as [typeclasses]({{ '/patterns/glossary' | relative_url }}) is in the KindedJ org's roadmap. diff --git a/arrow-site/docs/docs/io/README.md b/arrow-site/docs/docs/io/README.md deleted file mode 100644 index 0a139b48c98..00000000000 --- a/arrow-site/docs/docs/io/README.md +++ /dev/null @@ -1,221 +0,0 @@ ---- -layout: docs-fx -title: IO -permalink: /effects/io/ ---- - -## IO - -IO is being deprecated in Arrow in favor of Arrow Fx Coroutines which transparently integrates with Kotlin suspend functions and the KotlinX Coroutines library. - -Arrow has adopted suspend as system to model monadic computations and offers the same api and additional features as top level extensions functions over `suspend () -> A` whereas before it was `IO`. -Some functions like flatMap are now replaced by simple function invocation. - -## Why `suspend () -> A` instead of `IO` - -This section explains the rationale about why Arrow dropped `IO` in favor of `suspend`. - -The reason for using `IO` is because you care about writing side-effecting code in a safe and referential transparent manner. -Additionally, `IO` offers powerful concurrent operators and cancellation in addition of offering a referential transparent runtime. -These properties are what makes using `IO` powerful, and `suspend` offers the exact same properties but natively in the language with support from the compiler. - -Below we discuss a couple topics why we favor `suspend` over `IO`. - -### Ergonomics - -`IO` requires a wrapper in the return type: `fun number(): IO`, and thus we always have to work with the `IO` type to access the value we care about within. -A typical pattern for this using `flatMap`, so let's say we want to calculate 3 numbers and return them as a `Triple`. - -```kotlin -fun number(): IO = IO.just(1) - -fun triple(): IO> = - number().flatMap { a -> - number().flatMap { b -> - number().map { c -> - Triple(a, b, c) - } - } - } -``` - -So simply to call a function 3 times, and combine the result into a `Triple` we had to use `flatMap` twice and `map`. -What that means under the hood we'll discuss in the performance section but in terms of ergonomics this is not ideal. -Especially not if we can compare it to the following `suspend` code: - -```kotlin -suspend fun number(): Int = 1 - -suspend fun triple(): Triple = - Triple(number(), number(), number()) -``` - -Here we can see that we can simply forget about `flatMap` & `map` and we can simply construct the `Triple` and call `number()` three times directly in the constructor. - -The ergonomics of `suspend` are clearly better here, and this is a very important point in Kotlin since the language aims for high ergonomics and developer friendly constructs. - -### Safety / Purity / Referential transparency - -So what guarantees does `IO` bring, and does `suspend` offer the same guarantees? - -`IO` always results in `Either` whether we run it with `unsafeRunSync` (throws Throwable), `unsafeRunAsync` or `unsafeRunAsyncCancellable`. -This is done so that any exceptions that occur within the `IO` API can be safely returned to the user, and it can be recovered from at any point in the code. -Important here is that a `Throwable` that occurs in an async thread is safely captured in the `IO` as well and can be recovered from at any point. - -`suspend` always results in `Result` which is isomorphic to `Either`, and it can be used to offer the same safety guarantees as `IO`. -So the `suspend` API can also always return any exception safely to the user, and it can be recovered from at any point in the code. -In contrast to `IO`, we can only find `startCoroutine` in the standard library and it's isomorphic to `unsafeRunAsync`. -Instead of `f: (Either) -> Unit` you provide `f: (Result) -> Unit` to run the `suspend () -> A` program. - -So `suspend () -> A` offers us the exact same guarantees as `IO`. - -Both also forces us to go through certain set of methods to execute/run the effectful program. - -### Monad transformers vs effect mixing - -#### IO> vs suspend () -> Either - -When writing functional code style we often want to express our domain errors as clearly as possible, a popular pattern is to return `Either`. -Let's assume following domain, and compare two snippets one using `IO>` and another `suspend () -> Either`. - -```kotlin -import arrow.core.Either -import arrow.core.Either.Left -import arrow.core.Either.Right - -/* inline */ class Id(val id: Long) -object PersistenceError - -data class User(val email: String, val name: String) -data class ProcessedUser(val id: Id, val email: String, val name: String) - -suspend fun fetchUser(): Either = - Right(User("simon@arrow-kt.io", "Simon")) - -suspend fun User.process(): Either = - if (email.contains(Regex("^(.+)@(.+)$"))) Right(ProcessedUser(Id(1), email, name)) - else Left(PersistenceError) -``` - -###### IO> - - ```kotlin -import arrow.fx.* - -fun ioProgram(): IO> = - IO.fx { - val res = !IO.effect { fetchUser() } - - !res.fold({ error -> - IO.just(Either.Left(error)) - }, { user -> - IO.effect { user.process() } - }) - } - -// Or unwrapped in `suspend` -suspend suspendedIOProgram(): Either = - ioProgram().suspended() - ``` - -##### suspend () -> Either - -```kotlin -import arrow.core.computations.either - -suspend fun suspendProgram(): Either = - either { - val user = fetchUser().bind() - val processed = user.process().bind() - processed - } -``` -The above two examples demonstrate how much simpler `suspend` is over its `IO` counterpart and how the `either` computation block allows us to bind values of `Either` to extract their right side all while inside `suspend`. - -Arrow Fx allows to intermix effects in suspension. What otherwise would have required the `EitherT` transformer over `IO` now it can just be expressed by wrapping in `either` instead -#### suspend R.() -> A - -We can use extension functions to do functional dependency injection with similar semantics as `Reader` or `Kleisli`. -They allow us to elegantly define `syntax` for a certain type. Let's see a simple example. - -Let's reuse our previous domain of`User`, `ProcessedUser`, but let's introduce `Repo` and `Persistence` layers to mimick what could be a small app with a couple layers. - -```kotlin -interface Repo { - suspend fun fetchUsers(): List -} - -interface Persistence { - suspend fun User.process(): Either - - suspend fun List.process(): Either> = - either { map { it.process().bind() } } -} -``` - -Given the above defined layers we can easily compose them by creating a product which implements the dependencies by delegation. - -```kotlin -class DataModule( - persistence: Persistence, - repo: Repo -) : Persistence by persistence, Repo by repo -``` - -We can also define top-level functions based on constraints on the receiver. -Here we define `getProcessedUsers` which can only be called where `R` is both `Repo` and `Persistence`. - -```kotlin -/** - * Generic top-level function based on syntax enabled by [Persistence] & [Repo] constraint - */ -suspend fun R.getProcessedUsers(): Either> - where R : Repo, - R : Persistence = fetchUsers().process() -``` - -### Performance - -`suspend` is extremely fast in comparison to `IO`, since `IO` is build at runtime and `suspend` is build by the compiler. - -Working with an ADT such as `IO` implies that each composition of our program has some allocation cost. -This happens because the IO ADT uses different data classes to move computation from the stack to the heap in order to compose them and preserve properties such as lazy evaluation semantics. - -In contrast, when using `suspend`, the Kotlin compiler is aware of function composition on each suspension point and can desugar and specialise the program into more efficient target code. The generated code by the Kotlin compiler is better in terms of allocations and throughput when compared to other IO ADT based impls in the JVM. - -Let's take our previous example from ergonomics: - -```kotlin -import arrow.fx.IO - -fun number(): IO = IO.just(1) - -fun triple(): IO> = - number().flatMap { a -> - number().flatMap { b -> - number().map { c -> - Triple(a, b, c) - } - } - } -``` - -If we translate this piece of code to the `data class` it uses it results in the following: - -```kotlin -fun number(): IO = IO.Just(1) - -fun triple(): IO> = - IO.Bind(IO.Just(1)) { a -> - IO.Bind(IO.Just(1)) { b -> - IO.Map(IO.Just(1)) { c -> Triple(a, b, c) } - } - } -``` - -We can see that for this simple program we allocated 6 `IO` cases of the `IO` `sealed class`. -This is necessary so when `unsafeRun` is invoked the `IO` program can find the branch representing the kind of operation of `IO` that needs to be interpreted. In the example above `IO.Bind`, `IO.Map` or `IO.Just` - -In contrast, `suspend` can simply be wired by the Kotlin compiler eliminating the need for additional `sealed class` declarations and allocations keeping computations in the stack instead of maintaining value level in memory representations of our program. -The Kotlin compiler rewrites the suspend program to a super fast runtime which uses a switch table and mutable state machine to run the `suspend` program. -Furthermore, the Kotlin compiler applies other optimisations focused on the speed of `suspend` and memory usage of suspension making it suitable for hotspots and places where otherwise allocations or ADT based data types are not an option. diff --git a/arrow-site/docs/docs/iso/README.md b/arrow-site/docs/docs/iso/README.md deleted file mode 100644 index 67a3718feb6..00000000000 --- a/arrow-site/docs/docs/iso/README.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -layout: docs-optics -title: Iso -permalink: /optics/iso/ ---- - -## Iso - - -An `Iso` is a lossless invertible optic that defines an isomorphism between a type `S` and `A` (i.e., a data class and its properties represented by `TupleN`). - -Isos can be seen as a pair of functions that represent an isomorphism, `get`, and `reverseGet`. So, an `Iso` represents two getters: `get: (S) -> A` and `reverseGet: (A) -> S`, where `S` is called the source of the `Iso`, and `A` is called the focus or target of the `Iso`. - -A simple structure `Point2D` is equivalent to `Pair`, so we can create an `Iso>` - -```kotlin -import arrow.* -import arrow.core.* -import arrow.optics.* - -data class Point2D(val x: Int, val y: Int) - -val pointIsoPair: Iso> = Iso( - get = { point -> point.x to point.y }, - reverseGet = { (a, b) -> Point2D(a, b) } -) - -val point = Point2D(6, 10) -point -``` -```kotlin -val pair = pointIsoPair.get(point) -pair -``` -```kotlin -pointIsoPair.reverseGet(pair) -``` - -Given an `Iso>`, we also have an `Iso, Point2D>`. Since it represents an isomorphism between equivalent structures, we can reverse it. - -```kotlin -val reversedIso: Iso, Point2D> = pointIsoPair.reverse() -``` - -Using an `Iso`, we can modify our source `S` with a function that works on our focus `A`. - -```kotlin -val addFive: (Pair) -> Pair = { (a, b) -> (a + 5) to (b + 5) } -pointIsoPair.modify(point, addFive) -``` - -A function `(A) -> A` can be lifted to a function `(S) -> S` - -```kotlin -val liftedAddFive: (Point2D) -> Point2D = pointIsoPair.lift(addFive) -liftedAddFive(point) -``` - -### Composition - -By composing Isos, we can create additional Isos without defining them. When dealing with different APIs or frameworks, we frequently run into multiple equivalent but different structures like `Point2D`, `Pair`, `Coord`, etc. - -```kotlin -data class Coord(val xAxis: Int, val yAxis: Int) - -val pairIsoCoord: Iso, Coord> = Iso( - get = { pair -> Coord(pair.first, pair.second) }, - reverseGet = { coord -> coord.xAxis to coord.yAxis } -) -``` - -By composing `pointIsoPair` and `pairIsoCoord` (and/or reversing), we can use `Point2D`, `Pair`, and `Coord` interchangeably as we can lift functions to the required structure. - -Composing an `Iso` with functions can also be useful for changing the input or output type of a function. The `Iso>` is available in `arrow-optics` as `PIso.nullableToOption()`. - -```kotlin -val unknownCode: (String) -> String? = { value -> - "unknown $value" -} - -val nullableOptionIso: Iso> = PIso.nullableToOption() -(unknownCode andThen nullableOptionIso::get)("Retrieve an Option") -``` - -`Iso` can be composed with all optics, and composing them results in the following optics: - -| | Iso | Lens | Prism |Optional | Getter | Setter | Fold | Traversal | -| --- | --- | --- | --- |--- | --- | --- | --- | --- | -| Iso | Iso | Lens | Prism | Optional | Getter | Setter | Fold | Traversal | - -### Generating isos - -To avoid boilerplate, Isos can be generated for a `data class` to `TupleN` with two to 10 parameters by the `@optics` annotation. -The `Iso` will be generated as a extension property on the companion object `val T.Companion.iso`. - -```kotlin -@optics data class Pos(val x: Int, val y: Int) { - companion object -} -``` -```kotlin -val iso: Iso> = Pos.iso -``` - -### Polymorphic Isos -When dealing with polymorphic equivalent structures, we can create polymorphic Isos allowing us to morph the type of the focus (and, as a result, the constructed type) of our `PIso`. - -Given our previous structures `Pair` and a structure `Tuple2`, we can create a polymorphic `PIso` that represents a `get: (Pair) -> Tuple2` and a `reverseGet: (Tuple2 Pair`. - -```kotlin -data class Tuple2(val a: A, val b: B) { - fun reversed(): Tuple2 = - Tuple2(b, a) -} - -fun pair(): PIso, Pair, Tuple2, Tuple2> = PIso( - { (a, b) -> Tuple2(a, b) }, - { (a, b) -> a to b } -) -``` - -`PIso` (defined above) can lift a `reverse` function of `(Tuple2) -> Tuple2` to a function `(Pair) -> Pair`, -this allows us to use functions defined for `Tuple2` for a value of type `Pair`. - -```kotlin -val reverseTupleAsPair: (Pair) -> Pair = - pair().lift(Tuple2::reversed) - -val reverse: Pair = reverseTupleAsPair(5 to "five") -reverse -//(five, 5) -``` - -### Laws - -Arrow provides [`IsoLaws`][iso_laws_source]{:target="_blank"} in the form of test cases for internal verification of lawful instances and third party apps creating their own isos. - -[iso_laws_source]: https://github.com/arrow-kt/arrow/blob/main/modules/core/arrow-test/src/main/kotlin/arrow/test/laws/IsoLaws.kt diff --git a/arrow-site/docs/docs/lens/README.md b/arrow-site/docs/docs/lens/README.md deleted file mode 100644 index 2c40f7c9cb8..00000000000 --- a/arrow-site/docs/docs/lens/README.md +++ /dev/null @@ -1,150 +0,0 @@ ---- -layout: docs-optics -title: Lens -permalink: /optics/lens/ ---- - -## Lens - - -Optics are essentially abstractions to update immutable data structures in an elegant way. -A `Lens` (aka functional reference) is an optic that can focus into a structure and `get`, `modify`, or `set` its focus (target). They're mostly used for `product types` such as a `data class` or a `TupleN`. - -Lenses can be seen as a pair of functions, a getter, and a setter. A `Lens` represents a getter: `get: (S) -> A`, and `setter: (A) -> (S) -> S`, where `S` is called the source of the `Lens` and `A` is called the focus or target of the `Lens`. - -Given a simple structure `Player`, we can create a `Lens` to get, set, or modify its value. - -```kotlin -import arrow.optics.* - -data class Player(val health: Int) - -val playerLens: Lens = Lens( - get = { player -> player.health }, - set = { player, value -> player.copy(health = value) } -) - -val player = Player(70) -``` -```kotlin -playerLens.get(player) -``` -```kotlin -playerLens.set(player, 100) -``` -```kotlin -playerLens.modify(player) { it - 20 } -``` - -We can also `lift` above function `(Int) -> Int` to `(Player) -> Player`. - -```kotlin -val lift: (Player) -> Player = playerLens.lift { it + 10 } -lift(player) -``` - -### Composition - -By composing lenses, we can create a telescope that allows us to focus in on nested structures. - -At first sight, a `Lens` does not seem very useful, as it is just a getter/setter with some convenience methods. But lenses solve a couple of problems such as the composition of getters and setters. By default, getters and setters do not compose, and dealing with nested structures can be cumbersome. - -Let's examine the following example. We have an `Employee`, and he works for a certain `Company` located at a certain `Address` on a `Street`. And, as a business requirement, we have to capitalize `Street::name` in order to print nicer business cards. - -```kotlin -data class Street(val number: Int, val name: String) -data class Address(val city: String, val street: Street) -data class Company(val name: String, val address: Address) -data class Employee(val name: String, val company: Company) -``` -```kotlin -val employee = Employee("John Doe", Company("Arrow", Address("Functional city", Street(23, "lambda street")))) -employee -``` - -Without lenses, we could use the `copy` method provided on a `data class` for dealing with immutable structures. - -```kotlin -employee.copy( - company = employee.company.copy( - address = employee.company.address.copy( - street = employee.company.address.street.copy( - name = employee.company.address.street.name.capitalize() - ) - ) - ) -) -``` - -As we can immediately see, this is hard to read, does not scale very well, and it draws attention away from the simple operation we wanted to do `name.capitalize()`. - -What we actually wanted to do here is the following: focus into employee's company, `and then` focus into the company's address, `and then` focus into the street address, and finally, modify the street name by capitalizing it. - -```kotlin -val employeeCompany: Lens = Lens( - get = { it.company }, - set = { employee, company -> employee.copy(company = company) } -) - -val companyAddress: Lens = Lens( - get = { it.address }, - set = { company, address -> company.copy(address = address) } -) - -val addressStreet: Lens = Lens( - get = { it.street }, - set = { address, street -> address.copy(street = street) } -) - -val streetName: Lens = Lens( - get = { it.name }, - set = { street, name -> street.copy(name = name) } -) - -val employeeStreetName: Lens = employeeCompany compose companyAddress compose addressStreet compose streetName - -employeeStreetName.modify(employee, String::capitalize) -``` - -Don't worry about the boilerplate of the lenses written above because it can be generated by Arrow. So we've essentially replaced our original snippet with the last two lines. - -`Lens` can be composed with all optics and result in the following optics: - -| | Iso | Lens | Prism |Optional | Getter | Setter | Fold | Traversal | -| --- | --- | --- | --- |--- | --- | --- | --- | --- | -| Lens | Lens | Lens | Optional | Optional | Getter | Setter | Fold | Traversal | - -### Generating lenses - -Lenses can be generated for a `data class` by the `@optics` annotation. For every constructor parameter of the `data class`, a `Lens` will be generated. -The lenses will be generated as extension properties on the companion object `val T.Companion.paramName`. - -```kotlin -@optics data class Account(val balance: Int, val available: Int) { - companion object -} -``` - -For `Account`, two lenses will be generated: `val Account.Companion.balance: Lens` and `val Account.Companion.available: Lens`. - -```kotlin -val balanceLens: Lens = Account.balance -``` - -### Polymorphic lenses -When dealing with polymorphic product types, we can also have polymorphic lenses that allow us to morph the type of the focus (and, as a result, the constructed type) of our `PLens`. The following method is also available as `PLens.pPairFirst()` in the `arrow.optics` package. - -```kotlin -fun pair(): PLens, Pair, A, R> = PLens( - { it.first }, - { ab, r -> r to ab.second } -) - -PLens.pairPFirst().set(5 to "World", "Hello, ") -``` - -### Laws - -Arrow provides [`LensLaws`][lenses_laws_source]{:target="_blank"} in the form of test cases for internal verification of lawful instances and third party apps creating their own lenses. - -[lenses_laws_source]: https://github.com/arrow-kt/arrow/blob/main/arrow-libs/optics/arrow-optics-test/src/main/kotlin/arrow/optics/test/laws/LensLaws.kt diff --git a/arrow-site/docs/docs/optics/README.md b/arrow-site/docs/docs/optics/README.md deleted file mode 100644 index 5fdd94cfc3a..00000000000 --- a/arrow-site/docs/docs/optics/README.md +++ /dev/null @@ -1,235 +0,0 @@ ---- -layout: quickstart-optics -title: Optics -permalink: /optics/ ---- - -
-[![Maven Central](https://img.shields.io/maven-central/v/io.arrow-kt/arrow-core?color=4caf50&label=latest%20release)](https://maven-badges.herokuapp.com/maven-central/io.arrow-kt/arrow-core) -[![Latest snapshot](https://img.shields.io/badge/dynamic/xml?color=orange&label=latest%20snapshot&prefix=v&query=%2F%2Fmetadata%2Fversioning%2Flatest&url=https%3A%2F%2Foss.sonatype.org%2Fservice%2Flocal%2Frepositories%2Fsnapshots%2Fcontent%2Fio%2Farrow-kt%2Farrow-core%2Fmaven-metadata.xml)](https://oss.sonatype.org/service/local/repositories/snapshots/content/io/arrow-kt/) -[![Kotlin version](https://img.shields.io/badge/Kotlin-1.4-blue)](https://kotlinlang.org/docs/reference/whatsnew14.html) -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0) -[![StackOverflow](https://img.shields.io/badge/arrow--kt-grey.svg?logo=stackoverflow)](https://stackoverflow.com/questions/tagged/arrow-kt) -[![Twitter](https://img.shields.io/twitter/follow/arrow_kt?color=blue&style=flat)](https://twitter.com/arrow_kt) -
- -
-
- -# Arrow Optics. Transforming and computing over immutable data models in Kotlin - -Arrow Optics provides an automatic DSL that allows users to use `.` notation when accessing, -composing, and transforming deeply nested immutable data structures. -Optics also offers all the base types such as [Lens]({{ "/optics/lens/" | relative_url }}), [Prism]( -{{ '/optics/prism/' | relative_url }}), and others from which we can generalize accessing and -traversing deep values in sealed and data classes models. - -```kotlin -// an immutable value with very nested components -val john = Employee("John Doe", Company("Kategory", Address("Functional city", Street(42, "lambda street")))) -// an Optional points to one place in the value -val optional: Optional = Employee.company.address.street.name -// and now you can modify into a new copy without nested 'copy's! -optional.modify(john, String::toUpperCase) -``` - -Scroll down and learn what Arrow Optics can do for you(r code)! -
- -
-## Arrow Optics Overview - -
- -
-#### Quick Start - - [Gradle Setup]({{ '/optics/#setup' | relative_url }}) - - [Optics DSL]({{ '/optics/dsl/' | relative_url }}) - - [Optics DSL for Collections]({{ '/optics/collections_dsl/' | relative_url }}) -
- -
-#### Additional information -- [Kotlin Data classes](https://kotlinlang.org/docs/data-classes.html) -- [Kotlin Sealed classes](https://kotlinlang.org/docs/sealed-classes.html) -
- -
-#### [Optics DSL for Values]({{ '/optics/dsl/' | relative_url }}) - -###### Focus and modification - - - [Iso]({{ '/optics/iso/' | relative_url }}): 1-to-1 relations - - [Lens]({{ '/optics/lens/' | relative_url }}): focus and modify one value - - [Optional]({{ '/optics/optional/' | relative_url }}): optional value - -###### Focus and construction - - - [Prism]({{ '/optics/prism/' | relative_url }}): focus on optional value and build it - -###### Single behavior - - - [Getter]({{ '/optics/getter/' | relative_url }}): focus on one value - - [OptionalGetter]({{ '/optics/optional_getter/' | relative_url }}): focus on optional value - - [Setter]({{ '/optics/setter/' | relative_url }}): modify one value - -[Usage with reflection]({{ '/optics/reflection/' | relative_url }}) - -
- -
-#### [Optics DSL for Collections]({{ '/optics/collections_dsl/' | relative_url }}) - -- [Every]({{ '/optics/every/' | relative_url }}): focus and modification -- [Fold]({{ '/optics/fold/' | relative_url }}): only focus -- [Traversal]({{ '/optics/traversal/' | relative_url }}): only modification - -###### Point to elements - -- [Cons]({{ '/optics/cons/' | relative_url }}) -- [Snoc]({{ '/optics/snoc/' | relative_url }}) -- [At]({{ '/optics/at/' | relative_url }}) -- [Index]({{ '/optics/index/' | relative_url }}) -- [FilterIndex]({{ '/optics/filterindex/' | relative_url }}) -
-
-
- - - - -
-## Setup - -
- -
- - -
- - -
- -#### Step 1: add the repository - -In your project's root `build.gradle.kts`, append this repository to your list: - -``` -allprojects { - repositories { - mavenCentral() - } -} -``` - -#### Step 2: add the library - -Add the dependencies into the project's `build.gradle.kts` (change `$arrowVersion` to a specific version, or define the corresponding property in `gradle.properties`): - -``` -dependencies { - implementation("io.arrow-kt:arrow-optics:$arrowVersion") -} -``` - -If you are using more than one Arrow dependency, you can avoid specifying the same version over and over by using a BOM file: - -``` -dependencies { - implementation(platform("io.arrow-kt:arrow-stack:$arrowVersion")) - - implementation("io.arrow-kt:arrow-core") - implementation("io.arrow-kt:arrow-optics") - ... -} -``` - -#### Step 3: add the plug-in (optional) - -To get the most of Arrow Optics you can add out Kotlin plug-in to your build, which takes care of generating optics for your data types. - -``` -plugins { - id("com.google.devtools.ksp") version "1.6.10-1.0.4" -} - -dependencies { - ksp("io.arrow-kt:arrow-optics-ksp-plugin:$arrowVersion") -} -``` - -If you are using IntelliJ as your IDE of choice, you also need to [add some new paths as sources](https://kotlinlang.org/docs/ksp-quickstart.html#make-ide-aware-of-generated-code) to make it aware of the generated sources. - -Now you are ready to learn about the [Optics DSL]({{ '/optics/dsl/' | relative_url }})! - -
- -
- -#### Step 1: add the repository - -In your project's root `build.gradle`, append this repository to your list: - -```groovy -allprojects { - repositories { - mavenCentral() - } -} -``` - -#### Step 2: add the library - -Add the dependencies into the project's `build.gradle`: - -```groovy -def arrow_version = "1.0.1" - -dependencies { - implementation "io.arrow-kt:arrow-optics:$arrow_version" -} -``` - -If you are using more than one Arrow dependency, you can avoid specifying the same version over and over by using a BOM file: - -```groovy -def arrow_version = "1.0.1" - -dependencies { - implementation platform("io.arrow-kt:arrow-stack:$arrow_version") - - implementation "io.arrow-kt:arrow-core" - implementation "io.arrow-kt:arrow-optics" - ... -} -``` - -#### Step 3: add the plug-in (optional) - -To get the most of Arrow Optics you can add out Kotlin plug-in to your build, which takes care of generating optics for your data types. - -```groovy -plugins { - id "com.google.devtools.ksp" version "1.6.10-1.0.4" -} - -dependencies { - ksp "io.arrow-kt:arrow-optics-ksp-plugin:$arrow_version" -} -``` - -Now you are ready to learn about the [Optics DSL]({{ '/optics/dsl/' | relative_url }})! - -
- - -
- -
- - -
diff --git a/arrow-site/docs/docs/optics/at/README.md b/arrow-site/docs/docs/optics/at/README.md deleted file mode 100644 index b0c707588b3..00000000000 --- a/arrow-site/docs/docs/optics/at/README.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -layout: docs-optics -title: At -permalink: /optics/at/ ---- - -## At - -`At` provides a [Lens]({{ '/optics/lens' | relative_url }}) for a structure `S` to focus in `A` at a given index `I`. - -### Example - -If, for a structure `S`, the focus `A` can be indexed by `I`, then `At` can create an `Lens` with focus at `S` for a given index `I`. -We can use that `Lens` to operate on that focus `S` to get, set, and modify the focus at a given index `I`. - -A `MapK` can be indexed by its keys `Int`, but not for every index where an entry can be found. - -```kotlin -import arrow.core.* -import arrow.optics.typeclasses.At - -val mapAt = At.map().at(2) - -val map = mapOf( - 1 to "one", - 2 to "two", - 3 to "three" - ) - -mapAt.set(map, "new value".some()) -``` - -By setting an empty value for a key, we delete that entry by removing the value. - -```kotlin -mapAt.set(map, none()) -``` - -#### Creating your own `At` instances - -Arrow provides `At` instances for some common datatypes in Arrow that can be indexed. You can look them up by calling `At.at()`. - -You may create instances of `At` for your own datatypes which you will be able to use as demonstrated in the [example](#example) above. - -See [Deriving and creating custom typeclass]({{ '/patterns/glossary' | relative_url }}) to provide your own `At` instances for custom datatypes. diff --git a/arrow-site/docs/docs/optics/every/README.md b/arrow-site/docs/docs/optics/every/README.md deleted file mode 100644 index 887ffcda953..00000000000 --- a/arrow-site/docs/docs/optics/every/README.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: docs-optics -title: Every -permalink: /optics/every/ ---- - -## Every - -`Every` combines the powers of [`Traversal`]({{ '/optics/traversal/' | relative_url }}) and [`Fold`]({{ '/optics/fold/' | relative_url }}). -It can focus into a structure `S` to see all its foci `A`. - -### Example - -`Every` can easily be created given a `Traversal` and `Fold` instance. - -```kotlin -import arrow.optics.* -import arrow.optics.typeclasses.* - -val every: Every, Int> = Every.from(Traversal.list(), Fold.list()) - -every.lastOrNull(listOf(1, 2, 3)) -``` -```kotlin -every.lastOrNull(emptyList()) -``` - -#### Creating your own `Every` instances - -Arrow provides `Every` instances for some common datatypes in Arrow and Kotlin Std. You can find them on the companion object of `Every`. - -You may create instances of `Every` for your own datatypes, which you will be able to use as demonstrated in the [example](#example) above. -This can be done by implementing both `foldMap` and `modify` yourself. - -```kotlin -import arrow.typeclasses.Monoid - -fun PEvery.Companion.list(): Every, A> = object : Every, A> { - override fun foldMap(M: Monoid, s: List, map: (A) -> R): R = - M.run { s.fold(empty()) { acc, a -> acc.combine(map(a)) } } - - override fun modify(s: List, map: (focus: A) -> A): List = - s.map(map) -} -``` - diff --git a/arrow-site/docs/docs/optics/filterindex/README.md b/arrow-site/docs/docs/optics/filterindex/README.md deleted file mode 100644 index 8dbca9bb6e1..00000000000 --- a/arrow-site/docs/docs/optics/filterindex/README.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -layout: docs-optics -title: FilterIndex -permalink: /optics/filterindex/ ---- - -## FilterIndex - - -`FilterIndex` provides a [Traversal]({{ '/optics/traversal' | relative_url }}) that can focus into a structure `S` and get, set, or modify 0 to N foci whose index `I` satisfies a predicate. - -If the foci `A` for a structure `S` can be indexed by `I`, then a `Traversal` can be created by `FilterIndex` that is filtered by a predicate on `I`. - -`FilterIndex` can easily be created, given an `Every` instance that filters a certain index. - -```kotlin -import arrow.core.* -import arrow.typeclasses.* -import arrow.optics.* -import arrow.optics.typeclasses.* - -val filterIndexStringByIndex : FilterIndex, Int, String> = FilterIndex { p -> - object : Every, String> { - override fun foldMap(M: Monoid, s: List, map: (String) -> R): R = M.run { - s.foldIndexed(empty()) { index, acc, a -> if (p(index)) acc.combine(map(a)) else acc } - } - - override fun modify(s: List, map: (focus: String) -> String): List = - s.mapIndexed { index, a -> if (p(index)) map(a) else a } - } -} -``` - -Given a `FilterIndex` instance, we can create a `Traversal` that filters out the foci that do not match the predicate. - -```kotlin -val filter: Every, String> = filterIndexStringByIndex.filter { index -> index > 3 } - -filter.getAll(listOf("H", "He", "Hel", "Hell", "Hello")) -``` - -Arrow provides `FilterIndex` instances for some common datatypes in both Arrow and the Kotlin stdlib that can be filtered by index, like `ListK`, and `MapK`. You can look them up by calling `FilterIndex.filterIndex()`. - -```kotlin -import arrow.optics.typeclasses.FilterIndex - -FilterIndex.list().filter { index -> index % 2 == 0 } - .getAll(listOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) -``` diff --git a/arrow-site/docs/docs/optics/index/README.md b/arrow-site/docs/docs/optics/index/README.md deleted file mode 100644 index 0fa4d9f541e..00000000000 --- a/arrow-site/docs/docs/optics/index/README.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -layout: docs-optics -title: Index -permalink: /optics/index/ ---- - -## Index - - -`Index` provides an [Optional]({{ '/optics/optional' | relative_url }}) for a structure `S` to focus in optional `A` at a given index `I`. - -### Example - -If, for a structure `S`, the optionally focus `A` can be indexed by `I`, then `Index` can create an `Optional` with focus at `S` for a given index `I`. -We can use that `Optional` to safely operate on that focus `S` (i.e., operating on items in a `List` based on the index position). - -```kotlin -import arrow.optics.typeclasses.Index - -val thirdListItemOptional = Index.list().index(3) - -thirdListItemOptional.set(listOf("0", "1", "2", "3"), "newValue") -``` -```kotlin -thirdListItemOptional.set(listOf("0", "1", "2"), "newValue") -``` -```kotlin -thirdListItemOptional.setNullable(listOf("0", "1", "2"), "newValue") -``` - -#### Creating your own `Index` instances - -Arrow provides `Index` instances for some common datatypes in both Arrow and the Kotlin stdlib that can be indexed, like `ListK` and `MapK`. -You can look them up by calling `Index.index()`. - -You may create instances of `Index` for your own datatypes, which you will be able to use as demonstrated in the [example](#example) above. - -See [Deriving and creating custom typeclass]({{ '/patterns/glossary' | relative_url }}) to provide your own `Index` instances for custom datatypes. diff --git a/arrow-site/docs/docs/optics/reflection/README.md b/arrow-site/docs/docs/optics/reflection/README.md deleted file mode 100644 index 091157cb4c3..00000000000 --- a/arrow-site/docs/docs/optics/reflection/README.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -layout: docs-optics -title: Index -permalink: /optics/reflection/ ---- - -## Usage with reflection - -Although we strongly recommend generating optics using the [DSL and `@optics` attribute]({{ '/optics/dsl/' | relative_url }}), sometimes this is not possible. For those scenarios we provide a small utility package `arrow-optics-reflect` which bridges Arrow Optics with [Kotlin's reflection](https://kotlinlang.org/docs/reflection.html) capabilities. - -Kotlin provides a simple way to obtain a reference to a member of a class, by using `ClassName::memberName`. For example, given the following class definition: - -```kotlin -data class Person(val name: String, val friends: List) -``` - -we can use `Person::name` and `Person::friends` to refer to each of the fields in the class. Those references are very similar to optics. - -In fact, what `arrow-optics-reflect` does is provide extension methods which turn those references into optics. You can obtain a lens for the `name` field in `Person` by writing: - -```kotlin -Person::name.lens -``` - -which you can later use as [any other lens]({{ '/optics/lens' | relative_url }}): - -```kotlin -val p = Person("me", listOf("pat", "mat")) -val m = Person::name.lens.modify(p) { it.capitalize() } -``` - -⚠️ **WARNING**: this only works on `data` classes with a public `copy` method (which is the default.) Remember that, as opposed to a mutable variable, optics will always create a _new_ copy when asking for modification. - -### Nullables and collections - -Sometimes it's preferable to expose a field using a different optic: - -- When the type of the field is nullable, you can use `optional` to obtain an [optional]({{ '/optics/optional' | relative_url }}) instead of a lens. -- When the type of the field is a collection, you can use `iter` to obtain _read-only_ access to it (technically, you obtain a [fold]({{ '/optics/fold' | relative_url }}).) If the type is a subclass of `List`, you can use `every` to get read/write access. - -```kotlin -val p = Person("me", listOf("pat", "mat")) -val m = Person::friends.every.modify(p) { it.capitalize() } -``` - -### Prisms - -A common pattern in Kotlin programming is to define a sealed abstract class (or interface) with subclasses representing choices in a union. - -```kotlin -sealed interface Cutlery -object Fork: Cutlery -object Spoon: Cutlery -``` - -We provide an `instance` method which creates a [prism]({{ '/optics/prism' | relative_url }}) which focus only on a certain subclass of a parent class. Both ends are important and must be provided when creating the optic: - -```kotlin -instance() -``` - -You can compose this optic freely with others. Here's an example in which we obtain the number of forks in a list of cutlery using optics: - -```kotlin -val things = listOf(Fork, Spoon, Fork) -val forks = Every.list() compose instance() -val noOfForks = forks.size(things) -``` \ No newline at end of file diff --git a/arrow-site/docs/docs/optional/README.md b/arrow-site/docs/docs/optional/README.md deleted file mode 100644 index f13306b6bbe..00000000000 --- a/arrow-site/docs/docs/optional/README.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -layout: docs-optics -title: Optional -permalink: /optics/optional/ ---- - -## Optional - - -An `Optional` is an optic that allows seeing into a structure and getting, setting, or modifying an optional focus. -It combines the properties of a `Lens` (getting, setting, and modifying) with the properties of a `Prism` (an optional focus). - -`Optional` combines their weakest functions: `set` and `getOrModify`. - -* `set: (S, A) -> S`, meaning we can look into `S`, set a value for an optional focus `A`, and obtain the modified source. -* `getOrModify: (S) -> Either`, meaning we can get the focus OR return the original value. - -For a structure `List`, we can create an `Optional` to focus an optional head `Int`. - -```kotlin -import arrow.core.* -import arrow.optics.* - -val optionalHead: Optional, Int> = Optional( - getOption = { list -> list.firstOrNull().toOption() }, - set = { list, int -> list.mapIndexed { index, value -> if (index == 0) int else value } } -) -``` - -Our `optionalHead` allows us to operate on the head of `List` without having to worry if it is available. You can find `optionalHead` in the optics library: `ListK.head()`. - -```kotlin -import arrow.optics.* - -POptional.listHead().set(listOf(1, 3, 6), 5) -``` -```kotlin -POptional.listHead().modify(listOf(1, 3, 6)) { head -> head * 5 } -``` - -We can also lift such functions. - -```kotlin -val lifted = POptional.listHead().lift { head -> head * 5 } -lifted(emptyList()) -``` - -An `Optional` instance can be manually constructed from any default or custom `Iso`, `Lens`, or `Prism` instance by calling their `asOptional()` or by creating a custom `Optional` instance as shown above. - -### Composition - -We can compose `Optional`s to build telescopes with an optional focus. Imagine we try to retrieve a `User`'s email from a backend. The result of our call is `Option`. So, we first want to look into `Option`, which **optionally** could be a `Some`. And then we want to look into `User`, which optionally filled in his email. - -```kotlin -data class Participant(val name: String, val email: String?) - -val participantEmail: Optional = Optional( - getOrModify = { participant -> participant.email?.right() ?: participant.left() }, - set = { participant, email -> participant.copy(email = email) } -) - -val optEmail: Optional, String> = PPrism.some() compose participantEmail - -optEmail.getOrNull(Some(Participant("test", "email"))) -``` -```kotlin -optEmail.getOrNull(None) -``` -```kotlin -optEmail.getOrNull(Some(Participant("test", null))) -``` - -`Optional` can be composed with all optics, resulting in the following optics: - -| | Iso | Lens | Prism | Optional | Getter | Setter | Fold | Traversal | -| --- | --- | --- | --- | --- | --- | --- | --- | --- | -| Optional | Optional | Optional | Optional | Optional | Fold | Setter | Fold | Traversal | - -### Generating optional - -To avoid boilerplate, optionals can be generated for `A?`, and `Option` fields for a `data class`. -The `Optionals` will be generated as extension properties on the companion object `val T.Companion.paramName`. - -```kotlin -@optics data class Person(val age: Int?, val address: Option
) { - companion object -} -``` -```kotlin -val optionalAge: Optional = Person.age -val optionalAddress: Optional = Person.address -``` - -### Polymorphic optional - -A `POptional` is very similar to [PLens]({{'/optics/lens#Plens' | relative_url }}) and [PPrism]({{'/optics/prism#PPrism' | relative_url }}). So let's see if we can combine both examples shown in their documentation. - -Given a `PPrism` with a focus into `Some` of `Option>` that can polymorphically change its content to `Pair` and a `PLens` with a focus into the `Pair` that can morph the first parameter from `Int` to `String`, we can compose them together building an `Optional` that can look into `Option` and morph the first type of the `Pair` within. - -```kotlin -val pprism = PPrism.pSome, Pair>() -val plens = PLens.pairPFirst() - -val somePair: POptional>, Option>, Int, String> = - pprism compose plens - -val lifted: (Option>) -> Option> = somePair.lift { _ -> "Hello, " } -``` -```kotlin -lifted(None) -``` - -### Laws - -Arrow provides [`OptionalLaws`][optional_laws_source]{:target="_blank"} in the form of test cases for internal verification of lawful instances and third party apps creating their own optionals. - -[optional_laws_source]: https://github.com/arrow-kt/arrow/blob/main/modules/core/arrow-test/src/main/kotlin/arrow/test/laws/OptionalLaws.kt diff --git a/arrow-site/docs/docs/optional_getter/README.md b/arrow-site/docs/docs/optional_getter/README.md deleted file mode 100644 index 7242f1a6403..00000000000 --- a/arrow-site/docs/docs/optional_getter/README.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -layout: docs-optics -title: OptionalGetter -permalink: /optics/optional_getter/ ---- - -## OptionalGetter - -An `OptionalGetter` is an optic that allows focusing on an optional value. It is an intermediate step between [`Fold`]({{ '/optics/fold/' | relative_url }}), which focuses on 0 to N elements, and [`Getter`]({{ '/optics/getter/' | relative_url }}), which focuses in exactly one element. Some people refer to `OptionalGetter`s as `AffineFold`s. - -The main function in `OptionalGetter` is `getOrModify: (S) -> Either`, which allows us to get the focus OR return the original value, if the optic does not match. You can also use a version with `getOption: (S) -> Option`, as exemplified in this optic to focus on the head of a list: - -```kotlin -import arrow.core.* -import arrow.optics.* - -val optionalHead: OptionalGetter, Int> = OptionalGetter( - getOption = { list -> list.firstOrNull().toOption() } -) -``` - -### Filtering - -The main use of `OptionalGetter` is to filter out unwanted elements. Here is an example in which we combine a `Traversal` focusing on every element in the list, with a filter to exclude those which are smaller than 0. - -```kotlin -import arrow.optics.Traversal -import arrow.optics.Optional - -val positiveNumbers = Traversal.list() compose OptionalGetter.filter { it >= 0 } - -positiveNumbers.getAll(listOf(1, 2, -3, 4, -5)) == listOf(1, 2, 4) -``` diff --git a/arrow-site/docs/docs/patterns/dependencyinjection/README.md b/arrow-site/docs/docs/patterns/dependencyinjection/README.md deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/arrow-site/docs/docs/patterns/errorhandling/README.md b/arrow-site/docs/docs/patterns/errorhandling/README.md deleted file mode 100644 index 428da31aef7..00000000000 --- a/arrow-site/docs/docs/patterns/errorhandling/README.md +++ /dev/null @@ -1,323 +0,0 @@ ---- -layout: docs-core -title: Functional Error Handling -permalink: /patterns/error_handling/ ---- - -## Functional Error Handling - -When dealing with errors in a purely functional way, we try as much as we can to avoid exceptions. -Exceptions break referential transparency and lead to bugs when callers are unaware that they may happen until it's too late at runtime. - -In the following example, we are going to model a basic program and go over the different options we have for dealing with errors in Arrow. -The program simulates the typical lunch scenario where we have to get the ingredient, and a series of preconditions needs to be met in order to actually prepare and eat it. - -### Requirements - -- Take food out of the refrigerator -- Get your cutting tool -- Cut up the lettuce to make lunch - -### Requirements - -```kotlin -/** model */ -object Lettuce -object Knife -object Salad - -fun takeFoodFromRefrigerator(): Lettuce = TODO() -fun getKnife(): Knife = TODO() -fun prepare(tool: Knife, ingredient: Lettuce): Salad = TODO() -``` - -### Exceptions - -A naive implementation that uses exceptions may look like this - -```kotlin -fun takeFoodFromRefrigerator(): Lettuce = throw RuntimeException("You need to go to the store and buy some ingredients") -fun getKnife(): Knife = throw RuntimeException("Your knife needs to be sharpened") -fun prepare(tool: Knife, ingredient: Lettuce): Salad = Salad -``` - -As you may have noticed, the function signatures include no clue that, when asking for `takeFoodFromRefrigerator()` or `getKnife()`, -an exception may be thrown. - -#### The issues with exceptions - -Exceptions can be seen as GOTO statement, given they interrupt the program flow by jumping back to the caller. -Exceptions are not consistent, as throwing an exception may not survive async boundaries; that is to say that one can't rely on exceptions for error handling -in async code, since invoking a function that is async inside a `try/catch` may not capture the exception potentially thrown in a different thread. - -Because of this extreme power of stopping computation and jumping to other areas, Exceptions have been abused even in core libraries to signal events. - -``` -at java.lang.Throwable.fillInStackTrace(Throwable.java:-1) -at java.lang.Throwable.fillInStackTrace(Throwable.java:782) -- locked <0x6c> (a sun.misc.CEStreamExhausted) -at java.lang.Throwable.(Throwable.java:250) -at java.lang.Exception.(Exception.java:54) -at java.io.IOException.(IOException.java:47) -at sun.misc.CEStreamExhausted.(CEStreamExhausted.java:30) -at sun.misc.BASE64Decoder.decodeAtom(BASE64Decoder.java:117) -at sun.misc.CharacterDecoder.decodeBuffer(CharacterDecoder.java:163) -at sun.misc.CharacterDecoder.decodeBuffer(CharacterDecoder.java:194) -``` - -They often lead to incorrect and dangerous code because `Throwable` is an open hierarchy where you may catch more than you originally intended to. - -```kotlin -try { - doExceptionalStuff() //throws IllegalArgumentException -} catch (e: Throwable) { - // too broad, `Throwable` matches a set of fatal exceptions and errors a - // a user may be unable to recover from: - /* - VirtualMachineError - OutOfMemoryError - ThreadDeath - LinkageError - InterruptedException - ControlThrowable - NotImplementedError - */ -} -``` - -Furthermore, exceptions are costly to create. `Throwable#fillInStackTrace` attempts to gather all stack information to present you with a meaningful stacktrace. - -```java -public class Throwable { - /** - * Fills in the execution stack trace. - * This method records within this Throwable object information - * about the current state of the stack frames for the current thread. - */ - Throwable fillInStackTrace(); -} -``` - -Constructing an exception may be as costly as your current Thread stack size, and it's also platform dependent since `fillInStackTrace` calls into native code. - -More info on the cost of instantiating Throwables, and throwing exceptions in general, can be found in the links below. - -> [The Hidden Performance costs of instantiating Throwables](http://normanmaurer.me/blog/2013/11/09/The-hidden-performance-costs-of-instantiating-Throwables/) - -Exceptions may be considered generally a poor choice in Functional Programming when: - -- Modeling absence -- Modeling known business cases that result in alternate paths -- Used in async boundaries over APIs based callbacks that lack some form of structured concurrency. -- In general, when people have no access to your source code. - -### How do we model exceptional cases then? - -Arrow and the Kotlin standard library provides proper datatypes and abstractions to represent exceptional cases. - -### Nullable types - -We use [`Nullable types`](https://kotlinlang.org/docs/null-safety.html#nullable-types-and-non-null-types) to model the potential absence of a value. - -When using `Nullable types`, our previous example may look like: - -```kotlin -fun takeFoodFromRefrigerator(): Lettuce? = null -fun getKnife(): Knife? = null -fun prepare(tool: Knife, ingredient: Lettuce): Salad? = Salad -``` - -It's easy to work with [`Nullable types`](https://kotlinlang.org/docs/null-safety.html#nullable-types-and-non-null-types) if your lang supports special syntax like `?` as Kotlin does. -Nullable types are faster than boxed types like `Option`. Nonetheless `Option` is also supported by Arrow to interop with Java based libraries that use `null` as signal or interruption value like [ReactiveX RxJava](https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#nulls). Additionally `Option` is useful in generic code when not constraining with generic bounds of `A : Any` and using null as a nested signal to produce values of `Option>` since A? can't have double nesting. - -```kotlin -import arrow.core.computations.nullable - -fun prepareLunch(): Salad? { - val lettuce = takeFoodFromRefrigerator() - val knife = getKnife() - val salad = knife?.let { k -> lettuce?.let { l -> prepare(k, l) } } - return salad -} -``` - -In addition to `let` provided by the standard library Arrow provides `nullable` which allows the use of [Computation Expressions]({{ '/patterns/monad_comprehensions' | relative_url }}). - - -```kotlin -import arrow.core.computations.nullable - -suspend fun prepareLunch(): Salad? = - nullable { - val lettuce = takeFoodFromRefrigerator().bind() - val knife = getKnife().bind() - val salad = prepare(knife, lettuce).bind() - salad - } -``` - -While we could model this problem using `Nullable Types`, and forgetting about exceptions, we are still unable to determine the reasons why `takeFoodFromRefrigerator()` and `getKnife()` returned empty values in the form of `null`. -For this reason, using `Nullable Types` is only a good idea when we know that values may be absent, but we don't really care about the reason why. -Additionally, `Nullable Types` are unable to capture exceptions. If an exception was thrown internally, it would still bubble up and result in a runtime exception. - -In the next example, we are going to use `Either` to deal with potentially thrown exceptions that are outside the control of the caller. - -### Either - -When dealing with a known alternate path, we model return types as [`Either`]({{ '/apidocs/arrow-core/arrow.core/-either/' | relative_url }}) -Either represents the presence of either a `Left` value or a `Right` value. -By convention, most functional programming libraries choose `Left` as the exceptional case and `Right` as the success value. - -It turns out that all exceptions thrown in our example are actually known to the system, so there is no point in modeling these exceptional cases as -`java.lang.Exception`. - -We should redefine our functions to express that their result is not just a `Lettuce`, `Knife`, or `Salad`, but those potential values or other exceptional ones. - -We can now assign proper types and values to the exceptional cases. - -```kotlin -sealed class CookingException { - object NastyLettuce: CookingException() - object KnifeIsDull: CookingException() - data class InsufficientAmountOfLettuce(val quantityInGrams : Int): CookingException() -} -typealias NastyLettuce = CookingException.NastyLettuce -typealias KnifeIsDull = CookingException.KnifeIsDull -typealias InsufficientAmountOfLettuce = CookingException.InsufficientAmountOfLettuce -``` - -This type of definition is commonly known as an Algebraic Data Type or Sum Type in most FP capable languages. -In Kotlin, it is encoded using sealed hierarchies. We can think of sealed hierarchies as a declaration of a type and all its possible construction states. - -Once we have an ADT defined to model our known errors, we can redefine our functions. - -```kotlin -import arrow.core.Either -import arrow.core.Either.Left -import arrow.core.Either.Right - -fun takeFoodFromRefrigerator(): Either = Right(Lettuce) -fun getKnife(): Either = Right(Knife) -fun lunch(knife: Knife, food: Lettuce): Either = Left(InsufficientAmountOfLettuce(5)) -``` - -Arrow also provides an `Effect` instance for `Either` in the same way it did for `Nullable types`. -Except for the types signatures, our program remains unchanged when we compute over `Either`. -All values on the left side assume to be `Right` biased and, whenever a `Left` value is found, the computation short-circuits, producing a result that is compatible with the function type signature. - -```kotlin -import arrow.core.Either -import arrow.core.Either.Left -import arrow.core.Either.Right -import arrow.core.computations.either - -suspend fun prepareEither(): Either = - either { - val lettuce = takeFoodFromRefrigerator().bind() - val knife = getKnife().bind() - val salad = lunch(knife, lettuce).bind() - salad - } -``` - -### Alternative validation strategies : Failing fast vs accumulating errors - -In this different validation example, we demonstrate how we can use `Validated` to perform validation with error accumulation or short-circuit strategies. - -```kotlin -import arrow.core.Nel -import arrow.core.ValidatedNel -import arrow.core.computations.either -import arrow.core.handleErrorWith -import arrow.core.invalidNel -import arrow.core.traverseEither -import arrow.core.traverseValidated -import arrow.core.validNel -import arrow.typeclasses.Semigroup -import arrow.core.zip -``` - -*Model* - -```kotlin -sealed class ValidationError(val msg: String) { - data class DoesNotContain(val value: String) : ValidationError("Did not contain $value") - data class MaxLength(val value: Int) : ValidationError("Exceeded length of $value") - data class NotAnEmail(val reasons: Nel) : ValidationError("Not a valid email") -} - -data class FormField(val label: String, val value: String) -data class Email(val value: String) -``` - -*Strategies* - -```kotlin -/** strategies **/ -sealed class Strategy { - object FailFast : Strategy() - object ErrorAccumulation : Strategy() -} - -/** Abstracts away invoke strategy **/ -object Rules { - - private fun FormField.contains(needle: String): ValidatedNel = - if (value.contains(needle, false)) validNel() - else ValidationError.DoesNotContain(needle).invalidNel() - - private fun FormField.maxLength(maxLength: Int): ValidatedNel = - if (value.length <= maxLength) validNel() - else ValidationError.MaxLength(maxLength).invalidNel() - - private fun FormField.validateErrorAccumulate(): ValidatedNel = - contains("@").zip( - Semigroup.nonEmptyList(), // accumulates errors in a non empty list, can be omited for NonEmptyList - maxLength(250) - ) { _, _ -> Email(value) }.handleErrorWith { ValidationError.NotAnEmail(it).invalidNel() } - - /** either blocks support binding over Validated values with no additional cost or need to convert first to Either **/ - private fun FormField.validateFailFast(): Either, Email> = - either.eager { - contains("@").bind() // fails fast on first error found - maxLength(250).bind() - Email(value) - } - - operator fun invoke(strategy: Strategy, fields: List): Either, List> = - when (strategy) { - Strategy.FailFast -> - fields.traverseEither { it.validateFailFast() } - Strategy.ErrorAccumulation -> - fields.traverseValidated(Semigroup.nonEmptyList()) { - it.validateErrorAccumulate() - }.toEither() - } -} -``` - -*Program* - -```kotlin -val fields = listOf( - FormField("Invalid Email Domain Label", "nowhere.com"), - FormField("Too Long Email Label", "nowheretoolong${(0..251).map { "g" }}"), //this fails - FormField("Valid Email Label", "getlost@nowhere.com") -) -``` - -*Fail Fast* - -```kotlin -Rules(Strategy.FailFast, fields) -``` - -*Error Accumulation* - -```kotlin -Rules(Strategy.ErrorAccumulation, fields) -``` - -### Credits - -Tutorial adapted from the 47 Degrees blog [`Functional Error Handling`](https://www.47deg.com/presentations/2017/02/18/Functional-error-handling/) diff --git a/arrow-site/docs/docs/patterns/freealgebras/README.md b/arrow-site/docs/docs/patterns/freealgebras/README.md deleted file mode 100644 index d8cad62fbe5..00000000000 --- a/arrow-site/docs/docs/patterns/freealgebras/README.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: docs-core -title: Free algebras -permalink: /patterns/free_algebras/ ---- - -## Free Algebras - - - - -TODO - -Quick overview: - diff --git a/arrow-site/docs/docs/patterns/glossary/README.md b/arrow-site/docs/docs/patterns/glossary/README.md deleted file mode 100644 index 3f65343d327..00000000000 --- a/arrow-site/docs/docs/patterns/glossary/README.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -layout: docs-core -title: Glossary -permalink: /patterns/glossary/ ---- - -## Functional Programming Glossary - - - - -Note: This section keeps on growing! Keep an eye on it from time to time. - -This document is meant to be an introduction to Functional Programming for people from all backgrounds. -We'll go through some of the key concepts, and then dive into their implementation in real world cases. - -Some similar documents focused on explaining general concepts, rather than Arrow's versions, -can be found for examples [in JavaScript](https://github.com/hemanth/functional-programming-jargon) and [in Scala](https://gist.github.com/jdegoes/97459c0045f373f4eaf126998d8f65dc). - -### Datatypes - -A datatype is a class that encapsulates one reusable coding pattern. -These solutions have a canonical implementation that is generalized for all possible uses. - -Some common patterns expressed as datatypes are absence handling with [`Option`]({{ '/apidocs/arrow-core/arrow.core/-option/' | relative_url }}), -branching in code with [`Either`]({{ '/apidocs/arrow-core/arrow.core/-either/' | relative_url }}), -or interacting with the platform the program runs in using `suspend`. - -Some of these patterns are implemented using a mix of `sealed` classes, where each inheritor is a `data` class. -For example, the internal representation of an `Option` is a `sealed` class with two `data` classes: `Some(val a: A)`, and `None`. -And `Ior` is a `sealed` class with three `data` class inheritors: `Left(val a: A)`, `Right(val b: B)`, and `Both(val a: A, val b: B)`. - -### Side-effects and Effects - -A side-effect is a statement that changes something in the running environment. Generally, this means setting a variable, displaying a value on screen, writing to a file or a database, logging, start a new thread . . . - -When talking about side-effects, we generally see functions that have the signature `(...) -> Unit`, meaning that, unless the function doesn't do anything, there's at least one side-effect. Side-effects can also happen in the middle of another function, which is an undesirable behavior in Functional Programming. - -Side-effects are too general to be unit tested for because they depend on the environment. They also have poor composability. Overall, they're considered to be outside the Functional Programming paradigm, and are often referred to as "impure" functions. - -Because side-effects are unavoidable in any program, FP provides several datatypes for dealing with them! One way is by abstracting their behavior. The simplest examples of this are the `Writer`datatype, which allows you to write to an information sink like a log or a file buffer; or `State` datatype, which simulates scoped mutable state for the duration of an operation. - -For more complicated effects that can throw or jump threads, we need more advanced techniques. We model side-effects in kotlin with `suspend` functions and Kotlin Continuations. These continuations compose, catch exceptions, control asynchrony, and, most importantly, can be run lazily. This gets rid of the issues with side-effects. - -Although one can also write the whole program in an imperative way inside a single Effect wrapper, that wouldn't be very efficient, as you don't get any of its benefits. :D diff --git a/arrow-site/docs/docs/patterns/monadcomprehensions/README.md b/arrow-site/docs/docs/patterns/monadcomprehensions/README.md deleted file mode 100644 index 18d0a867e5a..00000000000 --- a/arrow-site/docs/docs/patterns/monadcomprehensions/README.md +++ /dev/null @@ -1,245 +0,0 @@ ---- -layout: docs-core -title: Monad Comprehensions -permalink: /patterns/monad_comprehensions/ ---- - -## Monad Comprehensions - -Monad comprehensions is the name for a programming idiom available in multiple languages like JavaScript, F#, Scala, or Haskell. -The purpose of monad comprehensions is to compose sequential chains of actions in a style that feels natural for programmers of all backgrounds. -They're similar to coroutines or async/await, but extensible to existing and new types! - -Let's walk through the evolution of how code was written, up to where comprehensions are today. -It'll take a couple of sections to get there, so if you're familiar with `flatMap`, feel free to skip to [Comprehensions over coroutines]({{ '/patterns/monad_comprehensions/#comprehensions-over-coroutines' | relative_url }}). - -### Synchronous sequences of actions - -A typical coding class starts teaching new programmers to think like an ideal computer. The computer is fed instructions one by one, and executed one after another. -The instructions modify the internal registers of this ideal computer to store and operate on values. As the values change over time, a result is returned and the program completes. - -Let's see one example: - -``` -int number = 0; -number += 1; -print(number); -return number; -``` - -This style of programming is what's usually called "imperative programming" because the computer is told what to do. -This style has grown over time through many programming languages with new paradigms, all with this underlying base. -It scaled through decades thanks to Moore's Law, where computers became faster and faster at alarming paces. At some point in the past decade, Moore's Law of vertical scaling plateaued near its theoretical limit. -Scaling started to become horizontal, with multiple cores working in parallel to achieve increasingly complex tasks. -This physical representation of cores became more apparent in software with the increase of multi-threading programs. - -Mathematical laws for parallel programming have been known for decades, and applied in multiple languages. -They allow us to write sequenced code that can be run asynchronously over multiple threads, with assurances for completion. - -### Asynchronous sequences of actions - -The abstraction of sequencing execution of code is summarized in a single function that, in Arrow, is called `invoke`, -although you may find it referred to in other languages as `andThen`, `then`, `bind`, `flatMap` or `SelectMany`. Arrow chooses `invoke` over functions like flatMap because Kotlin is able to perform monad bind in place thanks to its continuation system. - -Arrow provides concrete Monad impls for all data types that can support `F -> A` The typeclass interface that abstracts Delimited Scopes and allows us to implement the `suspend operator fun F.invoke(): A` sequenced execution of code via `fold`, `flatMap` and others is called a `Effect`, -for which we also have a [tutorial]({{ '/patterns/monads' | relative_url }}). - -Implementations of `Effect` are available for internal types like `Either`, `Option` and others. -Let's see one example of the block `either` that uses Effect to implement monad `invoke` over `Either`. Here we fetch from a database the information about the dean of a university some student attend: - -```kotlin -import arrow.core.Either -import arrow.core.Either.Left -import arrow.core.Either.Right -import arrow.core.flatMap - -/* A simple model of student and a university */ -object NotFound -data class Name(val value: String) -data class UniversityId(val value: String) -data class University(val name: Name, val deanName: Name) -data class Student(val name: Name, val universityId: UniversityId) -data class Dean(val name: Name) - -/* in memory db of students */ -private val students = mapOf( - Name("Alice") to Student(Name("Alice"), UniversityId("UCA")) -) - -/* in memory db of universities */ -private val universities = mapOf( - UniversityId("UCA") to University(Name("UCA"), Name("James")) -) - -/* in memory db of deans */ -private val deans = mapOf( - Name("James") to Dean(Name("James")) -) - -/* gets a student by name */ -suspend fun student(name: Name): Either = - students[name]?.let(::Right) ?: Left(NotFound) - -/* gets a university by id */ -suspend fun university(id: UniversityId): Either = - universities[id]?.let(::Right) ?: Left(NotFound) - -/* gets a dean by name */ -suspend fun dean(name: Name): Either = - deans[name]?.let(::Right) ?: Left(NotFound) - -suspend fun main(): Unit { - //sampleStart - val dean = student(Name("Alice")).flatMap { alice -> - university(alice.universityId).flatMap { university -> - dean(university.deanName) - } - } - //sampleEnd - println(dean) -} -``` - -The sequence of events is assured in that `university` will not be called until `student` returns a result. - -If `student` returns `Left(NotFound)`, then `university` and consequently `dean` will never be called. - -While this coding style based on flatMap is an improvement for domains like asynchrony in other langs, the readability for users accustomed to traditional imperative code suffers and this style is innecesary in languages like Kotlin with native support for continuations. - -### Comprehensions over coroutines - -This feature is known with multiple names: async/await, coroutines, do notation, for comprehensions, etc. Each version contains certain unique points, but all derive from the same principles. -In Kotlin, coroutines (introduced in version 1.1 of the language) make the compiler capable of rewriting seemingly synchronous code into asynchronous sequences. -Arrow uses this capability of the compiler to bring you coroutines-like notation to all instances of the `Effect` interface. - -This means that comprehensions are available for `Option`, `Either`, `Eval`, and other datatypes. -In the following examples, we'll use `Either`, as it's a simple datatype that thanks to its inlined api and suspended comprehensions can be inter mixed with concurrency and async behaviors in the same scope. - -Most instances of `Effect` contain a method `invoke` brings the ability to extract in place a type `` from a `F` where F is the implementing data-type of the Effect interface. - -The `Effect` interface is itself exposed as receiver functions which projects its scope including the ability to perform monad bind via the `invoke` operator. - -Let's see a minimal example. - -```kotlin -import arrow.core.computations.either - -//sampleStart -suspend fun test(): Either = - either { 1 } -//sampleEnd - -suspend fun main() { - println(test()) -} -``` - -Anything in the function inside `either` can be imperative and sequential code that'll be executed when the data type decides. - -In the case of [`Either`]({{ '/apidocs/arrow-core/arrow.core/-either/' | relative_url }}), it is strictly running and implemented in terms of fold. Let's expand the example by adding a second operation: - -```kotlin -import arrow.core.computations.either - -either { - val one = Right(1) - 1 + one -} -// Compiler error: the type of one is Either, cannot add 1 to it -``` - -This is our first challenge. We've created an instance of [`Right`]({{ '/apidocs/arrow-core/arrow.core/-either/' | relative_url }}), and we cannot get the value from inside it. -From the previous snippet, the first intuition would be to call `fold` on `one` to get the value and otherwise throw an exception if it was a `Left`. -This will blow up the stack and won't be obvious to users that our method can fail with an exceptions. What we want instead is to suspend and short-circuit on Left values and continue computing over Right values. - -```kotlin -import arrow.core.computations.either -import arrow.core.Either.Left - -suspend fun test(): Either = - either { - val one = Right(1).bind() - 1 + one - } - -suspend fun main() { - println(test()) -} -``` - -What `invoke()` does is use the rest of the sequential operations as the function you'd normally pass to `flatMap` and it does so internally using the kotlin suspension system and support for continuations. - -The equivalent code without using comprehensions would look like: - -```kotlin -import arrow.core.flatMap -import arrow.core.Either.Left - -//sampleStart -val x: Either = Right(1) -val result = x.flatMap { one -> - Right(one + 1) -} -//sampleEnd -suspend fun main() { - println(result) -} -``` - -With this new style, we can rewrite our original example of database fetching as: - -```kotlin -import arrow.core.computations.either -import arrow.core.Either -import arrow.core.Either.Left -import arrow.core.Either.Right - -/* A simple model of student and a university */ -object NotFound -data class Name(val value: String) -data class UniversityId(val value: String) -data class University(val name: Name, val deanName: Name) -data class Student(val name: Name, val universityId: UniversityId) -data class Dean(val name: Name) - -/* in memory db of students */ -private val students = mapOf( - Name("Alice") to Student(Name("Alice"), UniversityId("UCA")) -) - -/* in memory db of universities */ -private val universities = mapOf( - UniversityId("UCA") to University(Name("UCA"), Name("James")) -) - -/* in memory db of deans */ -private val deans = mapOf( - Name("James") to Dean(Name("James")) -) - -/* gets a student by name */ -suspend fun student(name: Name): Either = - students[name]?.let(::Right) ?: Left(NotFound) - -/* gets a university by id */ -suspend fun university(id: UniversityId): Either = - universities[id]?.let(::Right) ?: Left(NotFound) - -/* gets a dean by name */ -suspend fun dean(name: Name): Either = - deans[name]?.let(::Right) ?: Left(NotFound) - -suspend fun main(): Unit { - //sampleStart - val dean = either { - val alice = student(Name("Alice")).bind() - val uca = university(alice.universityId).bind() - val james = dean(uca.deanName).bind() - james - } - //sampleEnd - println(dean) -} -``` - -We can observe comparing the original `flatMap` version that thanks to monad the `invoke` operator we can simplify callback nesting and turn code that previously relied on higher order functions such as flatMap into an imperative sequence of commands while preserving the semantics of the data type, in this case `Either`. diff --git a/arrow-site/docs/docs/patterns/monads/README.md b/arrow-site/docs/docs/patterns/monads/README.md deleted file mode 100644 index 0d62f846502..00000000000 --- a/arrow-site/docs/docs/patterns/monads/README.md +++ /dev/null @@ -1,602 +0,0 @@ ---- -layout: docs-core -title: The Monad Tutorial -permalink: /patterns/monads/ ---- - -### Credits - -This doc has been adapted from Mikhail Shilkov's blog entry [`Monads explained in C# (again)`](https://mikhail.io/2018/07/monads-explained-in-csharp-again/). It attempts to explain the rationale behind Monads, providing simple examples showing how they relate to standard library constructs. - -### Intro - -I love functional programming for the simplicity that it brings. - -But at the same time, I realize that learning functional programming is a challenging process. FP comes with a baggage of unfamiliar vocabulary that can be daunting for somebody coming from an object-oriented language like Kotlin. - -![](https://mikhail.io/2018/07/monads-explained-in-csharp-again//functional-programming-word-cloud.png) - -*some of the functional lingo* - -`Monad` is probably the most infamous term from the list above. Monads have the reputation of being something very abstract and very confusing. - -### The Fallacy of Monad Tutorials - -Numerous attempts were made to explain monads in simple definitions. And monad tutorials have become a genre of its own. And yet, time and time again, they fail to enlighten the readers. - -The shortest explanation of monads looks like this: - -> A Monad is just a monoid in the category of endofunctors. - -It's both mathematically correct and totally useless to anybody learning functional programming. To understand this statement, one has to know the terms "monoid", "category" and "endofunctors" and be able to mentally compose them into something meaningful. - -The same problem is apparent in most monad tutorials. They assume some pre-existing knowledge in the heads of their readers, and if that assumption fails, the tutorial doesn't click. - -Focusing too much on mechanics of monads, instead of explaining why they are important, is another common problem. - -Douglas Crockford grasped this fallacy very well: - ->The monadic curse is that once someone learns what monads are and how to use them, they lose the ability to explain them to other people - -The problem here is likely the following: Every person who understands monads had their own path to this knowledge. It hasn't come all at once. Instead, there was a series of steps, each giving an insight, until the last final step made the puzzle complete. - -But they don't remember the whole path anymore. They go online and blog about that very last step as the key to understanding, joining the club of flawed explanations. - -There is an actual academic paper from Tomas Petricek that studies monad tutorials. - -I've read that paper and a dozen of monad tutorials online. And, of course, now I came up with my own. - -I'm probably doomed to fail too, at least for some readers. - -### Story of Composition - -The base element of each functional program is Function. In typed languages, each function is just a mapping between the type of its input parameter and output parameter. Such type can be annotated as `func: TypeA -> TypeB`. - -Kotlin is a hybrid functional / object-oriented language, so we use top level functions or methods to declare functions. There are two ways to define a method comparable to function `func` above. I can use a top level "static" function: - -```kotlin -class ClassA -class ClassB -fun func(a: ClassA): ClassB = TODO() -``` - -... or an instance method: - -```kotlin -class ClassA { - // Instance method - fun func(): ClassB = TODO() -} -``` - -The top level form looks closer to the function notation, but both ways are actually equivalent for the purpose of our discussion. I will use instance methods in my examples, however all of them could be written as top level extension methods too. - -How do we compose more complex workflows, programs, and applications out of such simple building blocks? A lot of patterns in both OOP and FP worlds revolve around this question. And monads are one of the answers. - -My sample code is going to be about conferences and speakers. The method implementations aren't really important. Just watch the types carefully. There are 4 classes (types) and 3 methods (functions): - -```kotlin -class Speaker { - fun nextTalk(): Talk = TODO() -} - -class Talk { - fun getConference(): Conference = TODO() -} - -class Conference { - fun getCity(): City = TODO() -} - -class City -``` - -These methods are currently very easy to compose into a workflow: - -```kotlin -fun nextTalkCity(speaker: Speaker): City { - val talk = speaker.nextTalk() - val conf = talk.getConference() - val city = conf.getCity() - return city -} -``` - -Because the return type of the previous step always matches the input type of the next step, we can write it even shorter: - -```kotlin -fun nextTalkCity(speaker: Speaker): City = - speaker - .nextTalk() - .getConference() - .getCity() -``` - -This code looks quite readable. It's concise, and it flows from top to bottom, from left to right, similar to how we are used to reading any text. There isn't much noise either. - -That's not what real codebases look like though, because there are multiple complications along the happy composition path. Let's look at some of them. - -### Nullability - -When interacting with Java or other languages whose function may return null with any type hints any value returned can be null. - -In the example above, I might get runtime errors if one of the methods ever returns null back. - -Typed functional programming always tries to be explicit about types, so I'll re-write the signatures of my methods to annotate the return types as nullables: - -```kotlin -class Speaker { - fun nextTalk(): Talk? = null -} - -class Talk { - fun getConference(): Conference? = null -} - -class Conference { - fun getCity(): City? = null -} -``` - -Now, when composing our workflow, we need to take care of null results: - -```kotlin -fun nextTalkCity(speaker: Speaker?): City? { - if (speaker == null) return null - - val talk = speaker.nextTalk() - if (talk == null) return null - - val conf = talk.getConference() - if (conf == null) return null - - val city = conf.getCity() - return city -} -``` - -It's still the same method, but it has more noise now. Even though I used short-circuit returns and one-liners, it still got harder to read. - -To fight that problem, smart language designers came up with the [Safe Call Operator](https://kotlinlang.org/docs/reference/null-safety.html#safe-calls): - -```kotlin -fun nextTalkCity(speaker: Speaker?): City? = - speaker - ?.nextTalk() - ?.getConference() - ?.getCity() -``` - -Now we are almost back to our original workflow code: It's clean and concise, but we still have 3 extra `?` symbols hanging around. - -Let's take another leap. - -### Errors - -Quite often, a function returns a `success` or an `error`, not just a `null` value as we did before. To some extent, that's a generalization of `null` case: With `T?`, we might get 0 or 1 results back, while, with something like `Either` or an similar type, we can get failure or success results. - -Our sample API could look like this: - -```kotlin -import arrow.core.Either -import arrow.core.Either.Left - -object NotFound - -class Speaker { - fun getTalk(): Either = - Left(NotFound) -} - -class Talk { - fun getConference(): Either = - Left(NotFound) -} - -class Conference { - fun getCity(): Either = - Left(NotFound) -} -``` - -How would we combine the methods into one workflow? The traditional version would look like this: - -```kotlin -import arrow.core.flatMap - -fun cityToVisit(speaker: Speaker): Either = - speaker - .getTalk() - .flatMap { talk -> talk.getConference() } - .flatMap { conf -> conf.getCity() } -``` - -It still reads ok-ish. But the combination of flatMaps can get unreadable pretty fast, specially in a more complex model with further nesting. The exact workflow might be lost in the mechanics. - -Let me do one additional trick and format the same code in an unusual way: - -```kotlin -fun cityToVisit(speaker: Speaker): Either = - speaker - .getTalk() .flatMap { x -> x - .getConference() }.flatMap { x -> x - .getCity() } -``` - -Now you can see the original code on the left, combined with just a bit of technical repetitive clutter on the right. Hold on, I'll show you where I'm going. - -Let's discuss another possible complication. - -### Asynchronous Calls - -What if our methods need to access some remote database or service to produce the results? This should be shown in type signature, -and we can imagine a library providing a `Task`, `IO`, `Mono` type for that. -Luckily in Kotlin we have `suspend` functions which fix the problem of nesting and callbacks all around. -Kotlin suspension is an ideal place to use monads because it allows imperative and direct syntax over monadic data types without the burden of flatMap chains. - -```kotlin -class Speaker { - suspend fun nextTalk(): Talk = TODO() -} - -class Talk { - suspend fun getConference(): Conference = TODO() -} - -class Conference { - suspend fun getCity(): City = TODO() -} -``` - -This change fixes our nice workflow composition again. - -```kotlin -suspend fun nextTalkCity(speaker: Speaker): City { - val talk = speaker.nextTalk() - val conf = talk.getConference() - val city = conf.getCity() - return city -} -``` - -or simply - -```kotlin -suspend fun nextTalkCity(speaker: Speaker): City = - speaker.nextTalk().getConference().getCity() -``` - -You can see that, once again, it's our nice, readable workflow. - -### Pattern - -Can you see a pattern yet? - -I'll repeat the `T?`, `Either`, `suspend () -> T`-based workflows again: - -```kotlin -fun nextTalkCity(speaker: Speaker?): City? { - return - speaker ? - .nextTalk() ? - .getConference() ? - .getCity() -} - -fun allCitiesToVisit(speaker: Speaker): Either { - return - speaker - .getTalks() .flatMap { x -> x - .getConferences() }.flatMap { x -> x - .getCities() } -} - -suspend fun nextTalkCity(speaker: Speaker): City { - return - speaker - .nextTalk() - .getConference() - .getCity() -} -``` - -In the first 2 cases, there was a complication that prevented us from sequencing method calls fluently. -In the last case with `suspend` functions we have the maximum expression and simplification where we observe there is no need to call `flatMap` or create any callbacks. -Kotlin `suspend` is a form of the Continuation monad from which other monads can be generalized and composed thanks to its async and concurrent capable nature. -Using `suspend` callback and completion features Arrow is able to bring direct syntax to all these monadic data-types. - -Let's try to generalize this approach from the very beginning. -Given some generic container type `WorkflowThatReturns`, we have a method to combine an instance of such a workflow with a function that accepts the result of that workflow and returns another workflow back: - -```kotlin -class WorkflowThatReturns { - fun addStep(step: (T) -> WorkflowThatReturns): WorkflowThatReturns -} -``` - -In case this is hard to grasp, have a look at the picture of what is going on: - -![](https://mikhail.io/2018/07/monads-explained-in-csharp-again//monad-bind.png) - -An instance of type `T` sits in a generic container. - -We call `addStep` with a function, which maps `T` to `U` sitting inside yet another container. - -We get an instance of `U`, but inside two containers. - -Two nested containers are automatically flattened into a single container to get back to the original shape. - -Now we are ready to add another step! - -In the following code, `nextTalk` returns the first instance inside the container: - -```kotlin -fun workflow(speaker: Speaker): WorkflowThatReturns { - return - speaker - .nextTalk() - .addStep { x -> x.getConference() } - .addStep { x -> x.getCity() } -} -``` - -Subsequently, `addStep` is called two times to transfer to `Conference` and then `City` inside the same container: - -![](https://mikhail.io/2018/07/monads-explained-in-csharp-again//monad-two-binds.png) - -### Finally, Monads - -The name of this pattern is **Monad**. - -In Arrow terms, a Monad can be implemented by means of the Effect interface. - -The `Effect` interface defines the ability to have a scope in which a coroutine can be used to complete the context or yield a value. - -```kotlin -fun interface Effect { - fun control(): DelimitedScope -} -``` - -We can then define specific effects for our data types that implement Monad bind. - -```kotlin -import arrow.continuations.Effect - -fun interface NullableEffect : Effect { - suspend fun B?.bind(): B = - this ?: control().shift(null) -} -``` - -Monad `bind` is then implemented by shifting out of the context with `null` if the value being bound happens to be null or yielding the value by returning it if not null. - -`control().shift(value)` can be seen as a functional throw. Once we pass a value the context of our Effect will exit with `value`. - -With `control().shift` based on the `Effect` interface we can implement monad bind short-circuiting and other patterns supported by the Continuation monad for arbitrary data types. - -```kotlin -object nullable { - operator fun invoke(func: suspend NullableEffect<*>.() -> A?): A? = - Effect.restricted(eff = { NullableEffect { it } }, f = func, just = { it }) -} -``` - -The argument `just` in `Effect` is used to put the result of the computation expression in the Effect we are modeling, in this case nullability and absence typed as `A?`. - -In the example above we saw that in order to form a Monad we need a `just` constructor used in the effect block and an implementation for `suspend bind` declared in a subtype of the `Effect` interface. - -The Effect interface provides a `restricted` scope for pure computations that do not require suspension and a `suspended` block for those that do require suspension. - -Finally we can use our new `nullable` effect block, and its `bind` function to compute over the happy path of nullable typed values. - -```kotlin -suspend fun nextTalkCity(maybeSpeaker: Speaker?): City? = - nullable { - val speaker = maybeSpeaker.bind() - val talk = speaker.nextTalk().bind() - val conf = talk.getConference().bind() - val city = conf.getCity().bind() - city - } -``` - -Even though I spent quite some time with examples, we expect you to be slightly confused at this point. That's ok. - -Keep going and let's have a look at several sample implementations of the Monad pattern. - -### Option - -My first example was with nullable `?`. The full pattern containing either 0 or 1 instance of some type is called Option (it might have a value, but might not). - -While nullable types are faster, Option is still required in some cases for interoperability with Java and polymorphism where you may want to represent nesting with `Option>`. Having said that we still recommend you use nullable types over Option where possible as the Kotlin language provides direct support for them in the type system. - -Option is yet another approach to dealing with absence of a value, an alternative to the concept of `null`. You can read more about [`Option`]({{ '/apidocs/arrow-core/arrow.core/-option/' | relative_url }}) to see how Arrow implements it. - -When null is not allowed, any API contract gets more explicit: Either you return type `T` and it's always going to be filled, or you return `Option`. -The client will see that Option type is used, so it will be forced to handle the case of absent value. - -Given an imaginary repository contract (which does something with customers and orders): - -```kotlin -import arrow.core.Option -import arrow.core.None - -data class Customer(val addressId: Int) -data class Address(val id: Int, val lastOrder: Option = None) -data class Order(val id: Int, val shipper: Shipper = Shipper) -object Shipper - -interface OptionRepository { - fun getCustomer(id: Int): Option = None - fun getAddress(id: Int): Option
= None - fun getOrder(id: Int): Option = None -} -``` - -The monad `bind` behavior can be written without `flatMap` in a direct style: - -```kotlin -fun interface OptionEffect : Effect> { - suspend fun Option.bind(): B = - fold({ control().shift(None) }, { it }) -} - -object option { - operator fun invoke(func: suspend OptionEffect<*>.() -> A?): Option = - Effect.restricted(eff = { OptionEffect { it } }, f = func, just = { Option.fromNullable(it) }) -} - -suspend fun OptionRepository.shipperOfLastOrderOnCurrentAddress(customerId: Int): Option = - option { - val customer = getCustomer(customerId).bind() - val address = getAddress(customer.addressId).bind() - val lastOrder = address.lastOrder.bind() - val order = getOrder(lastOrder.id).bind() - order.shipper - } -``` - -We observe here how in the same way we implemented and used monad comprehensions for nullable types, we now implement the same Monad pattern, this time over `Option`. Fortunately Arrow already provides all these effect builders for all the data types that support monadic behavior. - -### Abstraction for all Monads - -We're going to dispel one common misconception. -Sometimes the word Monad is used to refer to types like Option, Future, Either, and so on, and that's not correct. -Those are called data-types or just types. Let's see the difference! - -As you have seen, neither A? nor Option implement Monad directly. Their actual `bind` and `just` capabilities are described by implementing the `Effect` interface. - -This is intentional, as you can potentially have several Monad implementations for a single type or even mix non-monadic effects inside `Effect` interfaces in order to provide more expressive DSLs. This is notorious in the actual Arrow implementations where effects such as `Either` can perform different forms of monad bind over multiple types like `Either` and `Validated` using the same idioms. - -Arrow specifies that Monad capabilities must be implemented by a separate object or class in terms of the `Effect` interface, referred to as the "instance of Monad for type F" or "computation expression for F". - -More info on binding and effects is available at [Computation Expressions and Monad Comprehensions]({{ '/patterns/monad_comprehensions' | relative_url }}), and you can find a complete section of the docs explaining it. - -### Monad Laws - -A typical monad tutorial will place a lot of emphasis on the laws, but we find them less important to explain to folks learning about Monads for usage purposes. Nonetheless, here they are for the sake of completeness or for those cases where you wish to implement your own monad or Effect instances. - -There are a couple laws that the `just` constructor and `bind` need to adhere to consider the Effect a Monad with a stable implementation. -These laws are encoded in Arrow as tests and are already applied on all `Effect` instances in the library. - -Let us re-write the laws in effect-notation. `effect` here represents `either`, `option` or any effect implementing `suspend bind` and a constructor here represented as `just`. - -`Left Identity law` says that Monad constructor is a neutral operation: You can safely run it before `bind`, and it won't change the result of the function call: - -To demonstrate the laws we will use this version of the Identity monad and we will name it `Just`. -Unlike `Option`, `Either` and other types here `Just` has no effect and simply models access to the identity of a value of type `A` - -```kotlin -data class Just(val value: A) - -fun interface JustEffect : Effect> { - suspend fun Just.bind(): B = value -} - -object effect { - operator fun invoke(func: suspend JustEffect<*>.() -> A): Just = - Effect.restricted(eff = { JustEffect { it } }, f = func, just = { Just(it) }) -} -``` - -Left identity: - -Let's define `x` && `f` as - -```kotlin -fun f(x: Int): Just = Just(x) -val x = 1 -``` - -then - -```kotlin -effect { - val x2 = Just(x).bind() - f(x2).bind() -} -``` - -is the same as - -```kotlin -effect { - f(x).bind() -} -``` - -`Right Identity law` says that, given a monadic value, wrapping its contained data into another monad of same type and then `bind` it doesn't change the original value: - -Right identity: - -Given `m` defined as - -```kotlin -val m = Just(0) -``` - -then - -```kotlin -effect { - val x = m.bind() - Just(x).bind() -} -``` - -is the same as - -```kotlin -effect { m.bind() } -``` - -`Associativity law` means that the order in which `bind` operations are composed does not matter. - -Associativity: - -Given `m`, `f` and `g` are defined as - -```kotlin -val m = Just(0) -fun f(x: Int): Just = Just(x) -fun g(x: Int): Just = Just(x + 1) -``` - -All the 3 example below are the same - -```kotlin -effect { - val y = effect { - val x = m.bind() - f(x).bind() - }.bind() - g(y).bind() -} -``` - -```kotlin -effect { - val x = m.bind() - effect { - val y = f(x).bind() - g(y).bind() - }.bind() -} -``` - -```kotlin -effect { - val x = m.bind() - val y = f(x).bind() - g(y).bind() -} -``` - -The laws may look complicated, but, in fact, they are very natural expectations that any developer has when working with monads, so don't spend too much mental effort on memorizing them. - -### Conclusion - -Don't be afraid of the "M-word" just because you are a Kotlin programmer. - -Kotlin has a notion of monads as predefined language construct through its suspension system and this gives us tremendous power to write monadic applications in direct style using suspend functions and continuations with Kotlin and Arrow. diff --git a/arrow-site/docs/docs/prism/README.md b/arrow-site/docs/docs/prism/README.md deleted file mode 100644 index 345a54d84d7..00000000000 --- a/arrow-site/docs/docs/prism/README.md +++ /dev/null @@ -1,142 +0,0 @@ ---- -layout: docs-optics -title: Prism -permalink: /optics/prism/ ---- - -## Prism - - -A `Prism` is a lossless invertible optic that can see into a structure and optionally find its focus, and construct a value given that piece of data. They're mostly used for structures that have a relationship only under a certain condition, i.e., a certain `sum` of a `sum type` (`sealed class`), the head of a list, or all whole double values and integers (safe casting). - -Since `Prism` has an optional focus, it can be seen as a pair of functions: `getOrModify` and `reverseGet`. - -* `getOrModify: A -> Either`, meaning we can get the focus of a `Prism` OR return the original value. -* `reverseGet : B -> A`, meaning we can construct the source type of a `Prism` from a `B`. - -Given a `Prism`, we can write functions that work on the focus `A` without having to worry if the focus can be seen in `S`. - -For a sum type `NetworkResult`, we can create a `Prism` that has a focus into `Success`. - -```kotlin -import arrow.core.* -import arrow.optics.* - -sealed class NetworkResult { - data class Success(val content: String): NetworkResult() - object Failure: NetworkResult() -} - -val networkSuccessPrism: Prism = Prism( - getOrModify = { networkResult -> - when(networkResult) { - is NetworkResult.Success -> networkResult.right() - else -> networkResult.left() - } - }, - reverseGet = { networkResult -> networkResult } //::identity -) -``` - -As is clear from above `Prism` definition, it gathers two concepts: pattern matching and constructor. - -As mentioned, we can now operate on `NetworkResult` as if it were `Success`. - -```kotlin -val networkResult = NetworkResult.Success("content") - -networkSuccessPrism.modify(networkResult) { success -> - success.copy(content = "different content") -} -``` - -We can also lift such functions. - -```kotlin -val lifted: (NetworkResult) -> NetworkResult = networkSuccessPrism.lift { success -> - success.copy(content = "different content") -} -lifted(NetworkResult.Failure) -``` - -`Prisms` can easily be created by using any of the already mentioned constructors, although, for a `sealed class`, a `Prism` could easily be [generated](#generated-prisms). But we can also use a `PartialFunction` to create a `Prism`. - -```kotlin -val doubleToInt: Prism = Prism( - getOption = { double: Double -> - val i = double.toInt() - if (i.toDouble() == double) Some(i) else None - }, - reverseGet = Int::toDouble -) -``` - -## Composition - -Nesting pattern matching blocks are tedious. We would prefer to define them separately and compose them together. We can do that by composing multiple `Prisms`. - -Let's imagine from our previous example that we want to retrieve an `Int` from the network. We get a `Success` OR a `Failure` from the network. In case of a `Success`, we want to safely cast the `String` to an `Int`. - -```kotlin -import arrow.core.* - -val successToInt: Prism = Prism( - getOption = { success -> success.content.toIntOrNull().toOption() }, - reverseGet = NetworkResult::Success compose Int::toString -) - -val networkInt: Prism = networkSuccessPrism compose successToInt -``` -```kotlin -networkInt.getOrNull(NetworkResult.Success("invalid int")) -``` -```kotlin -networkInt.getOrNull(NetworkResult.Failure) -``` -```kotlin -networkInt.getOrNull(NetworkResult.Success("5")) -``` -`Prism` can be composed with all optics but `Getter`, and result in the following optics: - -| | Iso | Lens | Prism |Optional | Getter | Setter | Fold | Traversal | -| --- | --- | --- | --- |--- | --- | --- | --- | --- | -| Prism | Prism | Optional | Prism | Optional | X | Setter | Fold | Traversal | - -## Generated prisms - -Prisms can be generated for `sealed classes` by the `@optics` annotation. For every defined subtype, a `Prism` will be generated. -The prisms will be generated as extension properties on the companion object `val T.Companion.subTypeName`. - -```kotlin -@optics sealed class Shape { - companion object { } - data class Circle(val radius: Double) : Shape() - data class Rectangle(val width: Double, val height: Double) : Shape() -} -``` -```kotlin -val circleShape: Prism = Shape.circle -val rectangleShape: Prism = Shape.rectangle -``` - -### Polymorphic prisms -When dealing with polymorphic sum types like `Option`, we can also have polymorphic prisms that allow us to polymorphically change the type of the focus of our `PPrism`. The following method is also available as `PSome()` in the `arrow.optics` package: - -```kotlin -fun optionSome(): PPrism, Option, A, B> = PPrism( - getOrModify = { option -> option.fold({ Either.Left(None) }, { Either.Right(it) }) }, - reverseGet = { b -> Some(b) } -) - -val liftSome: (Option) -> Option = PSome().lift(Int::toString) -liftSome(Some(5)) -``` -```kotlin -liftSuccess(None) -``` - -### Laws - -Arrow provides [`PrismLaws`][prism_laws_source]{:target="_blank"} in the form of test cases for internal verification of lawful instances and third party apps creating their own prisms. - -[prism_laws_source]: https://github.com/arrow-kt/arrow/blob/main/modules/core/arrow-test/src/main/kotlin/arrow/test/laws/PrismLaws.kt diff --git a/arrow-site/docs/docs/quickstart/README.md b/arrow-site/docs/docs/quickstart/README.md deleted file mode 100644 index 478fd4e60ed..00000000000 --- a/arrow-site/docs/docs/quickstart/README.md +++ /dev/null @@ -1,312 +0,0 @@ ---- -layout: quickstart -title: Quick Start -permalink: /quickstart/ ---- - -
-[![Maven Central](https://img.shields.io/maven-central/v/io.arrow-kt/arrow-core?color=4caf50&label=latest%20release)](https://maven-badges.herokuapp.com/maven-central/io.arrow-kt/arrow-core) -[![Latest snapshot](https://img.shields.io/badge/dynamic/xml?color=orange&label=latest%20snapshot&prefix=v&query=%2F%2Fmetadata%2Fversioning%2Flatest&url=https%3A%2F%2Foss.sonatype.org%2Fservice%2Flocal%2Frepositories%2Fsnapshots%2Fcontent%2Fio%2Farrow-kt%2Farrow-core%2Fmaven-metadata.xml)](https://oss.sonatype.org/service/local/repositories/snapshots/content/io/arrow-kt/) -[![Kotlin version](https://img.shields.io/badge/Kotlin-1.4-blue)](https://kotlinlang.org/docs/reference/whatsnew14.html) -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0) -[![StackOverflow](https://img.shields.io/badge/arrow--kt-grey.svg?logo=stackoverflow)](https://stackoverflow.com/questions/tagged/arrow-kt) -[![Twitter](https://img.shields.io/twitter/follow/arrow_kt?color=blue&style=flat)](https://twitter.com/arrow_kt) -
- - -
- - -
-
-# Λrrow is a library for Typed Functional Programming in Kotlin. -Arrow is composed of 4 main modular libraries -
-
- - - -
-
-### Fx -Arrow Fx is a full-featured, high-performance, asynchronous framework that brings functional operators to Kotlin's `suspend` functions. -By leveraging the power of KotlinX Coroutines and the compiler support for CPS transformations, Arrow Fx results in optimal async programs with increased throughput and decreased allocations. - -Read more -
-
-![Fx]({{ "/img/quickstart/modular-libraries-fx.svg" | relative_url }} "Arrow Fx") -
-
- -
-
-### Optics -Arrow Optics provides an automatic DSL that allows users to use `.` notation when accessing, composing, and transforming deeply nested immutable data structures. -Optics also offers all the base types such as [Lens]({{ "/optics/lens/" | relative_url }}), [Prism]({{ '/optics/prism/' | relative_url }}), and others from which we can generalize accessing and traversing deep values in sealed and data classes models. - -Read more -
-
-![Optics]({{ "/img/quickstart/modular-libraries-optics.svg" | relative_url }} "Arrow Optics") -
-
- -
-
-### Meta -Arrow Meta is a general purpose library for meta-programming in Kotlin to build compiler plugins. -Some type system features proposed by Arrow such as union types, product types, proof derivation, and others are built with Arrow Meta and serve as examples of what could be incorporated in the Kotlin compiler. - -Read more -
-
-![Meta]({{ "/img/quickstart/modular-libraries-meta.svg" | relative_url }} "Arrow Meta") -
-
- -
-
- - - -
-## Setup - -{: .setup-subtitle} -Configure Arrow for your project -
-
-![Jdk]({{ "/img/quickstart/jdk-logo.svg" | relative_url }} "jdk") - -Make sure to have the latest version of JDK 1.8 installed. -
-
-![Android]({{ "/img/quickstart/android-logo.svg" | relative_url }} "android") - - -Arrow supports Android starting on API 21 and up. -
-
- -
- -
- - - -
- - -
- -#### Basic Setup - -In your project's root `build.gradle.kts`, append this repository to your list: - -```kotlin -allprojects { - repositories { - mavenCentral() - } -} -``` - -Add the dependencies into the project's `build.gradle.kts`: - -##### Arrow Core - -```kotlin -dependencies { - implementation("io.arrow-kt:arrow-core:1.0.1") -} -``` - -##### Arrow Core + Arrow Optics - -``` -apply plugin: 'com.google.devtools.ksp' - -dependencies { - implementation("io.arrow-kt:arrow-optics:1.0.1") - ksp("io.arrow-kt:arrow-optics-ksp-plugin:$arrowVersion") -} -``` - -here is an example repository https://github.com/arrow-kt/Arrow-JVM-Template/tree/optics-setup. - -##### Arrow Core + Arrow Fx - -``` -dependencies { - implementation("io.arrow-kt:arrow-fx-coroutines:1.0.1") -} -``` - -#### BOM file - -To avoid specifying the Arrow version for every dependency, a BOM file is available: - -``` -dependencies { - implementation(platform("io.arrow-kt:arrow-stack:1.0.1")) - - implementation("io.arrow-kt:arrow-core") - implementation("io.arrow-kt:arrow-fx-coroutines") - ... -} -``` - -#### Next development version - -If you want to try the latest features, replace `1.0.1` with the latest `alpha` release. - -
- -
- -#### Basic Setup - -In your project's root `build.gradle`, append this repository to your list: - -```groovy -allprojects { - repositories { - mavenCentral() - } -} -``` - -Add the dependencies into the project's `build.gradle`: - -##### Arrow Core - -```groovy -def arrow_version = "1.0.1" -dependencies { - implementation "io.arrow-kt:arrow-core:$arrow_version" -} -``` - -##### Arrow Core + Arrow Optics - -```groovy -apply plugin: 'com.google.devtools.ksp' - -dependencies { - implementation "io.arrow-kt:arrow-optics:1.0.1" - ksp "io.arrow-kt:arrow-optics-ksp-plugin:$arrowVersion" -} -``` - -here is an example repository https://github.com/arrow-kt/Arrow-JVM-Template/tree/optics-setup. - -##### Arrow Core + Arrow Fx - -```groovy -def arrow_version = "1.0.1" -dependencies { - implementation "io.arrow-kt:arrow-fx-coroutines:$arrow_version" -} -``` - -#### BOM file - -To avoid specifying the Arrow version for every dependency, a BOM file is available: - -```groovy -def arrow_version = "1.0.1" -dependencies { - implementation platform("io.arrow-kt:arrow-stack:$arrow_version") - - implementation "io.arrow-kt:arrow-core" - implementation "io.arrow-kt:arrow-fx-coroutines" - ... -} -``` - -#### Next development version - -If you want to try the latest features, replace `1.0.1` with the latest `alpha` release. - -
- -
- -#### Basic Setup - -Make sure to have at least the latest version of JDK 1.8 installed. Add to your pom.xml file the -following properties: - -```xml - - - 1.6.10 - 1.0.1 - -``` - -Add the dependencies that you want to use: - -```xml - - - io.arrow-kt - arrow-core - ${arrow.version} - -``` - -#### BOM file - -To avoid specifying the Arrow version for every dependency, a BOM file is available: - -```xml - - - - - io.arrow-kt - arrow-stack - ${arrow.version} - pom - import - - - -... - -``` - -#### Next development version - -If you want to try the latest features, replace `1.0.1` with the latest `alpha` release. -
-
- -
diff --git a/arrow-site/docs/docs/setter/README.md b/arrow-site/docs/docs/setter/README.md deleted file mode 100644 index 935a0657185..00000000000 --- a/arrow-site/docs/docs/setter/README.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -layout: docs-optics -title: Setter -permalink: /optics/setter/ ---- - -## Setter - - -A `Setter` is an optic that can see into a structure and set or modify its focus. - -It is a generalization of `map`. -A structure `S` that has a focus `A` to which we can apply a function `(A) -> B` to `S` and get `T`. -For example, `S == List` to which we apply `(Int) -> String` and we get `T == List`. - -- `List.map(f: (Int) -> String): List` -- `PSetter#modify(s: List, f: (Int) -> String): List` - -You can get a `Setter` for any existing `map`. - -To create your own `Setter`, you need to define how to apply `(A) -> B` to `S`. - -A `Setter` can set and modify the value of `Player`. So we need to define how to apply a function `(Int) -> Int` to `Player`. - -## Composition - -Unlike a regular `set` function, a `Setter` composes. Similar to a [`Lens`]({{'/optics/lens' | relative_url }}), we can compose `Setter`s to focus into nested structures and set or modify a value. - -`Setter` can be composed with all optics but `Getter` and `Fold`. It results in the following optics: - -| | Iso | Lens | Prism |Optional | Getter | Setter | Fold | Traversal | -| --- | --- | --- | --- |--- | --- | --- | --- | --- | -| Setter | Setter | Setter | Setter | Setter | X | Setter | X | Setter | - -### Polymorphic setter - -When dealing with polymorphic types, we can also have polymorphic setters that allow us to morph the type of the focus. -Previously, when we used a `Setter, Int>`, it was able to morph the `Int` values in the constructed type `List`. -With a `PSetter, List, Int, String>`, we can morph an `Int` value to a `String` value and thus also morph the type from `List` to `List`. - -### Laws - -Arrow provides [`SetterLaws`][setter_laws_source]{:target="_blank"} in the form of test cases for internal verification of lawful instances and third party apps creating their own setters. - -[setter_laws_source]: https://github.com/arrow-kt/arrow/blob/main/modules/core/arrow-test/src/main/kotlin/arrow/test/laws/SetterLaws.kt diff --git a/arrow-site/docs/docs/snoc/README.md b/arrow-site/docs/docs/snoc/README.md deleted file mode 100644 index 998a2acc522..00000000000 --- a/arrow-site/docs/docs/snoc/README.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -layout: docs-optics -title: Snoc -permalink: /optics/snoc/ ---- - -## Snoc - -`Snoc` provides a [Prism]({{ '/optics/prism' | relative_url }}) between `S` and its init `A` and last element `S`. -`Snoc` can be seen as the reverse of [Cons]({{ '/optics/cons' | relative_url }}); it provides a way to attach or detach elements on the end side of a structure. - -It can be constructed by providing the `Prism`. - -```kotlin -import arrow.optics.typeclasses.Snoc - -val listLast = Snoc.list().snoc() -val instance = Snoc(listLast) -instance -``` - -It defines two functions `snoc` and `unsnoc`. - -`snoc` appends an element `A` to a structure `S`. - -```kotlin -import arrow.optics.snoc - -listOf(1, 2) snoc 3 -``` - -`unsnoc` detaches the last element `A` from a structure `S`. - -```kotlin -import arrow.optics.unsnoc - -listOf(1, 2, 3).unsnoc() -``` -```kotlin -emptyList().unsnoc() -``` diff --git a/arrow-site/docs/docs/traversal/README.md b/arrow-site/docs/docs/traversal/README.md deleted file mode 100644 index 0c3d9cc2483..00000000000 --- a/arrow-site/docs/docs/traversal/README.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -layout: docs-optics -title: Traversal -permalink: /optics/traversal/ ---- - -## Traversal - -A `Traversal` is an optic that can see into a structure and set, or modify 0 to N foci. -And thus a `Traversal` is useful when you want to focus into a structure that has 0 to N elements, such as collections etc. - -It is a generalization of `map`. -A structure `S` that has a focus `A` to which we can apply a function `(A) -> B` to `S` and get `T`. -For example, `S == List` to which we apply `(Int) -> String` and we get `T == List` - -A `Traversal` can simply be created by providing the `map` function. - -```kotlin -import arrow.optics.* - -fun main(): Unit { - //startSample - val traversal: PTraversal, List, Int, String> = - PTraversal { s, f -> s.map(f) } - - val source = listOf(1, 2, 3, 4) - val target = traversal.modify(source, Int::toString) - //endSample - println(target) -} -``` - -Or by using any of the constructors of `Traversal`. - -Arrow optics also provides a number of predefined `Traversal` optics. - -## Usage - -```kotlin -data class Street(val number: Int, val name: String) -data class Address(val city: String, val street: Street) -data class Company(val name: String, val address: Address) -data class Employee(val name: String, val company: Company) -data class Employees(val employees: List) -``` -```kotlin -val john = Employee("John Doe", Company("Arrow", Address("Functional city", Street(23, "lambda street")))) -val jane = Employee("Jane Doe", Company("Arrow", Address("Functional city", Street(23, "lambda street")))) -val employeeData = Employees(listOf(john, jane)) -``` - -Without lenses, we could use the `copy` method provided on a `data class` for dealing with immutable structures. - -```kotlin -employees.employees.map { employee -> - employee.copy( - company = employee.company.copy( - address = employee.company.address.copy( - street = employee.company.address.street.copy( - name = employee.company.address.street.name.capitalize() - ) - ) - ) - ) -} -``` - -Imagine how complex this would look if we would also introduce `sealed class` into our domain. -This is hard to read, does not scale very well, and it draws attention away from the simple operation we wanted to do `name.capitalize()`. - -What we actually wanted to do here is the following: focus into _every_ employee, `and then` focus into the employee's company, `and then` focus into the company's address, `and then` focus into the street address, and finally, modify the street name by capitalizing it. - -```kotlin -val employees: Lens> = Lens( - get = { it.employees }, - set = { employee, employees -> employee.copy(employees = employees) } -) - -val everyEmployee = Traversal.list() - -val employeeCompany: Lens = Lens( - get = { it.company }, - set = { employee, company -> employee.copy(company = company) } -) - -val companyAddress: Lens = Lens( - get = { it.address }, - set = { company, address -> company.copy(address = address) } -) - -val addressStreet: Lens = Lens( - get = { it.street }, - set = { address, street -> address.copy(street = street) } -) - -val streetName: Lens = Lens( - get = { it.name }, - set = { street, name -> street.copy(name = name) } -) - -val employeesStreetName: Traversal = employees compose everyEmployee compose employeeCompany compose companyAddress compose addressStreet compose streetName - -employeesStreetName.modify(employeeData, String::capitalize) -``` - -## Composition - -Composing `Traversal` can be used for accessing and modifying foci in nested structures. - -`Traversal` can be composed with all optics, and results in the following optics: - -| | Iso | Lens | Prism |Optional | Getter | Setter | Fold | Traversal | -| --- | --- | --- | --- |--- | --- | --- | --- | --- | -| Traversal | Traversal | Traversal | Traversal | Traversal | Fold | Setter | Fold | Traversal | - -### Polymorphic Traversal - -When dealing with polymorphic types, we can also have polymorphic `Traversal`s that allow us to morph the type of the foci. -Previously, we used a `Traversal, Int>`; it was able to morph the `Int` values in the constructed type `List`. -With a `PTraversal, List, Int, String>`, we can morph an `Int` to a `String`, and thus, also morph the type from `List` to `List`. - -### Laws - -Arrow provides [`TraversalLaws`][traversal_laws_source]{:target="_blank"} in the form of test cases for internal verification of lawful instances and third party apps creating their own traversal. - -[traversal_laws_source]: https://github.com/arrow-kt/arrow/blob/main/modules/core/arrow-test/src/main/kotlin/arrow/test/laws/TraversalLaws.kt diff --git a/arrow-site/docs/error.md b/arrow-site/docs/error.md deleted file mode 100644 index 10ad7a77398..00000000000 --- a/arrow-site/docs/error.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -layout: error ---- diff --git a/arrow-site/docs/fonts/jetbrainsmononl-bold-webfont.woff b/arrow-site/docs/fonts/jetbrainsmononl-bold-webfont.woff deleted file mode 100644 index 5714c62f628..00000000000 Binary files a/arrow-site/docs/fonts/jetbrainsmononl-bold-webfont.woff and /dev/null differ diff --git a/arrow-site/docs/fonts/jetbrainsmononl-bold-webfont.woff2 b/arrow-site/docs/fonts/jetbrainsmononl-bold-webfont.woff2 deleted file mode 100644 index bb56711bd86..00000000000 Binary files a/arrow-site/docs/fonts/jetbrainsmononl-bold-webfont.woff2 and /dev/null differ diff --git a/arrow-site/docs/fonts/jetbrainsmononl-regular-webfont.woff b/arrow-site/docs/fonts/jetbrainsmononl-regular-webfont.woff deleted file mode 100644 index 2370e352236..00000000000 Binary files a/arrow-site/docs/fonts/jetbrainsmononl-regular-webfont.woff and /dev/null differ diff --git a/arrow-site/docs/fonts/jetbrainsmononl-regular-webfont.woff2 b/arrow-site/docs/fonts/jetbrainsmononl-regular-webfont.woff2 deleted file mode 100644 index 5d021155445..00000000000 Binary files a/arrow-site/docs/fonts/jetbrainsmononl-regular-webfont.woff2 and /dev/null differ diff --git a/arrow-site/docs/fonts/ttf/iosevka-bold.ttf b/arrow-site/docs/fonts/ttf/iosevka-bold.ttf deleted file mode 100644 index f49579f53e1..00000000000 Binary files a/arrow-site/docs/fonts/ttf/iosevka-bold.ttf and /dev/null differ diff --git a/arrow-site/docs/fonts/ttf/iosevka-medium.ttf b/arrow-site/docs/fonts/ttf/iosevka-medium.ttf deleted file mode 100644 index 0d186f1b87b..00000000000 Binary files a/arrow-site/docs/fonts/ttf/iosevka-medium.ttf and /dev/null differ diff --git a/arrow-site/docs/fonts/ttf/iosevka-regular.ttf b/arrow-site/docs/fonts/ttf/iosevka-regular.ttf deleted file mode 100644 index 2c08b80f0bd..00000000000 Binary files a/arrow-site/docs/fonts/ttf/iosevka-regular.ttf and /dev/null differ diff --git a/arrow-site/docs/fonts/ttf/iosevka-semibold.ttf b/arrow-site/docs/fonts/ttf/iosevka-semibold.ttf deleted file mode 100644 index bf476c7501c..00000000000 Binary files a/arrow-site/docs/fonts/ttf/iosevka-semibold.ttf and /dev/null differ diff --git a/arrow-site/docs/fonts/woff/iosevka-bold.woff b/arrow-site/docs/fonts/woff/iosevka-bold.woff deleted file mode 100644 index 09e8050f1b5..00000000000 Binary files a/arrow-site/docs/fonts/woff/iosevka-bold.woff and /dev/null differ diff --git a/arrow-site/docs/fonts/woff/iosevka-medium.woff b/arrow-site/docs/fonts/woff/iosevka-medium.woff deleted file mode 100644 index 66127228d2e..00000000000 Binary files a/arrow-site/docs/fonts/woff/iosevka-medium.woff and /dev/null differ diff --git a/arrow-site/docs/fonts/woff/iosevka-regular.woff b/arrow-site/docs/fonts/woff/iosevka-regular.woff deleted file mode 100644 index 0888ba57848..00000000000 Binary files a/arrow-site/docs/fonts/woff/iosevka-regular.woff and /dev/null differ diff --git a/arrow-site/docs/fonts/woff/iosevka-semibold.woff b/arrow-site/docs/fonts/woff/iosevka-semibold.woff deleted file mode 100644 index 65bfa079b07..00000000000 Binary files a/arrow-site/docs/fonts/woff/iosevka-semibold.woff and /dev/null differ diff --git a/arrow-site/docs/fonts/woff2/iosevka-bold.woff2 b/arrow-site/docs/fonts/woff2/iosevka-bold.woff2 deleted file mode 100644 index 99f08203df9..00000000000 Binary files a/arrow-site/docs/fonts/woff2/iosevka-bold.woff2 and /dev/null differ diff --git a/arrow-site/docs/fonts/woff2/iosevka-medium.woff2 b/arrow-site/docs/fonts/woff2/iosevka-medium.woff2 deleted file mode 100644 index 10d57a03a59..00000000000 Binary files a/arrow-site/docs/fonts/woff2/iosevka-medium.woff2 and /dev/null differ diff --git a/arrow-site/docs/fonts/woff2/iosevka-regular.woff2 b/arrow-site/docs/fonts/woff2/iosevka-regular.woff2 deleted file mode 100644 index b6a059fd851..00000000000 Binary files a/arrow-site/docs/fonts/woff2/iosevka-regular.woff2 and /dev/null differ diff --git a/arrow-site/docs/fonts/woff2/iosevka-semibold.woff2 b/arrow-site/docs/fonts/woff2/iosevka-semibold.woff2 deleted file mode 100644 index 4394cd575b1..00000000000 Binary files a/arrow-site/docs/fonts/woff2/iosevka-semibold.woff2 and /dev/null differ diff --git a/arrow-site/docs/img/apple-touch-icon-precomposed.png b/arrow-site/docs/img/apple-touch-icon-precomposed.png deleted file mode 100644 index 94c81d10f92..00000000000 Binary files a/arrow-site/docs/img/apple-touch-icon-precomposed.png and /dev/null differ diff --git a/arrow-site/docs/img/apple-touch-icon.png b/arrow-site/docs/img/apple-touch-icon.png deleted file mode 100644 index 94c81d10f92..00000000000 Binary files a/arrow-site/docs/img/apple-touch-icon.png and /dev/null differ diff --git a/arrow-site/docs/img/core-bullet.svg b/arrow-site/docs/img/core-bullet.svg deleted file mode 100644 index 037ab95a92e..00000000000 --- a/arrow-site/docs/img/core-bullet.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - bullet - Created with Sketch. - - - - - - - - - - - - diff --git a/arrow-site/docs/img/core/arrow-core-brand-sidebar.svg b/arrow-site/docs/img/core/arrow-core-brand-sidebar.svg deleted file mode 100644 index 0f113e07555..00000000000 --- a/arrow-site/docs/img/core/arrow-core-brand-sidebar.svg +++ /dev/null @@ -1,92 +0,0 @@ - - - - 167CE672-D4AF-4B39-A4C7-665EA236C13C - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/core/core-bullet.svg b/arrow-site/docs/img/core/core-bullet.svg deleted file mode 100644 index 037ab95a92e..00000000000 --- a/arrow-site/docs/img/core/core-bullet.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - bullet - Created with Sketch. - - - - - - - - - - - - diff --git a/arrow-site/docs/img/datatypes_icon.svg b/arrow-site/docs/img/datatypes_icon.svg deleted file mode 100644 index 1c1e37fa7c5..00000000000 --- a/arrow-site/docs/img/datatypes_icon.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - datatypess_icon - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/docs/search-icon.svg b/arrow-site/docs/img/docs/search-icon.svg deleted file mode 100644 index 8ef855ba085..00000000000 --- a/arrow-site/docs/img/docs/search-icon.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - icon - Created with Sketch. - - - - - - - - - - - diff --git a/arrow-site/docs/img/docs/xf-header-doc.svg b/arrow-site/docs/img/docs/xf-header-doc.svg deleted file mode 100644 index cbd8f450b17..00000000000 --- a/arrow-site/docs/img/docs/xf-header-doc.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/favicon.png b/arrow-site/docs/img/favicon.png deleted file mode 100644 index 3afe0678252..00000000000 Binary files a/arrow-site/docs/img/favicon.png and /dev/null differ diff --git a/arrow-site/docs/img/fx/arrow-fx-brand-sidebar.svg b/arrow-site/docs/img/fx/arrow-fx-brand-sidebar.svg deleted file mode 100644 index 3319470d7f2..00000000000 --- a/arrow-site/docs/img/fx/arrow-fx-brand-sidebar.svg +++ /dev/null @@ -1,58 +0,0 @@ - - - - B7E59532-B573-4359-AD64-79E8F21DD367 - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/fx/fx-bullet.svg b/arrow-site/docs/img/fx/fx-bullet.svg deleted file mode 100644 index 1859ef3768c..00000000000 --- a/arrow-site/docs/img/fx/fx-bullet.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - bullet - Created with Sketch. - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/arrow-analysis-lines-color.svg b/arrow-site/docs/img/home/arrow-analysis-lines-color.svg deleted file mode 100644 index 9e249a01b55..00000000000 --- a/arrow-site/docs/img/home/arrow-analysis-lines-color.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - Analysis@1x - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/home/arrow-analysis-lines-white.svg b/arrow-site/docs/img/home/arrow-analysis-lines-white.svg deleted file mode 100644 index 6fc60ebe109..00000000000 --- a/arrow-site/docs/img/home/arrow-analysis-lines-white.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - logos/arrow-meta/white copy - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/home/arrow-analysis-lines.svg b/arrow-site/docs/img/home/arrow-analysis-lines.svg deleted file mode 100644 index 6c51ef0ed63..00000000000 --- a/arrow-site/docs/img/home/arrow-analysis-lines.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - logos/arrow-analysis/color copy - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/home/arrow-brand-error.svg b/arrow-site/docs/img/home/arrow-brand-error.svg deleted file mode 100644 index 971178dbbb4..00000000000 --- a/arrow-site/docs/img/home/arrow-brand-error.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - arrow-brand-error - Created with Sketch. - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/home/arrow-core-lines-color.svg b/arrow-site/docs/img/home/arrow-core-lines-color.svg deleted file mode 100644 index 0f113e07555..00000000000 --- a/arrow-site/docs/img/home/arrow-core-lines-color.svg +++ /dev/null @@ -1,92 +0,0 @@ - - - - 167CE672-D4AF-4B39-A4C7-665EA236C13C - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/arrow-core-lines-white.svg b/arrow-site/docs/img/home/arrow-core-lines-white.svg deleted file mode 100644 index 099381787c6..00000000000 --- a/arrow-site/docs/img/home/arrow-core-lines-white.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - 8644C3B3-70A0-400D-9114-6FA311E6E11D - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/arrow-core-lines.svg b/arrow-site/docs/img/home/arrow-core-lines.svg deleted file mode 100644 index 5398dfadaec..00000000000 --- a/arrow-site/docs/img/home/arrow-core-lines.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - E6165C5F-C3EF-4D8A-A653-2379A6500CC8 - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/home/arrow-fx-lines-color.svg b/arrow-site/docs/img/home/arrow-fx-lines-color.svg deleted file mode 100644 index 3319470d7f2..00000000000 --- a/arrow-site/docs/img/home/arrow-fx-lines-color.svg +++ /dev/null @@ -1,58 +0,0 @@ - - - - B7E59532-B573-4359-AD64-79E8F21DD367 - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/arrow-fx-lines-white.svg b/arrow-site/docs/img/home/arrow-fx-lines-white.svg deleted file mode 100644 index d3ce63fe5ca..00000000000 --- a/arrow-site/docs/img/home/arrow-fx-lines-white.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - 09638466-666D-4B5E-8486-75F4F6EF75DF - Created with sketchtool. - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/arrow-fx-lines.svg b/arrow-site/docs/img/home/arrow-fx-lines.svg deleted file mode 100644 index 0167e9694fb..00000000000 --- a/arrow-site/docs/img/home/arrow-fx-lines.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - 8331FB0B-C64E-4396-BD54-4696CAFC2081 - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/arrow-meta-lines-color.svg b/arrow-site/docs/img/home/arrow-meta-lines-color.svg deleted file mode 100644 index 251f236c738..00000000000 --- a/arrow-site/docs/img/home/arrow-meta-lines-color.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - 1D529572-0E03-4E3B-B088-5641C8D16165 - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/arrow-meta-lines-white.svg b/arrow-site/docs/img/home/arrow-meta-lines-white.svg deleted file mode 100644 index 3bff93b51f7..00000000000 --- a/arrow-site/docs/img/home/arrow-meta-lines-white.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - A8B762A0-660B-4AD2-882D-19BF39236717 - Created with sketchtool. - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/arrow-meta-lines.svg b/arrow-site/docs/img/home/arrow-meta-lines.svg deleted file mode 100644 index 7755cc7bbaf..00000000000 --- a/arrow-site/docs/img/home/arrow-meta-lines.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - 0F28D75E-5645-40B0-8DC1-BA7E77821693 - Created with sketchtool. - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/arrow-optics-lines-color.svg b/arrow-site/docs/img/home/arrow-optics-lines-color.svg deleted file mode 100644 index 53bd1cd3396..00000000000 --- a/arrow-site/docs/img/home/arrow-optics-lines-color.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - B22AD727-F2D6-4A1A-8D14-7821A2066F3A - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/arrow-optics-lines-white.svg b/arrow-site/docs/img/home/arrow-optics-lines-white.svg deleted file mode 100644 index 94a9295e5f3..00000000000 --- a/arrow-site/docs/img/home/arrow-optics-lines-white.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - 56C12F71-383E-4195-B296-01D7ACA4A9D5 - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/arrow-optics-lines.svg b/arrow-site/docs/img/home/arrow-optics-lines.svg deleted file mode 100644 index cdb39c033fa..00000000000 --- a/arrow-site/docs/img/home/arrow-optics-lines.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - 8C132A9A-5DBB-4CE1-B1A2-373BC4E52004 - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/home/bullet.svg b/arrow-site/docs/img/home/bullet.svg deleted file mode 100644 index f598178dd11..00000000000 --- a/arrow-site/docs/img/home/bullet.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - bullet - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/home/header-image.png b/arrow-site/docs/img/home/header-image.png deleted file mode 100644 index e6d32672671..00000000000 Binary files a/arrow-site/docs/img/home/header-image.png and /dev/null differ diff --git a/arrow-site/docs/img/home/hover-lines-footer.svg b/arrow-site/docs/img/home/hover-lines-footer.svg deleted file mode 100644 index 3c943aa5438..00000000000 --- a/arrow-site/docs/img/home/hover-lines-footer.svg +++ /dev/null @@ -1,55 +0,0 @@ - - - - A355369E-BF10-4100-A36F-7002C43657E7 - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/hover-lines-header.svg b/arrow-site/docs/img/home/hover-lines-header.svg deleted file mode 100644 index 44c0e64edf6..00000000000 --- a/arrow-site/docs/img/home/hover-lines-header.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - 248DC79D-1D3E-41F4-901F-93A9605C32BA - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/incubator.svg b/arrow-site/docs/img/home/incubator.svg deleted file mode 100644 index aa2a5a76fa0..00000000000 --- a/arrow-site/docs/img/home/incubator.svg +++ /dev/null @@ -1,84 +0,0 @@ - - - - 3D4E6B25-93F9-4441-8F96-782EAF8A77D1 - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/home/lines-footer-bg.svg b/arrow-site/docs/img/home/lines-footer-bg.svg deleted file mode 100644 index 62165b18ca7..00000000000 --- a/arrow-site/docs/img/home/lines-footer-bg.svg +++ /dev/null @@ -1,55 +0,0 @@ - - - - 394308FC-8343-4246-918C-0F59C854749B - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/home/lines-header-bg.svg b/arrow-site/docs/img/home/lines-header-bg.svg deleted file mode 100644 index f89899b32a3..00000000000 --- a/arrow-site/docs/img/home/lines-header-bg.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - 8E2DD1B1-380D-4EB8-B06B-4346B7AE3E5F - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/home/logo-white-lines.svg b/arrow-site/docs/img/home/logo-white-lines.svg deleted file mode 100644 index bbc3ea2f625..00000000000 --- a/arrow-site/docs/img/home/logo-white-lines.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - image - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/home/nav-brand-white.svg b/arrow-site/docs/img/home/nav-brand-white.svg deleted file mode 100644 index 4a2ccb03b40..00000000000 --- a/arrow-site/docs/img/home/nav-brand-white.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - 7CC72056-5079-46C0-8779-2686BF660ECD - Created with sketchtool. - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/nav-brand.svg b/arrow-site/docs/img/home/nav-brand.svg deleted file mode 100644 index c8d5d36965f..00000000000 --- a/arrow-site/docs/img/home/nav-brand.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - F01C3EDB-2463-4F01-9220-414555147509 - Created with sketchtool. - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/nav-icon-close-white.svg b/arrow-site/docs/img/home/nav-icon-close-white.svg deleted file mode 100644 index 848fb6330c1..00000000000 --- a/arrow-site/docs/img/home/nav-icon-close-white.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - nav-icon-close - Created with Sketch. - - - - - - - diff --git a/arrow-site/docs/img/home/nav-icon-open-white.svg b/arrow-site/docs/img/home/nav-icon-open-white.svg deleted file mode 100644 index 491d891c5c8..00000000000 --- a/arrow-site/docs/img/home/nav-icon-open-white.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - nav-icon-open - Created with Sketch. - - - - - - diff --git a/arrow-site/docs/img/home/xf-footer-brand-white.svg b/arrow-site/docs/img/home/xf-footer-brand-white.svg deleted file mode 100644 index 27c63be7535..00000000000 --- a/arrow-site/docs/img/home/xf-footer-brand-white.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/home/xf-footer-brand.svg b/arrow-site/docs/img/home/xf-footer-brand.svg deleted file mode 100644 index 4dbfb2fba46..00000000000 --- a/arrow-site/docs/img/home/xf-footer-brand.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/icon_close.svg b/arrow-site/docs/img/icon_close.svg deleted file mode 100644 index 53ed65f9ad5..00000000000 --- a/arrow-site/docs/img/icon_close.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - icon_close - Created with Sketch. - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/icon_play.svg b/arrow-site/docs/img/icon_play.svg deleted file mode 100644 index 180675a4b04..00000000000 --- a/arrow-site/docs/img/icon_play.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - icon_play - Created with Sketch. - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/incubator/arrow-incubator-brand-sidebar.svg b/arrow-site/docs/img/incubator/arrow-incubator-brand-sidebar.svg deleted file mode 100644 index a094fa0887c..00000000000 --- a/arrow-site/docs/img/incubator/arrow-incubator-brand-sidebar.svg +++ /dev/null @@ -1,73 +0,0 @@ - - - - C0608B02-756D-4959-98D1-E716A300CBBB - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/incubator/incubator-bullet.svg b/arrow-site/docs/img/incubator/incubator-bullet.svg deleted file mode 100644 index f24df823aa4..00000000000 --- a/arrow-site/docs/img/incubator/incubator-bullet.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - bullet - Created with Sketch. - - - - - - - - - - - - diff --git a/arrow-site/docs/img/kotlin-stdlib.png b/arrow-site/docs/img/kotlin-stdlib.png deleted file mode 100644 index ac9c759bf87..00000000000 Binary files a/arrow-site/docs/img/kotlin-stdlib.png and /dev/null differ diff --git a/arrow-site/docs/img/labels/icon-label-common.svg b/arrow-site/docs/img/labels/icon-label-common.svg deleted file mode 100644 index 672c27afacd..00000000000 --- a/arrow-site/docs/img/labels/icon-label-common.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - icon-label-common - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/labels/icon-label-js.svg b/arrow-site/docs/img/labels/icon-label-js.svg deleted file mode 100644 index 9916ca15c9f..00000000000 --- a/arrow-site/docs/img/labels/icon-label-js.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - icon-label-js - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/labels/icon-label-jvm.svg b/arrow-site/docs/img/labels/icon-label-jvm.svg deleted file mode 100644 index 9158ef41580..00000000000 --- a/arrow-site/docs/img/labels/icon-label-jvm.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - icon-label-jvm - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/labels/icon-label-native.svg b/arrow-site/docs/img/labels/icon-label-native.svg deleted file mode 100644 index 8d81516b8bf..00000000000 --- a/arrow-site/docs/img/labels/icon-label-native.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - icon-label-native - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/linting/linting_suspend_modifier.gif b/arrow-site/docs/img/linting/linting_suspend_modifier.gif deleted file mode 100644 index 9029332bce1..00000000000 Binary files a/arrow-site/docs/img/linting/linting_suspend_modifier.gif and /dev/null differ diff --git a/arrow-site/docs/img/linting/linting_unit_return_type.gif b/arrow-site/docs/img/linting/linting_unit_return_type.gif deleted file mode 100644 index 11499b0155d..00000000000 Binary files a/arrow-site/docs/img/linting/linting_unit_return_type.gif and /dev/null differ diff --git a/arrow-site/docs/img/meta/arrow-meta-brand-sidebar.svg b/arrow-site/docs/img/meta/arrow-meta-brand-sidebar.svg deleted file mode 100644 index a5e4dfde27e..00000000000 --- a/arrow-site/docs/img/meta/arrow-meta-brand-sidebar.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - 1D529572-0E03-4E3B-B088-5641C8D16165 - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/meta/meta-bullet.svg b/arrow-site/docs/img/meta/meta-bullet.svg deleted file mode 100644 index 134528e0b2c..00000000000 --- a/arrow-site/docs/img/meta/meta-bullet.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - bullet - Created with Sketch. - - - - - - - - - - - - diff --git a/arrow-site/docs/img/old-design/arrow-brand-sidebar.svg b/arrow-site/docs/img/old-design/arrow-brand-sidebar.svg deleted file mode 100644 index f79f576eab1..00000000000 --- a/arrow-site/docs/img/old-design/arrow-brand-sidebar.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - - arrow-brand-sidebar - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/old-design/arrow-brand.svg b/arrow-site/docs/img/old-design/arrow-brand.svg deleted file mode 100644 index 5a74aa63884..00000000000 --- a/arrow-site/docs/img/old-design/arrow-brand.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - arrow-brand - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/old-design/blog-image-header.png b/arrow-site/docs/img/old-design/blog-image-header.png deleted file mode 100644 index a66ba23a21d..00000000000 Binary files a/arrow-site/docs/img/old-design/blog-image-header.png and /dev/null differ diff --git a/arrow-site/docs/img/old-design/close.svg b/arrow-site/docs/img/old-design/close.svg deleted file mode 100644 index ad8ef7dcb33..00000000000 --- a/arrow-site/docs/img/old-design/close.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - Combined Shape - Created with Sketch. - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/old-design/datatypes_icon.svg b/arrow-site/docs/img/old-design/datatypes_icon.svg deleted file mode 100644 index 1c1e37fa7c5..00000000000 --- a/arrow-site/docs/img/old-design/datatypes_icon.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - datatypess_icon - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/old-design/favicon.png b/arrow-site/docs/img/old-design/favicon.png deleted file mode 100644 index 876bf142e72..00000000000 Binary files a/arrow-site/docs/img/old-design/favicon.png and /dev/null differ diff --git a/arrow-site/docs/img/old-design/header-background-bottom.svg b/arrow-site/docs/img/old-design/header-background-bottom.svg deleted file mode 100644 index 2f66fdf31c9..00000000000 --- a/arrow-site/docs/img/old-design/header-background-bottom.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - header-background-bottom - Created with Sketch. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/old-design/header-background-top.svg b/arrow-site/docs/img/old-design/header-background-top.svg deleted file mode 100644 index 349066901ab..00000000000 --- a/arrow-site/docs/img/old-design/header-background-top.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - header-background-top - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/old-design/icon-news.svg b/arrow-site/docs/img/old-design/icon-news.svg deleted file mode 100644 index 8e20cafdb9a..00000000000 --- a/arrow-site/docs/img/old-design/icon-news.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/arrow-site/docs/img/old-design/icon-podcast.svg b/arrow-site/docs/img/old-design/icon-podcast.svg deleted file mode 100644 index f4f430a5a3e..00000000000 --- a/arrow-site/docs/img/old-design/icon-podcast.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/arrow-site/docs/img/old-design/icon-video.png b/arrow-site/docs/img/old-design/icon-video.png deleted file mode 100644 index a1ea4acb6f4..00000000000 Binary files a/arrow-site/docs/img/old-design/icon-video.png and /dev/null differ diff --git a/arrow-site/docs/img/old-design/icon-video.svg b/arrow-site/docs/img/old-design/icon-video.svg deleted file mode 100644 index 07f2689bd2d..00000000000 --- a/arrow-site/docs/img/old-design/icon-video.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/arrow-site/docs/img/old-design/integrations_icon.svg b/arrow-site/docs/img/old-design/integrations_icon.svg deleted file mode 100644 index 9fdd40c3698..00000000000 --- a/arrow-site/docs/img/old-design/integrations_icon.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - integrations_icon - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/old-design/kategory-brand-sidebar.svg b/arrow-site/docs/img/old-design/kategory-brand-sidebar.svg deleted file mode 100644 index 9a9c1284424..00000000000 --- a/arrow-site/docs/img/old-design/kategory-brand-sidebar.svg +++ /dev/null @@ -1,55 +0,0 @@ - - - - arrow-brand-sidebar - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/old-design/kategory-brand.svg b/arrow-site/docs/img/old-design/kategory-brand.svg deleted file mode 100644 index 1daccdcc7cd..00000000000 --- a/arrow-site/docs/img/old-design/kategory-brand.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - arrow-brand - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/old-design/pattern_icon.svg b/arrow-site/docs/img/old-design/pattern_icon.svg deleted file mode 100644 index 64ef6b4e3a5..00000000000 --- a/arrow-site/docs/img/old-design/pattern_icon.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - pattern_icon - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/old-design/poster.png b/arrow-site/docs/img/old-design/poster.png deleted file mode 100644 index 011c765f976..00000000000 Binary files a/arrow-site/docs/img/old-design/poster.png and /dev/null differ diff --git a/arrow-site/docs/img/old-design/twitter-card.png b/arrow-site/docs/img/old-design/twitter-card.png deleted file mode 100644 index 011c765f976..00000000000 Binary files a/arrow-site/docs/img/old-design/twitter-card.png and /dev/null differ diff --git a/arrow-site/docs/img/old-design/typeclasses_icon.svg b/arrow-site/docs/img/old-design/typeclasses_icon.svg deleted file mode 100644 index 1b8fc468bd9..00000000000 --- a/arrow-site/docs/img/old-design/typeclasses_icon.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - typeclasses_icon - Created with Sketch. - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/optics/arrow-optics-brand-sidebar.svg b/arrow-site/docs/img/optics/arrow-optics-brand-sidebar.svg deleted file mode 100644 index 53bd1cd3396..00000000000 --- a/arrow-site/docs/img/optics/arrow-optics-brand-sidebar.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - B22AD727-F2D6-4A1A-8D14-7821A2066F3A - Created with sketchtool. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/arrow-site/docs/img/optics/optics-bullet.svg b/arrow-site/docs/img/optics/optics-bullet.svg deleted file mode 100644 index c7baf217357..00000000000 --- a/arrow-site/docs/img/optics/optics-bullet.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - bullet - Created with Sketch. - - - - - - - - - - - - diff --git a/arrow-site/docs/img/poster.png b/arrow-site/docs/img/poster.png deleted file mode 100644 index 5c87ae4b6e4..00000000000 Binary files a/arrow-site/docs/img/poster.png and /dev/null differ diff --git a/arrow-site/docs/img/quickstart-pattern.svg b/arrow-site/docs/img/quickstart-pattern.svg deleted file mode 100644 index 6d44cd1e9a5..00000000000 --- a/arrow-site/docs/img/quickstart-pattern.svg +++ /dev/null @@ -1,95 +0,0 @@ - - - quickstart-pattern - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/quickstart/android-logo.svg b/arrow-site/docs/img/quickstart/android-logo.svg deleted file mode 100644 index 6d90091b509..00000000000 --- a/arrow-site/docs/img/quickstart/android-logo.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - android-logo - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/quickstart/arrow-quickstart-brand-sidebar.svg b/arrow-site/docs/img/quickstart/arrow-quickstart-brand-sidebar.svg deleted file mode 100644 index 420b9b2653c..00000000000 --- a/arrow-site/docs/img/quickstart/arrow-quickstart-brand-sidebar.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - arrow-quickstart-brand-sidebar - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/quickstart/jdk-logo.svg b/arrow-site/docs/img/quickstart/jdk-logo.svg deleted file mode 100644 index 4ee1cba6012..00000000000 --- a/arrow-site/docs/img/quickstart/jdk-logo.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - jdk-logo - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/quickstart/modular-libraries-core.svg b/arrow-site/docs/img/quickstart/modular-libraries-core.svg deleted file mode 100644 index 0a663086219..00000000000 --- a/arrow-site/docs/img/quickstart/modular-libraries-core.svg +++ /dev/null @@ -1,87 +0,0 @@ - - - modular-libraries-core - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/quickstart/modular-libraries-fx.svg b/arrow-site/docs/img/quickstart/modular-libraries-fx.svg deleted file mode 100644 index 4df2122870e..00000000000 --- a/arrow-site/docs/img/quickstart/modular-libraries-fx.svg +++ /dev/null @@ -1,58 +0,0 @@ - - - modular-libraries-fx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/quickstart/modular-libraries-meta.svg b/arrow-site/docs/img/quickstart/modular-libraries-meta.svg deleted file mode 100644 index 1d065422cd7..00000000000 --- a/arrow-site/docs/img/quickstart/modular-libraries-meta.svg +++ /dev/null @@ -1,42 +0,0 @@ - - - modular-libraries-meta - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/quickstart/modular-libraries-optics.svg b/arrow-site/docs/img/quickstart/modular-libraries-optics.svg deleted file mode 100644 index a6c58526157..00000000000 --- a/arrow-site/docs/img/quickstart/modular-libraries-optics.svg +++ /dev/null @@ -1,84 +0,0 @@ - - - modular-libraries-optics - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/img/twitter-card.png b/arrow-site/docs/img/twitter-card.png deleted file mode 100644 index 5c87ae4b6e4..00000000000 Binary files a/arrow-site/docs/img/twitter-card.png and /dev/null differ diff --git a/arrow-site/docs/img/typeclasses_icon.svg b/arrow-site/docs/img/typeclasses_icon.svg deleted file mode 100644 index 1b8fc468bd9..00000000000 --- a/arrow-site/docs/img/typeclasses_icon.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - typeclasses_icon - Created with Sketch. - - - - - - - - - - \ No newline at end of file diff --git a/arrow-site/docs/index.md b/arrow-site/docs/index.md deleted file mode 100644 index e4d427d215f..00000000000 --- a/arrow-site/docs/index.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -layout: home ---- diff --git a/arrow-site/docs/js/animations.js b/arrow-site/docs/js/animations.js deleted file mode 100644 index 2ca7a85a397..00000000000 --- a/arrow-site/docs/js/animations.js +++ /dev/null @@ -1,56 +0,0 @@ -// Animation instances -// Arrow base animation -const arrowBaseAnimation = lottie.loadAnimation({ - container: document.getElementById('base-arrow-animation'), - renderer: 'svg' / 'canvas' / 'html', - loop: false, - autoplay: true, - path: 'js/json/arrow-base.json' -}); - -// core animation -const arrowCoreAnimation = lottie.loadAnimation({ - container: document.getElementById('core-arrow-animation'), - renderer: 'svg' / 'canvas' / 'html', - loop: false, - autoplay: false, - path: 'js/json/arrow-core.json' -}); - -// fx animation -const arrowFxAnimation = lottie.loadAnimation({ - container: document.getElementById('fx-arrow-animation'), - renderer: 'svg' / 'canvas' / 'html', - loop: false, - autoplay: false, - path: 'js/json/arrow-fx.json' -}); - -// optics animation -const arrowOpticsAnimation = lottie.loadAnimation({ - container: document.getElementById('optics-arrow-animation'), - renderer: 'svg' / 'canvas' / 'html', - loop: false, - autoplay: false, - path: 'js/json/arrow-optics.json' -}); - -// analysis animation -const arrowAnalysisAnimation = lottie.loadAnimation({ - container: document.getElementById('analysis-arrow-animation'), - renderer: 'svg' / 'canvas' / 'html', - loop: false, - autoplay: false, - path: 'js/json/arrow-analysis.json' -}); - - -/* // meta animation -const arrowMetaAnimation = lottie.loadAnimation({ - container: document.getElementById('meta-arrow-animation'), - renderer: 'svg' / 'canvas' / 'html', - loop: false, - autoplay: false, - path: 'js/json/arrow-meta.json' -}); */ - diff --git a/arrow-site/docs/js/dagre.min.js b/arrow-site/docs/js/dagre.min.js deleted file mode 100644 index 1881a862b1e..00000000000 --- a/arrow-site/docs/js/dagre.min.js +++ /dev/null @@ -1,2 +0,0 @@ -(function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var j=typeof require=="function"&&require;if(!h&&j)return j(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}var f=typeof require=="function"&&require;for(var g=0;g0),d.log(2,"Order phase start cross count: "+a.graph().orderInitCC);var q,r,s;for(q=0,r=0;r<4&&q0;++q,++r,++i)n(a,h,q),s=e(a),s=0;--i)h(b[i],c,m(a,b[i].nodes()))}var d=a("./util"),e=a("./order/crossCount"),f=a("./order/initLayerGraphs"),g=a("./order/initOrder"),h=a("./order/sortLayer");b.exports=k;var j=24;k.DEFAULT_MAX_SWEEPS=j},{"./order/crossCount":5,"./order/initLayerGraphs":6,"./order/initOrder":7,"./order/sortLayer":8,"./util":17}],5:[function(a,b,c){function e(a){var b=0,c=d.ordering(a);for(var e=1;e0)b%2&&(i+=g[b+1]),b=b-1>>1,++g[b]}),i}var d=a("../util");b.exports=e},{"../util":17}],6:[function(a,b,c){function f(a){function c(d){if(d===null){a.children(d).forEach(function(a){c(a)});return}var f=a.node(d);f.minRank="rank"in f?f.rank:Number.MAX_VALUE,f.maxRank="rank"in f?f.rank:Number.MIN_VALUE;var h=new e;return a.children(d).forEach(function(b){var d=c(b);h=e.union([h,d]),f.minRank=Math.min(f.minRank,a.node(b).minRank),f.maxRank=Math.max(f.maxRank,a.node(b).maxRank)}),"rank"in f&&h.add(f.rank),h.keys().forEach(function(a){a in b||(b[a]=[]),b[a].push(d)}),h}var b=[];c(null);var f=[];return b.forEach(function(b,c){f[c]=a.filterNodes(d(b))}),f}var d=a("graphlib").filter.nodesFromList,e=a("cp-data").Set;b.exports=f},{"cp-data":19,graphlib:24}],7:[function(a,b,c){function f(a,b){var c=[];a.eachNode(function(b,d){var e=c[d.rank];if(a.children&&a.children(b).length>0)return;e||(e=c[d.rank]=[]),e.push(b)}),c.forEach(function(c){b&&e.shuffle(c),c.forEach(function(b,c){a.node(b).order=c})});var f=d(a);a.graph().orderInitCC=f,a.graph().orderCC=Number.MAX_VALUE}var d=a("./crossCount"),e=a("../util");b.exports=f},{"../util":17,"./crossCount":5}],8:[function(a,b,c){function e(a,b,c){var e=[],f={};a.eachNode(function(a,b){e[b.order]=a;var g=c[a];g.length&&(f[a]=d.sum(g)/g.length)});var g=a.nodes().filter(function(a){return f[a]!==undefined});g.sort(function(b,c){return f[b]-f[c]||a.node(b).order-a.node(c).order});for(var h=0,i=0,j=g.length;i=3&&t(d+f,b,c,i[j]),f==="r"&&l(i[j]),f==="r"&&m(c)}),d==="d"&&c.reverse()}),k(b,c,i),b.eachNode(function(a){var c=[];for(var d in i){var e=i[d][a];r(d,b,a,e),c.push(e)}c.sort(function(a,b){return a-b}),q(b,a,(c[1]+c[2])/2)});var j=0,p=b.graph().rankDir==="BT"||b.graph().rankDir==="RL";c.forEach(function(c){var e=d.max(c.map(function(a){return o(b,a)}));j+=e/2,c.forEach(function(a){s(b,a,p?-j:j)}),j+=e/2+a.rankSep});var u=d.min(b.nodes().map(function(a){return q(b,a)-n(b,a)/2})),v=d.min(b.nodes().map(function(a){return s(b,a)-o(b,a)/2}));b.eachNode(function(a){q(b,a,q(b,a)-u),s(b,a,s(b,a)-v)})}function e(a,b){return aj)c[e(g[i],a)]=!0}var c={},d={},f,g,h,i,j;if(b.length<=2)return c;b[1].forEach(function(a,b){d[a]=b});for(var l=1;l0&&(j.sort(function(a,b){return f[a]-f[b]}),k=(j.length-1)/2,j.slice(Math.floor(k),Math.ceil(k)+1).forEach(function(a){h[b]===b&&!c[e(a,b)]&&i0){var h=e[j[d]];m(h),g[b]===b&&(g[b]=g[h]);var i=p(a,j[d])+p(a,d);g[b]!==g[h]?l(g[h],g[b],k[b]-k[h]-i):k[b]=Math.max(k[b],k[h]+i)}d=f[d]}while(d!==b)}}var g={},h={},i={},j={},k={};return b.forEach(function(a){a.forEach(function(b,c){g[b]=b,h[b]={},c>0&&(j[b]=a[c-1])})}),d.values(e).forEach(function(a){m(a)}),b.forEach(function(a){a.forEach(function(a){k[a]=k[e[a]];if(a===e[a]&&a===g[a]){var b=0;a in h&&Object.keys(h[a]).length>0&&(b=d.min(Object.keys(h[a]).map(function(b){return h[a][b]+(b in i?i[b]:0)}))),i[a]=b}})}),b.forEach(function(a){a.forEach(function(a){k[a]+=i[g[e[a]]]||0})}),k}function i(a,b,c){return d.min(b.map(function(a){var b=a[0];return c[b]}))}function j(a,b,c){return d.max(b.map(function(a){var b=a[a.length-1];return c[b]}))}function k(a,b,c){function h(a){c[l][a]+=g[l]}var d={},e={},f,g={},k=Number.POSITIVE_INFINITY;for(var l in c){var m=c[l];d[l]=i(a,b,m),e[l]=j(a,b,m);var n=e[l]-d[l];na.node(d).rank&&(a.delEdge(b),e.reversed=!0,a.addEdge(b,d,c,e))})}function r(a,b){var c=g(a);b&&(d.log(1,"Using network simplex for ranking"),i(a,c)),s(a)}function s(a){var b=d.min(a.nodes().map(function(b){return a.node(b).rank}));a.eachNode(function(a,c){c.rank-=b})}var d=a("./util"),e=a("./rank/acyclic"),f=a("./rank/initRank"),g=a("./rank/feasibleTree"),h=a("./rank/constraints"),i=a("./rank/simplex"),j=a("graphlib").alg.components,k=a("graphlib").filter;c.run=l,c.restoreEdges=m},{"./rank/acyclic":11,"./rank/constraints":12,"./rank/feasibleTree":13,"./rank/initRank":14,"./rank/simplex":16,"./util":17,graphlib:24}],11:[function(a,b,c){function e(a){function f(d){if(d in c)return;c[d]=b[d]=!0,a.outEdges(d).forEach(function(c){var h=a.target(c),i;d===h?console.error('Warning: found self loop "'+c+'" for node "'+d+'"'):h in b?(i=a.edge(c),a.delEdge(c),i.reversed=!0,++e,a.addEdge(c,h,d,i)):f(h)}),delete b[d]}var b={},c={},e=0;return a.eachNode(function(a){f(a)}),d.log(2,"Acyclic Phase: reversed "+e+" edge(s)"),e}function f(a){a.eachEdge(function(b,c,d,e){e.reversed&&(delete e.reversed,a.delEdge(b),a.addEdge(b,d,c,e))})}var d=a("../util");b.exports=e,b.exports.undo=f},{"../util":17}],12:[function(a,b,c){function d(a){return a!=="min"&&a!=="max"&&a.indexOf("same_")!==0?(console.error("Unsupported rank type: "+a),!1):!0}function e(a,b,c,d){a.inEdges(b).forEach(function(b){var e=a.edge(b),f;e.originalEdge?f=e:f={originalEdge:{e:b,u:a.source(b),v:a.target(b),value:e},minLen:a.edge(b).minLen},e.selfLoop&&(d=!1),d?(a.addEdge(null,c,a.source(b),f),f.reversed=!0):a.addEdge(null,a.source(b),c,f)})}function f(a,b,c,d){a.outEdges(b).forEach(function(b){var e=a.edge(b),f;e.originalEdge?f=e:f={originalEdge:{e:b,u:a.source(b),v:a.target(b),value:e},minLen:a.edge(b).minLen},e.selfLoop&&(d=!1),d?(a.addEdge(null,a.target(b),c,f),f.reversed=!0):a.addEdge(null,c,a.target(b),f)})}function g(a,b,c){c!==undefined&&a.children(b).forEach(function(b){b!==c&&!a.outEdges(c,b).length&&!a.node(b).dummy&&a.addEdge(null,c,b,{minLen:0})})}function h(a,b,c){c!==undefined&&a.children(b).forEach(function(b){b!==c&&!a.outEdges(b,c).length&&!a.node(b).dummy&&a.addEdge(null,b,c,{minLen:0})})}c.apply=function(a){function b(c){var i={};a.children(c).forEach(function(g){if(a.children(g).length){b(g);return}var h=a.node(g),j=h.prefRank;if(j!==undefined){if(!d(j))return;j in i?i.prefRank.push(g):i.prefRank=[g];var k=i[j];k===undefined&&(k=i[j]=a.addNode(null,{originalNodes:[]}),a.parent(k,c)),e(a,g,k,j==="min"),f(a,g,k,j==="max"),a.node(k).originalNodes.push({u:g,value:h,parent:c}),a.delNode(g)}}),g(a,c,i.min),h(a,c,i.max)}b(null)},c.relax=function(a){var b=[];a.eachEdge(function(a,c,d,e){var f=e.originalEdge;f&&b.push(f)}),a.eachNode(function(b,c){var d=c.originalNodes;d&&(d.forEach(function(b){b.value.rank=c.rank,a.addNode(b.u,b.value),a.parent(b.u,b.parent)}),a.delNode(b))}),b.forEach(function(b){a.addEdge(b.e,b.u,b.v,b.value)})}},{}],13:[function(a,b,c){function g(a){function g(d){var e=!0;return a.predecessors(d).forEach(function(f){b.has(f)&&!h(a,f,d)&&(b.has(d)&&(c.addNode(d,{}),b.remove(d),c.graph({root:d})),c.addNode(f,{}),c.addEdge(null,f,d,{reversed:!0}),b.remove(f),g(f),e=!1)}),a.successors(d).forEach(function(f){b.has(f)&&!h(a,d,f)&&(b.has(d)&&(c.addNode(d,{}),b.remove(d),c.graph({root:d})),c.addNode(f,{}),c.addEdge(null,d,f,{}),b.remove(f),g(f),e=!1)}),e}function i(){var d=Number.MAX_VALUE;b.keys().forEach(function(c){a.predecessors(c).forEach(function(e){if(!b.has(e)){var f=h(a,e,c);Math.abs(f)0)i=b.source(j[0]),j=b.inEdges(i);b.graph().root=i,b.addEdge(null,e,f,{cutValue:0}),g(a,b),n(a,b)}function n(a,b){function c(d){var e=b.successors(d);e.forEach(function(b){var e=o(a,d,b);a.node(b).rank=a.node(d).rank+e,c(b)})}c(b.graph().root)}function o(a,b,c){var e=a.outEdges(b,c);if(e.length>0)return d.max(e.map(function(b){return a.edge(b).minLen}));var f=a.inEdges(b,c);if(f.length>0)return-d.max(f.map(function(b){return a.edge(b).minLen}))}var d=a("../util"),e=a("./rankUtil");b.exports=f},{"../util":17,"./rankUtil":15}],17:[function(a,b,c){function d(a,b){return function(){var c=(new Date).getTime();try{return b.apply(null,arguments)}finally{e(1,a+" time: "+((new Date).getTime()-c)+"ms")}}}function e(a){e.level>=a&&console.log.apply(console,Array.prototype.slice.call(arguments,1))}c.min=function(a){return Math.min.apply(Math,a)},c.max=function(a){return Math.max.apply(Math,a)},c.all=function(a,b){for(var c=0;c0;--i){var b=Math.floor(Math.random()*(i+1)),c=a[b];a[b]=a[i],a[i]=c}},c.propertyAccessor=function(a,b,c,d){return function(e){return arguments.length?(b[c]=e,d&&d(e),a):b[c]}},c.ordering=function(a){var b=[];return a.eachNode(function(a,c){var d=b[c.rank]||(b[c.rank]=[]);d[c.order]=a}),b},c.filterNonSubgraphs=function(a){return function(b){return a.children(b).length===0}},d.enabled=!1,c.time=d,e.level=0,c.log=e},{}],18:[function(a,b,c){b.exports="0.4.5"},{}],19:[function(a,b,c){c.Set=a("./lib/Set"),c.PriorityQueue=a("./lib/PriorityQueue"),c.version=a("./lib/version")},{"./lib/PriorityQueue":20,"./lib/Set":21,"./lib/version":23}],20:[function(a,b,c){function d(){this._arr=[],this._keyIndices={}}b.exports=d,d.prototype.size=function(){return this._arr.length},d.prototype.keys=function(){return this._arr.map(function(a){return a.key})},d.prototype.has=function(a){return a in this._keyIndices},d.prototype.priority=function(a){var b=this._keyIndices[a];if(b!==undefined)return this._arr[b].priority},d.prototype.min=function(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key},d.prototype.add=function(a,b){var c=this._keyIndices;if(a in c)return!1;var d=this._arr,e=d.length;return c[a]=e,d.push({key:a,priority:b}),this._decrease(e),!0},d.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var a=this._arr.pop();return delete this._keyIndices[a.key],this._heapify(0),a.key},d.prototype.decrease=function(a,b){var c=this._keyIndices[a];if(b>this._arr[c].priority)throw new Error("New priority is greater than current priority. Key: "+a+" Old: "+this._arr[c].priority+" New: "+b);this._arr[c].priority=b,this._decrease(c)},d.prototype._heapify=function(a){var b=this._arr,c=2*a,d=c+1,e=a;c>1;if(b[d].priority>>0,g=!1;1d;++d)a.hasOwnProperty(d)&&(g?e=b(e,a[d],d,a):(e=a[d],g=!0));if(!g)throw new TypeError("Reduce of empty array with no initial value");return e}:c.reduce=function(a,b,c){return a.reduce(b,c)}},{}],23:[function(a,b,c){b.exports="1.1.3"},{}],24:[function(a,b,c){c.Graph=a("./lib/Graph"),c.Digraph=a("./lib/Digraph"),c.CGraph=a("./lib/CGraph"),c.CDigraph=a("./lib/CDigraph"),a("./lib/graph-converters"),c.alg={isAcyclic:a("./lib/alg/isAcyclic"),components:a("./lib/alg/components"),dijkstra:a("./lib/alg/dijkstra"),dijkstraAll:a("./lib/alg/dijkstraAll"),findCycles:a("./lib/alg/findCycles"),floydWarshall:a("./lib/alg/floydWarshall"),postorder:a("./lib/alg/postorder"),preorder:a("./lib/alg/preorder"),prim:a("./lib/alg/prim"),tarjan:a("./lib/alg/tarjan"),topsort:a("./lib/alg/topsort")},c.converter={json:a("./lib/converter/json.js")};var d=a("./lib/filter");c.filter={all:d.all,nodesFromList:d.nodesFromList},c.version=a("./lib/version")},{"./lib/CDigraph":26,"./lib/CGraph":27,"./lib/Digraph":28,"./lib/Graph":29,"./lib/alg/components":30,"./lib/alg/dijkstra":31,"./lib/alg/dijkstraAll":32,"./lib/alg/findCycles":33,"./lib/alg/floydWarshall":34,"./lib/alg/isAcyclic":35,"./lib/alg/postorder":36,"./lib/alg/preorder":37,"./lib/alg/prim":38,"./lib/alg/tarjan":39,"./lib/alg/topsort":40,"./lib/converter/json.js":42,"./lib/filter":43,"./lib/graph-converters":44,"./lib/version":46}],25:[function(a,b,c){function e(){this._value=undefined,this._nodes={},this._edges={},this._nextId=0}function f(a,b,c){(a[b]||(a[b]=new d)).add(c)}function g(a,b,c){var d=a[b];d.remove(c),d.size()===0&&delete a[b]}var d=a("cp-data").Set;b.exports=e,e.prototype.order=function(){return Object.keys(this._nodes).length},e.prototype.size=function(){return Object.keys(this._edges).length},e.prototype.graph=function(a){if(arguments.length===0)return this._value;this._value=a},e.prototype.hasNode=function(a){return a in this._nodes},e.prototype.node=function(a,b){var c=this._strictGetNode(a);if(arguments.length===1)return c.value;c.value=b},e.prototype.nodes=function(){var a=[];return this.eachNode(function(b){a.push(b)}),a},e.prototype.eachNode=function(a){for(var b in this._nodes){var c=this._nodes[b];a(c.id,c.value)}},e.prototype.hasEdge=function(a){return a in this._edges},e.prototype.edge=function(a,b){var c=this._strictGetEdge(a);if(arguments.length===1)return c.value;c.value=b},e.prototype.edges=function(){var a=[];return this.eachEdge(function(b){a.push(b)}),a},e.prototype.eachEdge=function(a){for(var b in this._edges){var c=this._edges[b];a(c.id,c.u,c.v,c.value)}},e.prototype.incidentNodes=function(a){var b=this._strictGetEdge(a);return[b.u,b.v]},e.prototype.addNode=function(a,b){if(a===undefined||a===null){do a="_"+ ++this._nextId;while(this.hasNode(a))}else if(this.hasNode(a))throw new Error("Graph already has node '"+a+"'");return this._nodes[a]={id:a,value:b},a},e.prototype.delNode=function(a){this._strictGetNode(a),this.incidentEdges(a).forEach(function(a){this.delEdge(a)},this),delete this._nodes[a]},e.prototype._addEdge=function(a,b,c,d,e,g){this._strictGetNode(b),this._strictGetNode(c);if(a===undefined||a===null){do a="_"+ ++this._nextId;while(this.hasEdge(a))}else if(this.hasEdge(a))throw new Error("Graph already has edge '"+a+"'");return this._edges[a]={id:a,u:b,v:c,value:d},f(e[c],b,a),f(g[b],c,a),a},e.prototype._delEdge=function(a,b,c){var d=this._strictGetEdge(a);g(b[d.v],d.u,a),g(c[d.u],d.v,a),delete this._edges[a]},e.prototype.copy=function(){var a=new this.constructor;return a.graph(this.graph()),this.eachNode(function(b,c){a.addNode(b,c)}),this.eachEdge(function(b,c,d,e){a.addEdge(b,c,d,e)}),a._nextId=this._nextId,a},e.prototype.filterNodes=function(a){var b=new this.constructor;return b.graph(this.graph()),this.eachNode(function(c,d){a(c)&&b.addNode(c,d)}),this.eachEdge(function(a,c,d,e){b.hasNode(c)&&b.hasNode(d)&&b.addEdge(a,c,d,e)}),b},e.prototype._strictGetNode=function(a){var b=this._nodes[a];if(b===undefined)throw new Error("Node '"+a+"' is not in graph");return b},e.prototype._strictGetEdge=function(a){var b=this._edges[a];if(b===undefined)throw new Error("Edge '"+a+"' is not in graph");return b}},{"cp-data":19}],26:[function(a,b,c){var d=a("./Digraph"),e=a("./compoundify"),f=e(d);b.exports=f,f.fromDigraph=function(a){var b=new f,c=a.graph();return c!==undefined&&b.graph(c),a.eachNode(function(a,c){c===undefined?b.addNode(a):b.addNode(a,c)}),a.eachEdge(function(a,c,d,e){e===undefined?b.addEdge(null,c,d):b.addEdge(null,c,d,e)}),b},f.prototype.toString=function(){return"CDigraph "+JSON.stringify(this,null,2)}},{"./Digraph":28,"./compoundify":41}],27:[function(a,b,c){var d=a("./Graph"),e=a("./compoundify"),f=e(d);b.exports=f,f.fromGraph=function(a){var b=new f,c=a.graph();return c!==undefined&&b.graph(c),a.eachNode(function(a,c){c===undefined?b.addNode(a):b.addNode(a,c)}),a.eachEdge(function(a,c,d,e){e===undefined?b.addEdge(null,c,d):b.addEdge(null,c,d,e)}),b},f.prototype.toString=function(){return"CGraph "+JSON.stringify(this,null,2)}},{"./Graph":29,"./compoundify":41}],28:[function(a,b,c){function g(){e.call(this),this._inEdges={},this._outEdges={}}var d=a("./util"),e=a("./BaseGraph"),f=a("cp-data").Set;b.exports=g,g.prototype=new e,g.prototype.constructor=g,g.prototype.isDirected=function(){return!0},g.prototype.successors=function(a){return this._strictGetNode(a),Object.keys(this._outEdges[a]).map(function(a){return this._nodes[a].id},this)},g.prototype.predecessors=function(a){return this._strictGetNode(a),Object.keys(this._inEdges[a]).map(function(a){return this._nodes[a].id},this)},g.prototype.neighbors=function(a){return f.union([this.successors(a),this.predecessors(a)]).keys()},g.prototype.sources=function(){var a=this;return this._filterNodes(function(b){return a.inEdges(b).length===0})},g.prototype.sinks=function(){var a=this;return this._filterNodes(function(b){return a.outEdges(b).length===0})},g.prototype.source=function(a){return this._strictGetEdge(a).u},g.prototype.target=function(a){return this._strictGetEdge(a).v},g.prototype.inEdges=function(a,b){this._strictGetNode(a);var c=f.union(d.values(this._inEdges[a])).keys();return arguments.length>1&&(this._strictGetNode(b),c=c.filter(function(a){return this.source(a)===b},this)),c},g.prototype.outEdges=function(a,b){this._strictGetNode(a);var c=f.union(d.values(this._outEdges[a])).keys();return arguments.length>1&&(this._strictGetNode(b),c=c.filter(function(a){return this.target(a)===b},this)),c},g.prototype.incidentEdges=function(a,b){return arguments.length>1?f.union([this.outEdges(a,b),this.outEdges(b,a)]).keys():f.union([this.inEdges(a),this.outEdges(a)]).keys()},g.prototype.toString=function(){return"Digraph "+JSON.stringify(this,null,2)},g.prototype.addNode=function(a,b){return a=e.prototype.addNode.call(this,a,b),this._inEdges[a]={},this._outEdges[a]={},a},g.prototype.delNode=function(a){e.prototype.delNode.call(this,a),delete this._inEdges[a],delete this._outEdges[a]},g.prototype.addEdge=function(a,b,c,d){return e.prototype._addEdge.call(this,a,b,c,d,this._inEdges,this._outEdges)},g.prototype.delEdge=function(a){e.prototype._delEdge.call(this,a,this._inEdges,this._outEdges)},g.prototype._filterNodes=function(a){var b=[];return this.eachNode(function(c){a(c)&&b.push(c)}),b}},{"./BaseGraph":25,"./util":45,"cp-data":19}],29:[function(a,b,c){function g(){e.call(this),this._incidentEdges={}}var d=a("./util"),e=a("./BaseGraph"),f=a("cp-data").Set;b.exports=g,g.prototype=new e,g.prototype.constructor=g,g.prototype.isDirected=function(){return!1},g.prototype.neighbors=function(a){return this._strictGetNode(a),Object.keys(this._incidentEdges[a]).map(function(a){return this._nodes[a].id},this)},g.prototype.incidentEdges=function(a,b){return this._strictGetNode(a),arguments.length>1?(this._strictGetNode(b),b in this._incidentEdges[a]?this._incidentEdges[a][b].keys():[]):f.union(d.values(this._incidentEdges[a])).keys()},g.prototype.toString=function(){return"Graph "+JSON.stringify(this,null,2)},g.prototype.addNode=function(a,b){return a=e.prototype.addNode.call(this,a,b),this._incidentEdges[a]={},a},g.prototype.delNode=function(a){e.prototype.delNode.call(this,a),delete this._incidentEdges[a]},g.prototype.addEdge=function(a,b,c,d){return e.prototype._addEdge.call(this,a,b,c,d,this._incidentEdges,this._incidentEdges)},g.prototype.delEdge=function(a){e.prototype._delEdge.call(this,a,this. -_incidentEdges,this._incidentEdges)}},{"./BaseGraph":25,"./util":45,"cp-data":19}],30:[function(a,b,c){function e(a){function e(b,d){c.has(b)||(c.add(b),d.push(b),a.neighbors(b).forEach(function(a){e(a,d)}))}var b=[],c=new d;return a.nodes().forEach(function(a){var c=[];e(a,c),c.length>0&&b.push(c)}),b}var d=a("cp-data").Set;b.exports=e},{"cp-data":19}],31:[function(a,b,c){function e(a,b,c,e){function h(b){var d=a.incidentNodes(b),e=d[0]!==i?d[0]:d[1],h=f[e],k=c(b),l=j.distance+k;if(k<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+b+" Weight: "+k);l0){i=g.removeMin(),j=f[i];if(j.distance===Number.POSITIVE_INFINITY)break;e(i).forEach(h)}return f}var d=a("cp-data").PriorityQueue;b.exports=e},{"cp-data":19}],32:[function(a,b,c){function e(a,b,c){var e={};return a.eachNode(function(f){e[f]=d(a,f,b,c)}),e}var d=a("./dijkstra");b.exports=e},{"./dijkstra":31}],33:[function(a,b,c){function e(a){return d(a).filter(function(a){return a.length>1})}var d=a("./tarjan");b.exports=e},{"./tarjan":39}],34:[function(a,b,c){function d(a,b,c){var d={},e=a.nodes();return b=b||function(){return 1},c=c||(a.isDirected()?function(b){return a.outEdges(b)}:function(b){return a.incidentEdges(b)}),e.forEach(function(f){d[f]={},d[f][f]={distance:0},e.forEach(function(a){f!==a&&(d[f][a]={distance:Number.POSITIVE_INFINITY})}),c(f).forEach(function(c){var e=a.incidentNodes(c),h=e[0]!==f?e[0]:e[1],i=b(c);i0){h=g.removeMin();if(h in f)c.addEdge(null,h,f[h]);else{if(j)throw new Error("Input graph is not connected: "+a);j=!0}a.incidentEdges(h).forEach(i)}return c}var d=a("../Graph"),e=a("cp-data").PriorityQueue;b.exports=f},{"../Graph":29,"cp-data":19}],39:[function(a,b,c){function d(a){function f(h){var i=d[h]={onStack:!0,lowlink:b,index:b++};c.push(h),a.successors(h).forEach(function(a){a in d?d[a].onStack&&(i.lowlink=Math.min(i.lowlink,d[a].index)):(f(a),i.lowlink=Math.min(i.lowlink,d[a].lowlink))});if(i.lowlink===i.index){var j=[],k;do k=c.pop(),d[k].onStack=!1,j.push(k);while(h!==k);e.push(j)}}if(!a.isDirected())throw new Error("tarjan can only be applied to a directed graph. Bad input: "+a);var b=0,c=[],d={},e=[];return a.nodes().forEach(function(a){a in d||f(a)}),e}b.exports=d},{}],40:[function(a,b,c){function d(a){function f(g){if(g in c)throw new e;g in b||(c[g]=!0,b[g]=!0,a.predecessors(g).forEach(function(a){f(a)}),delete c[g],d.push(g))}if(!a.isDirected())throw new Error("topsort can only be applied to a directed graph. Bad input: "+a);var b={},c={},d=[],g=a.sinks();if(a.order()!==0&&g.length===0)throw new e;return a.sinks().forEach(function(a){f(a)}),d}function e(){}b.exports=d,d.CycleException=e,e.prototype.toString=function(){return"Graph has at least one cycle"}},{}],41:[function(a,b,c){function e(a){function b(){a.call(this),this._parents={},this._children={},this._children[null]=new d}return b.prototype=new a,b.prototype.constructor=b,b.prototype.parent=function(a,b){this._strictGetNode(a);if(arguments.length<2)return this._parents[a];if(a===b)throw new Error("Cannot make "+a+" a parent of itself");b!==null&&this._strictGetNode(b),this._children[this._parents[a]].remove(a),this._parents[a]=b,this._children[b].add(a)},b.prototype.children=function(a){return a!==null&&this._strictGetNode(a),this._children[a].keys()},b.prototype.addNode=function(b,c){return b=a.prototype.addNode.call(this,b,c),this._parents[b]=null,this._children[b]=new d,this._children[null].add(b),b},b.prototype.delNode=function(b){var c=this.parent(b);return this._children[b].keys().forEach(function(a){this.parent(a,c)},this),this._children[c].remove(b),delete this._parents[b],delete this._children[b],a.prototype.delNode.call(this,b)},b.prototype.copy=function(){var b=a.prototype.copy.call(this);return this.nodes().forEach(function(a){b.parent(a,this.parent(a))},this),b},b.prototype.filterNodes=function(b){function f(a){var b=c.parent(a);return b===null||d.hasNode(b)?(e[a]=b,b):b in e?e[b]:f(b)}var c=this,d=a.prototype.filterNodes.call(this,b),e={};return d.eachNode(function(a){d.parent(a,f(a))}),d},b}var d=a("cp-data").Set;b.exports=e},{"cp-data":19}],42:[function(a,b,c){function h(a){return Object.prototype.toString.call(a).slice(8,-1)}var d=a("../Graph"),e=a("../Digraph"),f=a("../CGraph"),g=a("../CDigraph");c.decode=function(a,b,c){c=c||e;if(h(a)!=="Array")throw new Error("nodes is not an Array");if(h(b)!=="Array")throw new Error("edges is not an Array");if(typeof c=="string")switch(c){case"graph":c=d;break;case"digraph":c=e;break;case"cgraph":c=f;break;case"cdigraph":c=g;break;default:throw new Error("Unrecognized graph type: "+c)}var i=new c;return a.forEach(function(a){i.addNode(a.id,a.value)}),i.parent&&a.forEach(function(a){a.children&&a.children.forEach(function(b){i.parent(b,a.id)})}),b.forEach(function(a){i.addEdge(a.id,a.u,a.v,a.value)}),i},c.encode=function(a){var b=[],c=[];a.eachNode(function(c,d){var e={id:c,value:d};if(a.children){var f=a.children(c);f.length&&(e.children=f)}b.push(e)}),a.eachEdge(function(a,b,d,e){c.push({id:a,u:b,v:d,value:e})});var h;if(a instanceof g)h="cdigraph";else if(a instanceof f)h="cgraph";else if(a instanceof e)h="digraph";else if(a instanceof d)h="graph";else throw new Error("Couldn't determine type of graph: "+a);return{nodes:b,edges:c,type:h}}},{"../CDigraph":26,"../CGraph":27,"../Digraph":28,"../Graph":29}],43:[function(a,b,c){var d=a("cp-data").Set;c.all=function(){return function(){return!0}},c.nodesFromList=function(a){var b=new d(a);return function(a){return b.has(a)}}},{"cp-data":19}],44:[function(a,b,c){var d=a("./Graph"),e=a("./Digraph");d.prototype.toDigraph=d.prototype.asDirected=function(){var a=new e;return this.eachNode(function(b,c){a.addNode(b,c)}),this.eachEdge(function(b,c,d,e){a.addEdge(null,c,d,e),a.addEdge(null,d,c,e)}),a},e.prototype.toGraph=e.prototype.asUndirected=function(){var a=new d;return this.eachNode(function(b,c){a.addNode(b,c)}),this.eachEdge(function(b,c,d,e){a.addEdge(b,c,d,e)}),a}},{"./Digraph":28,"./Graph":29}],45:[function(a,b,c){c.values=function(a){var b=Object.keys(a),c=b.length,d=new Array(c),e;for(e=0;e .dropdown-content").classList.toggle("show"); -} - -// Close the dropdown if the user clicks outside of it -function closeDropdown(e) { - var dropdown = document.querySelector("#version-dropdown > .dropdown-content"); - var relatedTarget = e.relatedTarget || {}; - if (relatedTarget.parentNode !== dropdown) dropdown.classList.remove("show"); -} - -/* Check the Arrow version and remark the version in which we are. Also adds - * blur event listener ​​to handle the documentation nav dropdown behaviour. - */ -function initializeDocVersion() { - const currentHost = window.location.host; - const subdomain = currentHost.split('.')[0]; - - const stableVersionNode = document.head.querySelector("meta[name='stable-version']"); - const nextVersionNode = document.head.querySelector("meta[name='next-version']"); - - const arrowVersionIndicator = document.querySelector("#arrow-version"); - - // Returns numeric version based on received subdomain - const detectedVersion = (function detectVersion(subdomain) { - if (subdomain === 'arrow-kt') { - return stableVersionNode.dataset.title.substring(1); - } - else if (subdomain === 'next') { - return nextVersionNode.dataset.title.substring(1); - } - else { - return subdomain.replace(/-/g, '.'); - } - })(subdomain); - - if (arrowVersionIndicator && detectedVersion) arrowVersionIndicator.textContent = detectedVersion; -} - - -function closeTop() { - document.getElementById("topWarning").remove(); - sessionStorage.setItem("showTopWarning", 1); -} - -window.addEventListener("load", initializeDocVersion); diff --git a/arrow-site/docs/js/docsearch.min.js b/arrow-site/docs/js/docsearch.min.js deleted file mode 100644 index efb45b8f6f2..00000000000 --- a/arrow-site/docs/js/docsearch.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! docsearch 2.6.3 | © Algolia | github.com/algolia/docsearch */ -(function webpackUniversalModuleDefinition(root,factory){if(typeof exports==="object"&&typeof module==="object")module.exports=factory();else if(typeof define==="function"&&define.amd)define([],factory);else if(typeof exports==="object")exports["docsearch"]=factory();else root["docsearch"]=factory()})(typeof self!=="undefined"?self:this,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId]){return installedModules[moduleId].exports}var module=installedModules[moduleId]={i:moduleId,l:false,exports:{}};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.l=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.d=function(exports,name,getter){if(!__webpack_require__.o(exports,name)){Object.defineProperty(exports,name,{configurable:false,enumerable:true,get:getter})}};__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module["default"]}:function getModuleExports(){return module};__webpack_require__.d(getter,"a",getter);return getter};__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)};__webpack_require__.p="";return __webpack_require__(__webpack_require__.s=22)}([function(module,exports,__webpack_require__){"use strict";var DOM=__webpack_require__(1);function escapeRegExp(str){return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}module.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(agentString){if(agentString===undefined){agentString=navigator.userAgent}if(/(msie|trident)/i.test(agentString)){var match=agentString.match(/(msie |rv:)(\d+(.\d+)?)/i);if(match){return match[2]}}return false},escapeRegExChars:function(str){return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(obj){return typeof obj==="number"},toStr:function toStr(s){return s===undefined||s===null?"":s+""},cloneDeep:function cloneDeep(obj){var clone=this.mixin({},obj);var self=this;this.each(clone,function(value,key){if(value){if(self.isArray(value)){clone[key]=[].concat(value)}else if(self.isObject(value)){clone[key]=self.cloneDeep(value)}}});return clone},error:function(msg){throw new Error(msg)},every:function(obj,test){var result=true;if(!obj){return result}this.each(obj,function(val,key){if(result){result=test.call(null,val,key,obj)&&result}});return!!result},any:function(obj,test){var found=false;if(!obj){return found}this.each(obj,function(val,key){if(test.call(null,val,key,obj)){found=true;return false}});return found},getUniqueId:function(){var counter=0;return function(){return counter++}}(),templatify:function templatify(obj){if(this.isFunction(obj)){return obj}var $template=DOM.element(obj);if($template.prop("tagName")==="SCRIPT"){return function template(){return $template.text()}}return function template(){return String(obj)}},defer:function(fn){setTimeout(fn,0)},noop:function(){},formatPrefix:function(prefix,noPrefix){return noPrefix?"":prefix+"-"},className:function(prefix,clazz,skipDot){return(skipDot?"":".")+prefix+clazz},escapeHighlightedString:function(str,highlightPreTag,highlightPostTag){highlightPreTag=highlightPreTag||"";var pre=document.createElement("div");pre.appendChild(document.createTextNode(highlightPreTag));highlightPostTag=highlightPostTag||"";var post=document.createElement("div");post.appendChild(document.createTextNode(highlightPostTag));var div=document.createElement("div");div.appendChild(document.createTextNode(str));return div.innerHTML.replace(RegExp(escapeRegExp(pre.innerHTML),"g"),highlightPreTag).replace(RegExp(escapeRegExp(post.innerHTML),"g"),highlightPostTag)}}},function(module,exports,__webpack_require__){"use strict";module.exports={element:null}},function(module,exports){var hasOwn=Object.prototype.hasOwnProperty;var toString=Object.prototype.toString;module.exports=function forEach(obj,fn,ctx){if(toString.call(fn)!=="[object Function]"){throw new TypeError("iterator must be a function")}var l=obj.length;if(l===+l){for(var i=0;i was loaded but did not call our provided callback"),JSONPScriptError:createCustomError("JSONPScriptError","