diff --git a/.gitignore b/.gitignore index 96d1fa9..dfdf37d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ .vscode/ .idea/ +## Ruby +.bundle/ +/vendor/ ## Jekyll _site/ diff --git a/.liquidrc b/.liquidrc new file mode 100644 index 0000000..2c85f0d --- /dev/null +++ b/.liquidrc @@ -0,0 +1,54 @@ +{ + "ignore": [ + { + "type": "liquid", + "begin": "comment", + "end": "endcomment" + }, + { + "type": "html", + "begin": "script", + "end": "script" + }, + { + "type": "html", + "begin": "style", + "end": "style" + } + ], + "html": { + "correct": false, + "force_attribute": false, + "braces": false, + "preserve": 2, + "unformatted": false + }, + "js": { + "preserve": 1, + "method_chain": 0, + "quote_convert": "none", + "format_array": "indent", + "format_object": "indent", + "braces": false, + "no_semicolon": false, + "brace_block": true + }, + "scss": { + "css_insert_lines": true, + "preserve": 2, + "braces": false, + "brace_block": true + }, + "css": { + "css_insert_lines": true, + "preserve": 2, + "braces": false, + "brace_block": true + }, + "json": { + "preserve": 0, + "braces": false, + "brace_block": true, + "no_semicolon": true + } +} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index cf14b2a..b47c312 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,12 @@ language: ruby rvm: - 2.7.1 -script: "bundle exec jekyll build" +script: "bundle exec jekyll build -d docs --config _config-dev.yml" + +deploy: + provider: pages + skip_cleanup: true + github_token: $GITHUB_TOKEN # Set in the settings page of your repository, as a secure variable + keep_history: true + on: + branch: master diff --git a/Gemfile b/Gemfile index 8f7e052..ae00194 100644 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,6 @@ source "https://rubygems.org" -gem 'github-pages', group: :jekyll_plugins -# gem "just-the-docs" \ No newline at end of file +gem "jekyll", github: "jekyll/jekyll" +# gem 'github-pages', group: :jekyll_plugins +gem "just-the-docs", :git => 'https://github.com/mrfleap/just-the-docs.git' +gem 'jekyll-spaceship' \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 50b51c2..2d0bc5d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,201 +1,60 @@ +GIT + remote: https://github.com/jekyll/jekyll.git + revision: 4299095d218e8ab7c5c7930eb2f0cbf5166ff888 + specs: + jekyll (4.1.1) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (~> 2.0) + jekyll-watch (~> 2.0) + kramdown (~> 2.3) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (~> 0.4.0) + pathutil (~> 0.9) + rouge (~> 3.0) + safe_yaml (~> 1.0) + terminal-table (~> 1.8) + +GIT + remote: https://github.com/mrfleap/just-the-docs.git + revision: cdfad69c5b0ae25bc3c18de5392c9beba339a342 + specs: + just-the-docs (0.3.2) + jekyll (>= 3.8.5) + jekyll-seo-tag (~> 2.0) + rake (>= 12.3.1, < 13.1.0) + GEM remote: https://rubygems.org/ specs: - activesupport (6.0.3.2) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 0.7, < 2) - minitest (~> 5.1) - tzinfo (~> 1.1) - zeitwerk (~> 2.2, >= 2.2.2) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.11.1) colorator (1.1.0) - commonmarker (0.17.13) - ruby-enum (~> 0.5) concurrent-ruby (1.1.7) - dnsruby (1.61.4) - simpleidn (~> 0.1) em-websocket (0.5.1) eventmachine (>= 0.12.9) http_parser.rb (~> 0.6.0) - ethon (0.12.0) - ffi (>= 1.3.0) eventmachine (1.2.7) - execjs (2.7.0) - faraday (1.0.1) - multipart-post (>= 1.2, < 3) ffi (1.13.1) forwardable-extended (2.6.0) gemoji (3.0.1) - github-pages (207) - github-pages-health-check (= 1.16.1) - jekyll (= 3.9.0) - jekyll-avatar (= 0.7.0) - jekyll-coffeescript (= 1.1.1) - jekyll-commonmark-ghpages (= 0.1.6) - jekyll-default-layout (= 0.1.4) - jekyll-feed (= 0.13.0) - jekyll-gist (= 1.5.0) - jekyll-github-metadata (= 2.13.0) - jekyll-mentions (= 1.5.1) - jekyll-optional-front-matter (= 0.3.2) - jekyll-paginate (= 1.1.0) - jekyll-readme-index (= 0.3.0) - jekyll-redirect-from (= 0.15.0) - jekyll-relative-links (= 0.6.1) - jekyll-remote-theme (= 0.4.1) - jekyll-sass-converter (= 1.5.2) - jekyll-seo-tag (= 2.6.1) - jekyll-sitemap (= 1.4.0) - jekyll-swiss (= 1.0.0) - jekyll-theme-architect (= 0.1.1) - jekyll-theme-cayman (= 0.1.1) - jekyll-theme-dinky (= 0.1.1) - jekyll-theme-hacker (= 0.1.1) - jekyll-theme-leap-day (= 0.1.1) - jekyll-theme-merlot (= 0.1.1) - jekyll-theme-midnight (= 0.1.1) - jekyll-theme-minimal (= 0.1.1) - jekyll-theme-modernist (= 0.1.1) - jekyll-theme-primer (= 0.5.4) - jekyll-theme-slate (= 0.1.1) - jekyll-theme-tactile (= 0.1.1) - jekyll-theme-time-machine (= 0.1.1) - jekyll-titles-from-headings (= 0.5.3) - jemoji (= 0.11.1) - kramdown (= 2.3.0) - kramdown-parser-gfm (= 1.1.0) - liquid (= 4.0.3) - mercenary (~> 0.3) - minima (= 2.5.1) - nokogiri (>= 1.10.4, < 2.0) - rouge (= 3.19.0) - terminal-table (~> 1.4) - github-pages-health-check (1.16.1) - addressable (~> 2.3) - dnsruby (~> 1.60) - octokit (~> 4.0) - public_suffix (~> 3.0) - typhoeus (~> 1.3) - html-pipeline (2.14.0) - activesupport (>= 2) - nokogiri (>= 1.4) http_parser.rb (0.6.0) - i18n (0.9.5) + i18n (1.8.5) concurrent-ruby (~> 1.0) - jekyll (3.9.0) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 0.7) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 2.0) - kramdown (>= 1.17, < 3) - liquid (~> 4.0) - mercenary (~> 0.3.3) - pathutil (~> 0.9) - rouge (>= 1.7, < 4) - safe_yaml (~> 1.0) - jekyll-avatar (0.7.0) - jekyll (>= 3.0, < 5.0) - jekyll-coffeescript (1.1.1) - coffee-script (~> 2.2) - coffee-script-source (~> 1.11.1) - jekyll-commonmark (1.3.1) - commonmarker (~> 0.14) - jekyll (>= 3.7, < 5.0) - jekyll-commonmark-ghpages (0.1.6) - commonmarker (~> 0.17.6) - jekyll-commonmark (~> 1.2) - rouge (>= 2.0, < 4.0) - jekyll-default-layout (0.1.4) - jekyll (~> 3.0) - jekyll-feed (0.13.0) - jekyll (>= 3.7, < 5.0) - jekyll-gist (1.5.0) - octokit (~> 4.2) - jekyll-github-metadata (2.13.0) - jekyll (>= 3.4, < 5.0) - octokit (~> 4.0, != 4.4.0) - jekyll-mentions (1.5.1) - html-pipeline (~> 2.3) - jekyll (>= 3.7, < 5.0) - jekyll-optional-front-matter (0.3.2) - jekyll (>= 3.0, < 5.0) - jekyll-paginate (1.1.0) - jekyll-readme-index (0.3.0) - jekyll (>= 3.0, < 5.0) - jekyll-redirect-from (0.15.0) - jekyll (>= 3.3, < 5.0) - jekyll-relative-links (0.6.1) - jekyll (>= 3.3, < 5.0) - jekyll-remote-theme (0.4.1) - addressable (~> 2.0) - jekyll (>= 3.5, < 5.0) - rubyzip (>= 1.3.0) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) + jekyll-sass-converter (2.1.0) + sassc (> 2.0.1, < 3.0) jekyll-seo-tag (2.6.1) jekyll (>= 3.3, < 5.0) - jekyll-sitemap (1.4.0) - jekyll (>= 3.7, < 5.0) - jekyll-swiss (1.0.0) - jekyll-theme-architect (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-cayman (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-dinky (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-hacker (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-leap-day (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-merlot (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-midnight (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-minimal (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-modernist (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-primer (0.5.4) - jekyll (> 3.5, < 5.0) - jekyll-github-metadata (~> 2.9) - jekyll-seo-tag (~> 2.0) - jekyll-theme-slate (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-tactile (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-time-machine (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-titles-from-headings (0.5.3) - jekyll (>= 3.3, < 5.0) + jekyll-spaceship (0.9.1) + gemoji (~> 3.0) + jekyll (>= 3.6, < 5.0) + nokogiri (~> 1.6) + rainbow (~> 3.0) jekyll-watch (2.2.1) listen (~> 3.0) - jemoji (0.11.1) - gemoji (~> 3.0) - html-pipeline (~> 2.2) - jekyll (>= 3.0, < 5.0) - just-the-docs (0.3.1) - jekyll (>= 3.8.5) - jekyll-seo-tag (~> 2.0) - rake (>= 12.3.1, < 13.1.0) kramdown (2.3.0) rexml kramdown-parser-gfm (1.1.0) @@ -204,61 +63,34 @@ GEM listen (3.2.1) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.3.6) + mercenary (0.4.0) mini_portile2 (2.4.0) - minima (2.5.1) - jekyll (>= 3.5, < 5.0) - jekyll-feed (~> 0.9) - jekyll-seo-tag (~> 2.1) - minitest (5.14.1) - multipart-post (2.1.1) nokogiri (1.10.10) mini_portile2 (~> 2.4.0) - octokit (4.18.0) - faraday (>= 0.9) - sawyer (~> 0.8.0, >= 0.5.3) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (3.1.1) + public_suffix (4.0.5) + rainbow (3.0.0) rake (13.0.1) rb-fsevent (0.10.4) rb-inotify (0.10.1) ffi (~> 1.0) rexml (3.2.4) - rouge (3.19.0) - ruby-enum (0.8.0) - i18n - rubyzip (2.3.0) + rouge (3.22.0) safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sawyer (0.8.2) - addressable (>= 2.3.5) - faraday (> 0.8, < 2.0) - simpleidn (0.1.1) - unf (~> 0.1.4) + sassc (2.4.0) + ffi (~> 1.9) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) - thread_safe (0.3.6) - typhoeus (1.4.0) - ethon (>= 0.9.0) - tzinfo (1.2.7) - thread_safe (~> 0.1) - unf (0.1.4) - unf_ext - unf_ext (0.0.7.7) unicode-display_width (1.7.0) - zeitwerk (2.4.0) PLATFORMS ruby DEPENDENCIES - github-pages - just-the-docs + jekyll! + jekyll-spaceship + just-the-docs! BUNDLED WITH 2.1.4 diff --git a/README.md b/README.md index 797ed3c..2a13872 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,62 @@ [![Build Status](https://travis-ci.com/go-compression/go-compression.github.io.svg?branch=master)](https://travis-ci.com/go-compression/go-compression.github.io) This repo contains the source Jekyll files for [The Hitchhiker's Guide to Compression](https://go-compression.github.io/) on GitHub Pages. + +## Building Locally + +If you decide to contribute it may be a good idea (depending on the scope of your contribution) to build the website locally so you can build and test your changes live. This project uses [Jekyll](https://jekyllrb.com/) to build the static website for GitHub Pages, along with the theme, "[just-the-docs](https://github.com/pmarsceill/just-the-docs)". + +To run the site locally or build the files, you'll need to first **[install Ruby](https://www.ruby-lang.org/en/documentation/installation/)**. + +Once installed, go ahead and install [Ruby Bundler](https://bundler.io/) so you can install the dependencies. + +```console +$ sudo gem install bundler +``` + +Now you'll want to install the local dependencies, Bundler makes this simple (make sure you're in the project root): + +```console +$ bundle install +``` + +Now you should be able to serve the site locally with `jekyll serve`. + +``` +$ bundle exec jekyll serve --config _config-dev.yml +Server address: http://127.0.0.1:4000 +Server running... press ctrl-c to stop. +``` + +## Running Locally + +To make development just a bit easier, you can also use the wonderful [browser-sync](https://www.npmjs.com/package/browser-sync) NPM package which allows you to make a modification to any file, and see the change quickly without refreshing. This makes the development process easier as you don't have to constantly alt-tab between windows and hit the refresh button to see your change. However, this process is completely optional as it requires a few hundred MBs in `node_modules` alone and requires an installation of Node so using `jekyll serve` is more than enough if you don't want to worry about Node. + +This project uses [gulp](https://gulpjs.com/) to handle the browser reloads and proxying of jekyll for browser-sync. To get started, first [make sure you have Node installed](https://nodejs.org/en/download/). Once `node` and `npm` are installed on your path, install the dependencies with `npm install`. You'll also want to install `gulp` globally so you can use it from your PATH. + +```console +$ npm install +$ sudo npm install -g gulp +``` + +Now, it's as simple as running `gulp` + +```console +$ gulp +[Browsersync] Access URLs: +------------------------------------- + Local: http://localhost:3000 + External: http://172.21.61.88:3000 +------------------------------------- + UI: http://localhost:3001 + UI External: http://localhost:3001 +------------------------------------- +``` + +You can now navigate to [localhost:3000](http://localhost:3000) and any changes you make to the site should now be shown live! + +## The Tale of Two `_config.yml`'s + +You may wonder why you use the `_config-dev.yml` to run it locally instead of just the `_config.yml`, and the answer is that GitHub Pages doesn't like complicated build processes. + +The `_config-dev.yml` is what's used to build the site locally and by Travis CI, once built Travis will upload the compiled files to the [gh-pages](https://github.com/go-compression/go-compression.github.io/tree/gh-pages) branch. Once pushed, GitHub Pages will use the `_travis.yml` file to serve the compiled site from the docs/ folder. This means that you can use any Jekyll build process you want, and GitHub Pages will serve the compiled version. diff --git a/_config-dev.yml b/_config-dev.yml new file mode 100644 index 0000000..a3b3fb7 --- /dev/null +++ b/_config-dev.yml @@ -0,0 +1,44 @@ +name: The Hitchhiker's Guide to Compression +title: The Hitchhiker's Guide to Compression +description: A collection of resources and posts to help people understand compression algorithms. +footer-links: + github: go-compression/go-compression.github.io +# url: https://go-compression.github.io/ + +url: "" # blank in development +permalink: pretty + +# development: true # optional, you can use in liquid tag conditionals + +exclude: [node_modules, gulpfile.js] + +plugins: + - jekyll-spaceship + +sass: + sass_dir: _sass + +source: site + +readme_index: + enabled: false + +# remote_theme: pmarsceill/just-the-docs +theme: "just-the-docs" + +footer_content: 'If you see something off, please consider contributing.' + +# Aux links for the upper right navigation +aux_links: + "View on GitHub": + - "https://github.com/go-compression/go-compression.github.io" + +# last_edit_timestamp: true # show or hide edit time - page must have `last_modified_date` defined in the frontmatter +# last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https://ruby-doc.org/stdlib-2.7.0/libdoc/time/rdoc/Time.html + +gh_edit_link: true # show or hide edit this page link +gh_edit_link_text: "Edit this page on GitHub." +gh_edit_repository: "https://github.com/go-compression/go-compression.github.io" # the github URL for your repo +gh_edit_source: site +gh_edit_branch: "master" # the branch that your docs is served from +gh_edit_view_mode: "edit" # "tree" or "edit" if you want the user to jump into the editor immediately diff --git a/_config.yml b/_config.yml index c296ef4..122da98 100644 --- a/_config.yml +++ b/_config.yml @@ -1,24 +1 @@ -# name: The Hitchhiker's Guide to Compression -# title: The Hitchhiker's Guide to Compression -# description: A collection of resources and posts to help people understand compression algorithms. -# # footer-links: -# # github: go-compression/go-compression.github.io -# url: https://go-compression.github.io/ - -# exclude: [node_modules, gulpfile.js] - -# sass: -# sass_dir: _sass - -# source: docs - -# readme_index: -# enabled: false - -remote_theme: pmarsceill/just-the-docs -# theme: "just-the-docs" - -# Aux links for the upper right navigation -# aux_links: -# "View on GitHub": -# - "https://github.com/go-compression/go-compression.github.io" +source: docs diff --git a/_sass/custom/custom.scss b/_sass/custom/custom.scss deleted file mode 100644 index 457c8e2..0000000 --- a/_sass/custom/custom.scss +++ /dev/null @@ -1,24 +0,0 @@ -$sidebar_width: 364px; - -.site-header { - height: 90px; - max-height: 90px; -} - -@media (min-width: 66.5rem) { - .site-nav, - .site-header, - .site-footer { - width: $sidebar_width; - } - - $sidebar_width_offset: calc((100%) / 2 - #{$sidebar_width}); - - .side-bar { - width: $sidebar_width_offset; - } - - .main { - margin-left: $sidebar_width_offset; - } -} diff --git a/algorithms/lz.md b/algorithms/lz.md deleted file mode 100644 index 0ff3834..0000000 --- a/algorithms/lz.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Lempel-Ziv -parent: Overview of Algorithms -nav_order: 1 ---- - -# Lempel-Ziv - -This article is currently a stub. diff --git a/contributing.md b/contributing.md deleted file mode 100644 index cccdf6c..0000000 --- a/contributing.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: default -title: Contributing -nav_order: 10 ---- - -# Contributing - -This site is intended to be used as a living documentation that is constantly updated by the community, if you feel like something's missing or would like to contribute, please do one of the following [create an issue](https://github.com/go-compression/go-compression.github.io/issues/new) or [create a pull request](https://github.com/go-compression/go-compression.github.io/compare). - -The best way to ask a question is to [file an issue](https://github.com/go-compression/go-compression.github.io/issues/new) and we'll try to get back to you. diff --git a/docs/algorithms/arithmetic/index.html b/docs/algorithms/arithmetic/index.html new file mode 100644 index 0000000..9600f1b --- /dev/null +++ b/docs/algorithms/arithmetic/index.html @@ -0,0 +1,170 @@ + + + + + + +Arithmetic Coding - The Hitchhiker's Guide to Compression + + +Arithmetic Coding | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+
+ + +
+
+
+

Arithmetic Coding

+

In the world of dictionary coding and probability based encoding, the floating point weirdness that is arithmetic coding is a refreshing and surprisingly efficient lossless compression algorithm. The algorithm takes the form of two stages, the first stage translates a string into a floating point range and the second stage translates this into a binary sequence. Let’s take a look at how each stage works.

+

Stage 1: Floating Point Ranges

+

At a very broad level arithmetic coding works by taking a character and assigning it a frequency to a table. This frequency is then mapped to a number line between 0 and 1. So, if we have the character frequency table as shown below for the word “HELLO”, we would end up with our number line shown below.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
CharacterFrequencyProbability
H120%
E120%
L240%
O120%
+

Arithmetic number line

+

To do the encoding, we need a floating point range representing our encoded string. So, for example, let’s encode “HELLO”. We start out by encoding just the letter “H”, which would give us the range of 0 to 0.2. However, we’re not just encoding “H” so, we need to encode “E”. To encode “E” we take the range from encoding “H”, 0 to 0.2, and apply our same frequency table to that. You can see this represented below.

+

Arithmetic number line with two frequency tables

+

Blown up, you can see that we’re essentially copying the number line down, but fitting it within the range of 0 to 0.2 instead of 0 to 1.

+

Arithmetic number line with the range of 0-0.2

+

Now, we’ll encode the letter “E”, and we can see it falls within the range of 0.04 to 0.08.

+

Arithmetic number line with the range of 0-0.2 with "HE" encoded

+

As we move through this process, this copying of the number line and fitting it within the previous range continues until we encode our entire string. Though, if you’re familiar with floating point arithmetic in computers, you know that computers aren’t good with decimals, especially long ones. There are some workarounds to this, but generally floating point math is too inefficient or innaccurate to make arithmetic coding work quickly or properly for compression.

+

The answer to this issue is called finite-precision arithmetic coding, with the above approach of fitting the number line within a range known as the infinite-precision version because we (supposedly) have an infinite amount of precision.

+

Now if we continue this process, we get a range representing 0.06368 to 0.06496. The difference between these two numbers is just 0.00128, a big difference from the 0.2 difference when encoding just “H”. You can imagine that larger files will have an even smaller difference between the two ranges, spelling out the need for finite-precision arithmetic coding.

+ +

The next, and luckily final, stage is to run a binary search-like algorithm over the table to find a binary range that lays within our range from the first stage.

+

The way this works is actually quite simple. We take our number line from 0 to 1, and lay it out.

+

Arithmetic number line

+

Then, we plot our range on the number line, and place our current target in the middle of the range: 0.5.

+

Arithmetic number line with target and range

+

The trick is to see whether our range falls on the left or right side of our target (0.5). In this case, our range pretty clearly falls on the left hand side so we output a 0. If it fell on the right hand side we would output a 1.

+

Now here’s where things get interesting. We change the top end of our range from 1 to 0.5, so now we’re looking at the range from 0 to 0.5, with out target at 0.25 (0.25 is in between 0 and 0.5).

+

Arithmetic number line with target and range from 0-0.5

+

You can see the range moves closer to our target and the area between gets a little larger. It’s important to note we’re not changing the range, just looking at it magnified. Our range is still below 0.25 so we’ll output a 0 and repeat this process for the range of 0-0.25.

+

This continues until you’re left with a binary sequence that represents a target, just like the 0.5 and 0.25 from earlier examples, that lays within our encoded range from stage 1. This binary stream is the coded version (the compressed version) as we can use it to get back to the original string with the right frequency table.

+

Infinite vs. Finite Precision

+

Infinite precision is the process that we just went over with two stages. However as we saw, the more characters we encode, the smaller the difference between our range floor and ceiling gets. This means that as we encode more and more characters the top and bottom sections of the range will eventually meet and represent the same value because a typical 32-bit system cannot represent infinite precision. There are ways around this, such as increasing the size of the floating point number’s precision or using infinite precision, but these solutions don’t work for all data or are very inefficient respectively.

+

The harder solution is to combine these steps in one stage, which is called finite-precision arithmetic coding because it only requires a finite amount of precision to operate. This version works by encoding the first character, then immediately trying to see if the range falls above or below 0.5. If so, it will output the binary number representing which half it lays within and will “blow up” the range so that it doesn’t lose precision. There is also an important corner-case of encoding a “10” or “01” if the range lays within 0.25-0.75 which requires memory to be carried over from each encoding.

+

To put it simply, infinite-precision arithmetic coding is a simple and easy way to understand arithmetic coding while finite-precision arithmetic coding is more complicated but scalable and efficient.

+

Now unfortunately I can’t explain how to implement your own version of finite-precision arithmetic coding well enough to be comprehensive, so I’ll redirect you to a wonderful article by Mark Nelson that explains how to write an arithmetic coder with infinite and finite precision. There are also some wonderful online lectures by mathematicalmonk on YouTube that go into detail about finite-precision coding in a visual way. If anything in this article doesn’t make sense to you then I can’t recommend mathematicalmonk’s YouTube lectures and Mark Nelson’s article. Arithmetic Compression from Compressor Head on YouTube is also a great and enjoyable primer on the topic.

+

Adaptive Arithmetic Coding

+

One last variation of arithmetic coding worth mentioning is the idea of adaptive arithmetic coding. This version works in mostly the same way as typical arithmetic coding except that rather than building a frequency table from the source, it builds the frequency table as it encodes each character.

+

This means if you were encoding “HELLO”, it would start with “H” representing 100% of the table. When it encoded the “E”, it would update the frequency table so “H” would represent 50% of the table and “E” representing the remaining 50%. This concept allows arithmetic coding to adapt to the content as it’s encoding which allows it to achieve a higher compression ratio.

+

Resources

+

If you’re interested in learning more about arithmetic coding, check out these great resources:

+ +
+ +
+
+
+
+ + diff --git a/docs/algorithms/dictionary/index.html b/docs/algorithms/dictionary/index.html new file mode 100644 index 0000000..059ffc7 --- /dev/null +++ b/docs/algorithms/dictionary/index.html @@ -0,0 +1,176 @@ + + + + + + +Dictionary Coding - The Hitchhiker's Guide to Compression + + +Dictionary Coding | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+
+ + +
+
+
+

Dictionary Coding

+

Dictionary coding is one of the most primitive and powerful forms of compression that exists currently. In fact, we use it everyday in English. I’ve actually used it already. Did you catch that?

+

The contraction “I’ve” is technically a form of dictionary coding because when we read the word we automatically expand it to “I have” in our mind. This simple concept is used everywhere from spoken languages, mathematic functions, to file encodings.

+

More advanced forms of dictionary coding form the basis for many different compression algorithms aside from a simple search-and-replace step such as LZ, Huffman, and more.

+

The Concept

+

Let’s get an idea of how you could use dictionary coding to compress data.

+

So let’s say we’re working in a restaurant and we have to communicate to the chefs what food we need to be prepared on paper. Now our restaurant has three things on the menu:

+
    +
  • Pizza
  • +
  • Fries
  • +
  • Milkshakes
  • +
+

Rather than writing down “pizza” or “fries” everytime someone order’s pizza or fries, we can assign each item a unique code.

+
    +
  • +1 - Pizza
  • +
  • +2 - Fries
  • +
  • +3 - Milkshake
  • +
+

Now when we’re preparing order tickets for the kitchen, we can simply write 1, 2, or 3. This simple concept is used to improve upon the most advanced modern compression algorithms.

+

Implementation

+

Implementing a dictionary coder and decoder is actually very simple. All we’re really doing is replacing the long text with corresponding codes to encode it, and replacing codes with the text it represents to decode it.

+

Here’s a sample:

+
text = "Order: pizza, fries, milkshake"
+encoded = text.replace("pizza", "1").replace("fries", "2").replace("milkshake", "3")
+print(encoded)
+# Order: 1, 2, 3
+
+

Decoding is the same, just in reverse:

+
text = "Order: 1, 2, 3"
+decoded = text.replace("1", "pizza").replace("2", "fries").replace("3", "milkshake")
+print(decoded)
+# Order: pizza, fries, milkshake
+
+

If we want to get a bit fancier we can even use a dictionary to dynamically pull codes and values from:

+
codes = {"pizza": "1", "fries": "2", "milkshake": "3"}
+text = "Order: pizza, fries, milkshake"
+
+encoded = text
+
+for value, code in codes.items():
+    encoded = encoded.replace(value, code)
+
+print(encoded)
+# Order: 1, 2, 3
+
+

And to decode:

+
codes = {"pizza": "1", "fries": "2", "milkshake": "3"}
+text = "Order: 1, 2, 3"
+
+decoded = text
+
+for value, code in codes.items():
+    decoded = decoded.replace(code, value)
+
+print(decoded)
+# Order: pizza, fries, milkshake
+
+

Caveats

+

The key to dictionary coding is that it solves a different problem than general-purpose encoders. A dictionary coder must be built with a known list of words (or bytes) that are very common to be able to see any real difference. For example, you could build a dictionary coder with the most common English character and encode Shakespeare, which would probably give you a good compression ratio. But if you were to use the same dictionary to encode a PDF or HTML file you would get much worse results. You also have to make sure that both the coder and decoder have the same dictionaries, otherwise the encoded text will be useless.

+

Common Usage

+

While dictionary coders may sound imperfect and niche, they’re quite the opposite. Web compression algorithms like Brotli use a dictionary with the most common words, HTML tags, JavaScript tokens, and CSS properties to encode web assets. This dictionary, while large, is insignificant compared to the savings they provide to each file they decode.

+

Here’s some modern algorithms that employ dictionary coding:

+ +

Resources

+

If you’re interested in learning more about dictionary coding, check out some of these great resources:

+ +
+ +
+
+
+
+ + diff --git a/docs/algorithms/dmc/index.html b/docs/algorithms/dmc/index.html new file mode 100644 index 0000000..7f4adce --- /dev/null +++ b/docs/algorithms/dmc/index.html @@ -0,0 +1,125 @@ + + + + + + +Dynamic Markov Compression - The Hitchhiker's Guide to Compression + + +Dynamic Markov Compression | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+
+ + +
+
+
+

Dynamic Markov Compression

+

Dynamic Markov Compression is an obscure form of compression that uses Markov chains to model the patterns represented in a file.

+

Markov Chains

+

Markov Chains are a simple way to model the transitions between states based on a measureable probability. For example, we could use a Markov Chain to model the weather and the probability that it will become sunny if it’s already raining, or vice-versa.

+

Markov Chain diagram for sunny and rainy states

+

Each circle represents a state, and each arrow represents a transition. In this example, we have two states, raining and sunny, a perfect representation of true weather. Each state has two possible transitions, it can transition to itself again or it can transition to another state. The likelihood of each transition is defined by a percentage representing the probability that the transition occurs.

+

Now let’s say it’s sunny and we’re following this model. According to the model there’s a 50% chance it’s sunny again tomorrow or a 50% chance it’s rainy tomorrow. If it becomes rainy, then there’s a 25% chance it’s rainy the day after that or a 75% chance it’s sunny the day after that.

+

Markov Chains may sound scary but the essence of how they work is quite simple. Markov Chains are the statistical model behind a lot of the technology we use today from Google’s PageRank search algorithm to predictive text on smartphone keyboards. If you’d like to learn more, check out this wonderful article by Victor Powell and Lewis Lehe that goes into depth about how Markov Chains work. They also have a wonderful interactive demo.

+

Markov Chain Powered Compression

+

Dynamic Markov Compression is a very obscure and complicated subject when it comes to implementation, and unfortunately I cannot claim to understand it well enough to explain it myself. Though, I have written a similar algorithm from my own trial-and-error that employs stateful Markov chains that model a file. You can find the source code within the Raisin project under the compressor/mcc package. This code is un-optimized and a bit messy as it exists only as a research project to learn more about DMC.

+

If you have a better understanding of DMC and would like to contribute to this article, we would appreciate any and all contributions!

+

Resources

+

If you’re interested in trying to implement DMC yourself or are just interested in the algorithm, here’s a few helpful resources as a jumping-off point:

+ +
+ +
+
+
+
+ + diff --git a/docs/algorithms/huffam-program/index.html b/docs/algorithms/huffam-program/index.html new file mode 100644 index 0000000..4fe40b8 --- /dev/null +++ b/docs/algorithms/huffam-program/index.html @@ -0,0 +1,107 @@ + + + + + + +Tree Building Implementation - The Hitchhiker's Guide to Compression + + +Tree Building Implementation | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+
+ + +
+
+
+

How To Build a Tree (Programmatically)

+

General Implementation

+

Push an array of huffman leaf objects containing each character and its associated frequency into a priority queue. To start building the tree, pop two leafs from the queue and assign them as the left and right leafs for a node.

+

Using this new node, push the node into the priority queue.

+

Continue this process until the size of the queue is 1.

+
+ +
+
+
+
+ + diff --git a/docs/algorithms/huffman/index.html b/docs/algorithms/huffman/index.html new file mode 100644 index 0000000..6c846b5 --- /dev/null +++ b/docs/algorithms/huffman/index.html @@ -0,0 +1,222 @@ + + + + + + +Huffman - The Hitchhiker's Guide to Compression + + +Huffman | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+
+ + +
+
+
+

Huffman

+

Since it’s creation by David A. Huffman in 1952, Huffman coding has been regarded as one of the most efficient and optimal methods of compression. Huffman’s optimal compression ratios are made possible through it’s character counting functionality. Unlike many algorithms in the Lempel-Ziv suite, Huffman encoders scan the file and generate a frequency table and tree before begining the true compression process. Before discussing different implementations, lets dive deeper into how the algorithm works.

+

The Algorithm

+

Although huffman encoding may seem confusing from an outside view, we can break it into three simple steps:

+ +

Frequency Counting

+

Let’s start out by going over the frequency counting step. Throughout all of the examples, I will be using the following sample input string:

+
I AM SAM. I AM SAM. SAM I AM.
+THAT SAM-I-AM! THAT SAM-I-AM! I DO NOT LIKE THAT SAM-I-AM!
+
+

The huffman encoder starts out by going over the inputted text and outputing a table correlating each character to the number of time it appears in the text. For the sample input, the table would look this:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FrequencyCharacter
1N
1\n
1K
1D
1L
1E
2O
3H
3!
3.
6-
6S
7T
8I
12M
15A
17 
+

As displayed above, the table is sorted to ensure consistency in each step of the compression process.

+

Tree Building

+

Once the frequency table is created, the huffman encoder builds a huffman tree. A huffman tree follows the same structure as a normal binary tree, containing nodes and leafs. Each Huffman Leaf contains two values, the character and it’s corresponding frequency.

+

To build the tree, we traverse our table of frequencies and characters, and push the characters with the highest frequencies to the top of tree. Continuing the traversal until each table value is represented on a Huffman Leaf.

+

That might be confusing, so lets break it down step by step.

+

Huffman compression works by taking existing 8 bit characters and assigning them to a smaller number of bits. To optimize the compression, the characters with the highest frequency are given smaller bit values.

+

A Huffman Tree helps us assign and visualize the new bit value assigned to existing characters. Similar to a binary tree, if we start at the root node, we can traverse the tree by using 1 to move to the right and 0 to move to the left. The position of a leaf node relative the root node is used to determine it’s new bit value.

+

A huffman tree for our example is depicted below: Sample Huffman Tree

+

As shown in the image, Huffman trees can get very large and complicated very easily. To see a sample tree for any text go to url.

+

To understand more about the programatic implementation of tree building, click here.

+

Character Encoding

+

Character encoding is the final step for most huffman encoders. Once a tree and frequency table has built, the final step is to encode the characters from the initial file and write the encoded bytes to a new file.

+

This can be done in two ways.

+ +

Tree Traversal

+

Tree traversal is the first way of encoding the input of a huffman encoder. For each character, the tree is traversed recursively until a leaf with a matching character is found.

+

This method can easily get complicated and very inefficient as the tree has to be traversed multiple times.

+

For a simpler and quicker solution, we can use Array Indexing

+

Array Indexing

+

When compared to the previous tree traversal method, array indexing is much less complicated and significantly faster.

+

Before encoding the characters, the tree is traversed once and the values for each leaf are outputted in two corresponding arrays. The first array contains the value of each character, while the second contains its updated bit value.

+

Once created, the arrays are traversed and each character in the input is replaced with its updated bit value.

+

Once a new output text is generated, it is encoded as a byte array and written to the output file.

+
+

Table of contents

+ +
+ +
+
+
+
+ + diff --git a/docs/algorithms/lz/index.html b/docs/algorithms/lz/index.html new file mode 100644 index 0000000..5530a32 --- /dev/null +++ b/docs/algorithms/lz/index.html @@ -0,0 +1,126 @@ + + + + + + +Lempel-Ziv - The Hitchhiker's Guide to Compression + + +Lempel-Ziv | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+
+ + +
+
+
+

Lempel-Ziv

+

Lempel-Ziv, commonly referred to as LZ77/LZ78 depending on the variant, is one of the oldest, most simplistic, and widespread compression algorithms out there. Its power comes from its simplicity, speed, and decent compression rates. Now before we dive into an implementation, let’s understand the concept behind Lempel-Ziv and the various algorithms it has spawned.

+

The Algorithm(s)

+

Lempel-Ziv at its core is very simple. It works by taking an input string of characters, finding repetitive characters, and outputting an “encoded” version. To get an idea of it, here’s an example.

+
Original: Hello everyone! Hello world!
+Encoded: Hello everyone! <16,6>world!
+
+

As you can see, the algorithm simply takes an input string, in this case, “Hello everyone! Hello world!”, and encodes it character by character. If it tries to encode a character it has already seen it will check to see if it has seen the next character. This repeats until it the character it’s checking hasn’t been seen before, following the characters it’s currently encoding, at this point it outputs a “token”, which is <16,6> in this example, and continues.

+

The <16,6> token is quite simple to understand too, it consists of two numbers and some syntactic sugar to make it easy to understand. The first number corresponds to how many characters it should look backwards, and the next number tells it how many characters to go forwards and copy. This means that in our example, <16,6> expands into “Hello “ as it goes 16 characters backwards, and copies the next 6 characters.

+

This is the essential idea behind the algorithm, however it should be noted that there are many variations of this algorithm with different names. For example, in some implementations, the first number means go forwards from the beginning instead of backwards from the current position. Small (and big) differences like these are the reason for so many variations:

+
    +
  • +LZSS - Lempel-Ziv-Storer-Szymanski
  • +
  • LZW - Lempel-Ziv-Welch
  • +
  • LZMA - Lempel–Ziv–Markov chain algorithm
  • +
  • LZ77 - Lempel-Ziv 77
  • +
  • LZ78 - Lempel-Ziv 78
  • +
+

It’s also important to understand the difference between LZ77 and LZ78, the first two Lempel-Ziv algorithms. LZ77 works very similarly to the example above, using a token to represent an offset and length, while LZ78 uses a more complicated dictionary approach. For a more in-depth explanation, make sure to check out this wonderful article explaining LZ78.

+

Implementations

+

Now because there are so many different variations of Lempel-Ziv algorithms, there isn’t a single “LZ” implementation. WIth that being said, if you are interested in implementing a Lempel-Ziv algorithm yourself, you’ll have to choose an algorithm to start with. LZSS is a great jumping-off point as it’s a basic evolution of LZ77 and can be implemented very easily while achieving a respectable compression ratio. If you’re interested in another algorithm, head back to the algorithms overview.

+
+

Table of contents

+ +
+ +
+
+
+
+ + diff --git a/docs/algorithms/lzss/index.html b/docs/algorithms/lzss/index.html new file mode 100644 index 0000000..d99fd99 --- /dev/null +++ b/docs/algorithms/lzss/index.html @@ -0,0 +1,604 @@ + + + + + + +LZSS - The Hitchhiker's Guide to Compression + + +LZSS | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+
+ + +
+
+
+

Lempel-Ziv-Storer-Szymanski

+

Lempel-Ziv-Storer-Szymanski, which we’ll refer to as LZSS, is a simple variation of the common LZ77 algorithm. It uses the same token concept with an offset and length to tell the decoder where to copy the text, except it only places the token when the token is shorter than the text it is replacing.

+

The idea behind this is that it will never increase the size of a file by adding tokens everywhere for repeated letters. You can imagine that LZ77 would easily increase the file size if it simply encoded every repeated letter “e” or “i” as a token, which may take at least 5 bytes depending on the file and implementation instead of just 1 for LZSS.

+

Implementing an Encoder

+

Let’s take a look at some examples, so we can see exactly how it works. The wikipedia article for LZSS has a great example for this, which I’ll use here, and it’s worth a read as an introduction to LZSS.

+

So let’s encode an excerpt of Dr. Seuss’s Green Eggs and Ham with LZSS (credit to Wikipedia for this example).

+
I AM SAM. I AM SAM. SAM I AM.
+
+THAT SAM-I-AM! THAT SAM-I-AM! I DO NOT LIKE THAT SAM-I-AM!
+
+DO WOULD YOU LIKE GREEN EGGS AND HAM?
+
+I DO NOT LIKE THEM,SAM-I-AM.
+I DO NOT LIKE GREEN EGGS AND HAM.
+
+

This text takes up 192 bytes in a typical UTF-8 encoding. Let’s take a look at the LZSS encoded version.

+
I AM SAM. <10,10>SAM I AM.
+
+THAT SAM-I-AM! T<15,14>I DO NOT LIKE<29,15>
+
+DO WOULD YOU LIKE GREEN EGGS AND HAM?
+
+I<69,15>EM,<113,8>.<29,15>GR<64,16>.
+
+

This encoded, or compressed, version only takes 148 bytes to store (without a magic type to describe the file type), which is 77% of the original file size, or a compression ratio of 1.3. Not bad!

+

Analysis

+

Now let’s take a second to understand what’s happening before you start trying to conquer the world with LZSS.

+

As we can see, the “tokens” are reducing the size of the file by referencing pieces of text that are longer than the actual token. Let’s look at the first line:

+
I AM SAM. <10,10>SAM I AM.
+
+

The encoder works character by character. On the first character, ‘I’, it checks it’s search buffer to see if it’s already seen an ‘I’. The search buffer is essentially the encoder’s memory, for every character it encodes, it adds it into the search buffer so it can “remember” it. Because it hasn’t seen an ‘I’ already (the search buffer is empty), it just outputs an ‘I’, adds it to the search buffer, and moves to the next character. The next character is ‘ ‘ (a space). The encoder checks the search buffer to see if it’s seen a space before, and it hasn’t so it outputs the space and moves forward.

+

Once it gets to the second space (after “I AM”), LZ77 comes into play. It’s already seen a space before because it’s in the search buffer so it’s ready to output a token, but first it tries to maximize how much text the token is referencing. If it didn’t do this you could imagine that for every character it’s already seen it would output something similar to <5,1>, which is 5 times larger than any character. So once it finds a character that it’s already seen, it moves on to the next character and checks if it’s already seen the next character directly after the previous character. Once it finds a sequence of characters that it hasn’t already seen, then it goes back one character to the sequence of characters it’s already seen and prepares the token.

+

Once the token is ready, the difference between LZ77 and LZSS starts to shine. At this point LZ77 simply outputs the token, adds the characters to the search buffer and continues. LZSS does something a little smarter, it will check to see if the size of the outputted token is larger than the text it’s representing. If so, it will output the text it represents, not the token, add the text to the search buffer, and continue. If not, it will output the token, add the text it represents to the search buffer and continue.

+

+

Coming back to our example, the space character has already been seen, but a space followed by an “S” hasn’t been seen yet (“ S”), so we prepare the token representing the space. The token in our case would be “<3,1>”, which means go back three characters and copy 1 character(s). Next we check to see if our token is longer than our text, and “<3,1>” is indeed longer than “ “, so it wouldn’t make sense to output the token, so we output the space, add it to our search buffer, and continue.

+

This entire process continues until we get to the “I AM SAM. “. At this point we’ve already seen an “I AM SAM. “ but haven’t seen an “I AM SAM. S” so we know our token will represent “I AM SAM. “. Then we check to see if “I AM SAM. “ is longer than “<10,10>”, which it is, so we output the token, add the text to our search buffer and continue along.

+

+

This process continues, encoding tokens and adding text to the search buffer character by character until it’s finished encoding everything.

+

Takeaways

+

There’s a lot of information to unpack here, but the algorithm at a high level is quite simple:

+
    +
  • Loop character by character
  • +
  • Check if it’s seen the character before
      +
    • If so, check the next character and prepare a token to be outputted
        +
      • If the token is longer than the text it’s representing, don’t output a token
      • +
      • Add the text to the search buffer and continue
      • +
      +
    • +
    • If not, add the character to the search buffer and continue
    • +
    +
  • +
+

It’s important to remember that no matter the outcome, token or no token, the text is always appended to the search buffer so it can always “remember” the text it’s already seen.

+

Implementation

+

Now let’s take a stab at building our very own version so we can understand it more deeply.

+

As with most of these algorithms, we have an implementation written in Go in our raisin project. If you’re interested in what a more performant or real-world example of these algorithms looks like, be sure to check it out. However for this guide we’ll use Python to make it more approachable so we can focus on understanding the algorithm and not the nuances of the language.

+

Character Loop

+

Let’s get started with a simple loop that goes over each character for encoding. As we can see from our takeaways, the character-by-character loop is what powers LZSS.

+
text = "HELLO"
+encoding = "utf-8"
+
+text_bytes = text.encode(encoding)
+
+for char in text_bytes:
+    print(bytes([char]).decode(encoding)) # Print the character
+
+

Output:

+
H
+E
+L
+L
+O
+
+

Although the code is functionally pretty simple, there’s a few important things going on here. You can see that looping character-by-character isn’t as simple as for char in text, first we have to encode it and then loop over the encoding. This is because it converts our string into an array of bytes, represented as a Python object called bytes. When we print the character out, we have to convert it from a byte (represented as a Python int) back to a string so we can see it.

+

The reason we do this is because a byte is really just a number from 0-255 as it is represented in your computer as 8 1’s and 0’s, called binary. If you don’t already have a basic understanding of how computers store our language, you should get acquainted with it on our encodings page.

+

Search Buffers

+

Great, we have a basic program working which can loop over our text and print it out, but that’s pretty far off from compression so let’s keep going. The next step to our program is to implement our “memory” so the program can check to see if its already seen a character.

+
text = "HELLO"
+encoding = "utf-8"
+
+text_bytes = text.encode(encoding)
+
+search_buffer = [] # Array of integers, representing bytes
+
+for char in text_bytes:
+    print(bytes([char]).decode(encoding)) # Print the character
+    search_buffer.append(char) # Add the character to our search buffer
+
+

We no longer need to output anything as we’re just adding each character to the search buffer with the append method.

+

Checking Our Search buffer

+

Now let’s try to implement the LZ part of LZSS, we need to start looking backwards for characters we’ve already seen. This can accomplished quite easily using the list.index method.

+
for char in text_bytes:
+    if char in search_buffer:
+        print(f"Found at {search_buffer.index(char)}")
+
+    print(bytes([char]).decode(encoding)) # Print the character
+    search_buffer.append(char) # Add the character to our search buffer
+
+

Output:

+
H
+E
+L
+Found at 2
+L
+O
+
+

Notice the if char in search_buffer, without this Python will throw an IndexError if the value is not in the list.

+

Building Tokens

+

Now let’s build a token and output it when we find the character.

+
i = 0
+for char in text_bytes:
+    if char in search_buffer:
+        index = search_buffer.index(char) # The index where the character appears in our search buffer
+        offset = i - index # Calculate the relative offset
+        length = 1 # Set the length of the token (how many character it represents)
+
+        print(f"<{offset},{length}>") # Build and print our token
+    else:
+        print(bytes([char]).decode(encoding)) # Print the character
+
+    search_buffer.append(char) # Add the character to our search buffer
+
+    i += 1
+
+

Output:

+
H
+E
+L
+<1,1>
+O
+
+

We’re nearly there! This is actually a rough implementation of LZ77, however there’s one issue. If we have a word that repeats twice, it will copy each character instead of the entire word.

+
text = "SAM SAM"
+
+

Output

+
S
+A
+M
+
+<4,1>
+<4,1>
+<4,1>
+
+

Note: <4,1> is technically correct as each character is represented 4 characters behind the beginning of the token.

+

That’s not exactly right, we should see <4,3> instead of three <4,1> tokens. So let’s write some code that can check our search buffer for more than one character.

+

Checking the Search Buffer for More Characters

+

Let’s modify our code to check the search buffer for more than one character.

+
def elements_in_array(check_elements, elements):
+    i = 0
+    offset = 0
+    for element in elements:
+        if len(check_elements) <= offset:
+            # All of the elements in check_elements are in elements
+            return i - len(check_elements)
+
+        if check_elements[offset] == element:
+            offset += 1
+        else:
+            offset = 0
+
+        i += 1
+    return -1
+
+text = "SAM SAM"
+encoding = "utf-8"
+
+text_bytes = text.encode(encoding)
+
+search_buffer = [] # Array of integers, representing bytes
+check_characters = [] # Array of integers, representing bytes
+
+i = 0
+for char in text_bytes:
+    check_characters.append(char)
+    index = elements_in_array(check_characters, search_buffer) # The index where the characters appears in our search buffer
+
+    if index == -1 or i == len(text_bytes) - 1:
+        if len(check_characters) > 1:
+            index = elements_in_array(check_characters[:-1], search_buffer)
+            offset = i - index - len(check_characters) + 1 # Calculate the relative offset
+            length = len(check_characters) # Set the length of the token (how many character it represents)
+
+            print(f"<{offset},{length}>") # Build and print our token
+        else:
+            print(bytes([char]).decode(encoding)) # Print the character
+
+        check_characters = []
+
+    search_buffer.append(char) # Add the character to our search buffer
+
+    i += 1
+
+

Output:

+
S
+A
+M
+
+<4,3>
+
+

It works! But there’s quite a lot to unpack here so let’s go through it line by line.

+

The first and largest addition is the elements_in_array function. The code here essentially checks to see if specific elements are within an array in an exact order. If so, it will return the index in the array where the elements start, and if not it will return -1.

+

Moving on to our main function loop we can see now have check_characters defined at the top. This variable tracks what characters we’re looking for in our search_buffer. As we loop through, we use check_characters.append(char) to add the current character to the characters we’re searching. Then we check to see if check_characters can be found within search_buffer with elements_in_array.

+

Now we have the best part: the logic. If we couldn’t find a match or it’s the last character we want to output something. If we couldn’t find more than one character in the search_buffer then that means check_characters minus the last character was found, so we’ll output a token representing check_characters minus the last character. Otherwise, we couldn’t find a match for a single character so let’s just output that character.

+

And that’s essentially LZ77! Try it out for yourself with some different strings to see for yourself. However, you might notice that we’re trying to implement LZSS, not LZ77, so we have one more piece to implement.

+

Comparing Token Sizes

+

This crucial piece is the process described earlier of comparing the size of tokens versus the text it represents. Essentially we’re saying, if the token takes up more space than the text it’s representing then don’t output a token, just output the text.

+

Lucky for us this is a pretty simple change. Our main loop now looks like so:

+
for char in text_bytes:
+    check_characters.append(char)
+    index = elements_in_array(check_characters, search_buffer) # The index where the characters appears in our search buffer
+
+    if index == -1 or i == len(text_bytes) - 1:
+        if len(check_characters) > 1:
+            index = elements_in_array(check_characters[:-1], search_buffer)
+            offset = i - index - len(check_characters) + 1 # Calculate the relative offset
+            length = len(check_characters) # Set the length of the token (how many character it represents)
+
+            token = f"<{offset},{length}>" # Build our token
+
+            if len(token) > length:
+                # Length of token is greater than the length it represents, so output the character
+                print(bytes(check_characters).decode(encoding)) # Print the characters
+            else:
+                print(token) # Print our token
+        else:
+            print(bytes([char]).decode(encoding)) # Print the character
+
+        check_characters = []
+
+    search_buffer.append(char) # Add the character to our search buffer
+
+    i += 1
+
+

Output:

+
S
+A
+M
+
+SAM
+
+

The key is the len(token) > length which checks if the length of the token is longer than the length of the text it’s representing. If it is, it simply outputs the characters, otherwise it outputs the token.

+

Sliding Windows

+

The last piece to the puzzle is something you might have noticed if you’re already trying to compress large file: the search buffer gets big. Let’s say we’re compressing a 1 Gb file. After we go over each character, we add it to the search buffer and continue, though each iteration we also search the entire search buffer for certain characters. This quickly adds up for larger files. In our 1 Gb file scenario, near the end we’ll have to search almost 1 billion bytes to encode a single character.

+

It should be pretty obvious that this very inefficient. And unfortunately, there is no magic solution. You have to make a tradeoff. With every compression algorithm you have to decide between speed and compression ratio. Do you want a fast algorithm that can’t reduce the file size very much, or a slow algorithm that reduces the file size more? The answer is: it depends. And so, the tradeoff in LZ77’s case is to create a “sliding window”.

+

The “sliding window” is actually quite simple, all you do is cap off the maximum size of the search buffer. When you add a character to the search buffer that makes it larger than the maximum size of the sliding window then you remove the first character. That way the window is “sliding” as you move through the file, and the algorithm doesn’t slow down!

+
max_sliding_window_size = 4096
+
+...
+
+for char in text_bytes:
+
+    ...
+
+    search_buffer.append(char) # Add the character to our search buffer
+
+    if len(search_buffer) > max_sliding_window_size: # Check to see if it exceeds the max_sliding_window_size
+        search_buffer = search_buffer[1:] # Remove the first element from the search_buffer
+
+    ...
+
+

These changes should be pretty self-explanatory. We’re just checking to see if the length of the search_buffer is greater than the max_sliding_window_size, and if so we pop the first element off of the search_buffer.

+

Keep in mind that while a maximum sliding window size of 4096 character is typical, it may be hard to use during testing, try setting it much lower (like 3-4) and test it with some different strings to see how it works.

+

Putting it all together

+

That’s everything that makes up LZSS, but for the sake of completing our example, let’s clean it up so we can call a function with some text, an optional max_sliding_window_size, and have it return the encoded text, rather than just printing it out.

+
encoding = "utf-8"
+
+def encode(text, max_sliding_window_size=4096):
+	text_bytes = text.encode(encoding)
+
+    search_buffer = [] # Array of integers, representing bytes
+    check_characters = [] # Array of integers, representing bytes
+    output = [] # Output array
+
+    i = 0
+    for char in text_bytes:
+        check_characters.append(char)
+        index = elements_in_array(check_characters, search_buffer) # The index where the characters appears in our search buffer
+
+        if index == -1 or i == len(text_bytes) - 1:
+            if len(check_characters) > 1:
+                index = elements_in_array(check_characters[:-1], search_buffer)
+                offset = i - index - len(check_characters) + 1 # Calculate the relative offset
+                length = len(check_characters) # Set the length of the token (how many character it represents)
+
+                token = f"<{offset},{length}>" # Build our token
+
+                if len(token) > length:
+                    # Length of token is greater than the length it represents, so output the character
+                    output.extend(check_characters) # Output the characters
+                else:
+                    output.extend(token.encode(encoding)) # Output our token
+            else:
+                output.extend(check_characters) # Output the character
+
+            check_characters = []
+
+        search_buffer.append(char) # Add the character to our search buffer
+
+        if len(search_buffer) > max_sliding_window_size: # Check to see if it exceeds the max_sliding_window_size
+            search_buffer = search_buffer[1:] # Remove the first element from the search_buffer
+
+        i += 1
+
+    return bytes(output)
+
+print(encode("SAM SAM", 1).decode(encoding))
+print(encode("supercalifragilisticexpialidocious supercalifragilisticexpialidocious", 1024).decode(encoding))
+print(encode("LZSS will take over the world!", 256).decode(encoding))
+print(encode("It even works with 😀s thanks to UTF-8", 16).decode(encoding))
+
+

The function definition is pretty simple, we can just move our text and max_sliding_window_size outside of the function and wrap our code in a function definition. Then we simply call it with some different values to test it, and that’s it!

+

The finished code can be found in lzss.py in the examples GitHub repo.

+

Lastly, there’s a few bugs in our program that we encounter with larger files. If we have some text, for example:

+
ISAM YAM SAM
+
+

When the encoder gets to the space right before the “SAM”, it will look for a space in the search buffer which it finds. Then it will search for a space and an “S” (“ S”) which it doesn’t find, so it continues and starts looking for an “A”. The issue here is that it skips looking for an “S” and continues to encode the “AM” not the “SAM”.

+

In some rare circumstances the code may generate a reference with a length that is larger than its offset which will result in an error.

+

To fix this, we’ll need to rewrite the logic in our encoder a little bit.

+
for char in text_bytes:
+	index = elements_in_array(check_characters, search_buffer) # The index where the characters appears in our search buffer
+
+	if elements_in_array(check_characters + [char], search_buffer) == -1 or i == len(text_bytes) - 1:
+		if i == len(text_bytes) - 1 and elements_in_array(check_characters + [char], search_buffer) != -1:
+			# Only if it's the last character then add the next character to the text the token is representing
+			check_characters.append(char)
+
+		if len(check_characters) > 1:
+			index = elements_in_array(check_characters, search_buffer)
+			offset = i - index - len(check_characters) # Calculate the relative offset
+			length = len(check_characters) # Set the length of the token (how many character it represents)
+
+			token = f"<{offset},{length}>" # Build our token
+
+			if len(token) > length:
+				# Length of token is greater than the length it represents, so output the characters
+				output.extend(check_characters) # Output the characters
+			else:
+				output.extend(token.encode(encoding)) # Output our token
+
+			search_buffer.extend(check_characters) # Add the characters to our search buffer
+		else:
+			output.extend(check_characters) # Output the character
+			search_buffer.extend(check_characters) # Add the characters to our search buffer
+
+		check_characters = []
+
+	check_characters.append(char)
+
+	if len(search_buffer) > max_sliding_window_size: # Check to see if it exceeds the max_sliding_window_size
+		search_buffer = search_buffer[1:] # Remove the first element from the search_buffer
+
+	i += 1
+
+

To fix the first issue we add the current char to check_characters only at the end and check to see if check_characters + [char] is found. If not we know that check_characters is found so we can continue as normal, and check_characters gets cleared before char is added onto check_characters for the next iteration. We also implement a check on the last iteration to add the current char to check_characters as otherwise our logic wouldn’t be run on the last character and a token wouldn’t be created.

+

To resolve the other problem we simply have to move the search_buffer.append(char) calls up into our logic and change them to search_buffer.extend(check_characters). This way we only update our search buffer when we’ve already tried to find a token.

+

Implementing a Decoder

+

What’s the use of encoding something some text if we can’t decode it? For that we’ll need to build ourselves a decoder.

+

Luckily for us, building a decoder is actually much simpler than an encoder because all it needs to know how to do is convert a token (“<5,2>”) into the literal text it represents. The decoder doesn’t care about search buffers, sliding windows, or token lengths, it has only one job.

+

So, let’s get started. We’re going to decode character-by-character just like our encoder so we’ll start with our main loop inside of a function. We’ll also need to encode and decode the strings so we’ll keep the encoding = "utf-8".

+
encoding = "utf-8"
+
+def decode(text):
+
+    text_bytes = text.encode(encoding) # The text encoded as bytes
+    output = [] # The output characters
+
+    for char in text_bytes:
+        output.append(char) # Add the character to our output
+
+    return bytes(output)
+
+print(decode("supercalifragilisticexpialidocious <35,34>").decode(encoding))
+
+

Here we’re setting up the structure for the rest of our decoder by setting up our main loop and declaring everything within a neat self-contained function.

+

Identifying Tokens

+

The next step is to start doing some actual decoding. The goal of our decoder is to convert a token into text, so we need to first identify a token and extract our offset and length before we can convert it into text.

+

Notice the various components of a token that need to be identified and extracted so we can find the text they represent

+

Let’s make a small change so we can identify the start and end of a token.

+
for char in text_bytes:
+        if char == "<".encode(encoding)[0]:
+            print("Found opening of a token")
+        elif char == ">".encode(encoding)[0]:
+            print("Found closing of a token")
+
+        output.append(char) # Add the character to our output
+
+    return bytes(output)
+
+

Because we’re going character-by-character we can simply check to see if the character is a token opening character or closing character to tell if we’re inside a token. Let’s add some more code to track the numbers between the comma, our seperator.

+
inside_token = False
+scanning_offset = True
+
+length = [] # Length number encoded as bytes
+offset = [] # Offset number encoded as bytes
+
+for char in text_bytes:
+	if char == "<".encode(encoding)[0]:
+		inside_token = True # We're now inside a token
+		scanning_offset = True # We're now looking for the length number
+	elif char == ",".encode(encoding)[0]:
+		scanning_offset = False
+	elif char == ">".encode(encoding)[0] and inside_token:
+		inside_token = False # We're no longer inside a token
+
+		# Convert length and offsets to an integer
+		length_num = int(bytes(length).decode(encoding))
+		offset_num = int(bytes(offset).decode(encoding))
+
+		print(f"Found token with length: {length_num}, offset: {offset_num}")
+
+		# Reset length and offset
+		length, offset = [], []
+	elif inside_token:
+		if scanning_offset:
+			offset.append(char)
+		else:
+			length.append(char)
+
+	output.append(char) # Add the character to our output
+
+

Output:

+
Found token with length: 34, offset: 35
+supercalifragilisticexpialidocious <35,34>
+
+

We now have a bunch of if statements that give our loop some more control flow. Let’s go over the changes.

+

First off we have four new variables outside of the loop:

+
    +
  • +inside_token - Tracks whether or not we’re inside a token
  • +
  • +scanning_offset - Tracks whether we’re currently scanning for the offset number or the length number (1st or 2nd number in the token)
  • +
  • +length - Used to store the bytes (or characters) that represent the token’s length
  • +
  • +offset- Used to store the bytes (or characters) that represent the token’s offset
  • +
+

Inside of the loop, we check if the character is a <, ,, or a > and modify the variables accordingly to track where we are. If the character isn’t any of those and we’re inside a token then we want to add the character to either the offset or length because that means the character is an offset or length.

+

Lastly, if the character is a >, that means we’re exiting the token, so let’s convert our length and offset into a Python int. We have to do this because they’re currently represented as a list of bytes, so we need to convert those bytes into a Python string and convert that string into an int. Then we finally print that we’ve found a token.

+

Translating Tokens

+

Now we have one last step left: translating tokens into the text they represent. Thanks to Python list slicing this is quite simple.

+
for char in text_bytes:
+	if char == "<".encode(encoding)[0]:
+		inside_token = True # We're now inside a token
+		scanning_offset = True # We're now looking for the length number
+		token_start = i
+	elif char == ",".encode(encoding)[0]:
+		scanning_offset = False
+	elif char == ">".encode(encoding)[0] and inside_token:
+		inside_token = False # We're no longer inside a token
+
+		# Convert length and offsets to an integer
+		length_num = int(bytes(length).decode(encoding))
+		offset_num = int(bytes(offset).decode(encoding))
+
+		# Get text that the token represents
+		referenced_text = output[-offset_num:][:length_num]
+
+		output.extend(referenced_text) # referenced_text is a list of bytes so we use extend to add each one to output
+
+		# Reset length and offset
+		length, offset = [], []
+	elif inside_token:
+		if scanning_offset:
+			offset.append(char)
+		else:
+			length.append(char)
+	else:
+		output.append(char) # Add the character to our output
+
+
+return bytes(output)
+
+

Output:

+
supercalifragilisticexpialidocious supercalifragilisticexpialidocious
+
+

In order to calculate the piece of text that a token is referencing we can simply use our offset and length to find the text from the current output. We use a negative slice to grab all the characters backwards from offset_num and grab up to length_num elements. This results in a referenced_text that represents the token references. Finally we add the referenced_text to our output and we’re finished.

+

Lastly, we’ll only want to add a character to the output if we’re not in a token so we add an else to the end of our logic which only runs if we’re not in a token.

+

And that’s it! We now have a LZSS decoder, and by extension, an LZ77 decoder as decoders don’t need to worry about outputting a token only if it’s greater than the referenced text.

+

Implementation Conclusion

+

We’ve gone through step-by-step building an encoder and decoder and learned the purpose of each component. Let’s do some basic benchmarks to see how well it works.

+
if __name__ == "__main__":
+    encoded = encode(text).decode(encoding)
+    decoded = decode(encoded).decode(encoding)
+
+    print(f"Original: {len(text)}, Encoded: {len(encoded)}, Decoded: {len(decoded)}")
+    print(f"Lossless: {text == decoded}")
+    print(f"Compressed size: {(len(encoded)/len(text)) * 100}%")
+
+

Using the text as Green Eggs and Ham by Doctor Seuss, we see the output:

+
Original: 3463 bytes, Encoded: 1912 bytes, Decoded: 3463 bytes
+Lossless: True
+Compressed size: 55.21224371931851%
+
+

LZSS just reduced the file size by 45%, not bad!

+

One thing to keep in mind is that when we refer to a “character”, we really mean a “byte”. Our loop runs byte-by-byte, not character-by-character. This distinction is minor but significant. In the world of encodings, not every character is a single byte. For example in utf-8, any english letter or symbol is a single byte, but more complicated characters like arabic, mandarin, or emoji characters require multiple bytes despite being a single “character”.

+
    +
  • 4 bytes - 😀
  • +
  • 1 byte - H
  • +
  • 3 bytes - 话
  • +
  • 6 bytes - يَّ
  • +
+

If you’re interested in learning more about how bytes work, check out the Wikipedia articles on Bytes and Unicode or our reference page on bytes.

+
+ +
+
+
+
+ + diff --git a/docs/algorithms/overview/index.html b/docs/algorithms/overview/index.html new file mode 100644 index 0000000..6f9bcc5 --- /dev/null +++ b/docs/algorithms/overview/index.html @@ -0,0 +1,131 @@ + + + + + + +Overview of Algorithms - The Hitchhiker's Guide to Compression + + +Overview of Algorithms | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+
+ + +
+
+

Overview of Algorithms

+

The following is intended to be a comprehensive list of lossless compression algorithms (in no particular order), however if you feel like an algorithm is missing, please let us know.

+ +

For a more complete list, check out these Wikipedia pages on lossless algorithms and lossy algorithms.

+
+

Table of contents

+ +
+ +
+
+
+ + diff --git a/docs/assets/CompressionRatio.svg b/docs/assets/CompressionRatio.svg new file mode 100644 index 0000000..a249e4a --- /dev/null +++ b/docs/assets/CompressionRatio.svg @@ -0,0 +1,81 @@ + +{\displaystyle {\rm {Compression\;Ratio}}={\frac {\rm {Uncompressed\;Size}}{\rm {Compressed\;Size}}}} + + + \ No newline at end of file diff --git a/docs/assets/LZ1.png b/docs/assets/LZ1.png new file mode 100644 index 0000000..34e4a9b Binary files /dev/null and b/docs/assets/LZ1.png differ diff --git a/docs/assets/LZ2.png b/docs/assets/LZ2.png new file mode 100644 index 0000000..8a22433 Binary files /dev/null and b/docs/assets/LZ2.png differ diff --git a/docs/assets/LZ3.png b/docs/assets/LZ3.png new file mode 100644 index 0000000..04b008a Binary files /dev/null and b/docs/assets/LZ3.png differ diff --git a/docs/assets/LZ4.png b/docs/assets/LZ4.png new file mode 100644 index 0000000..23a886c Binary files /dev/null and b/docs/assets/LZ4.png differ diff --git a/docs/assets/MarkovChains.png b/docs/assets/MarkovChains.png new file mode 100644 index 0000000..a9b3f8e Binary files /dev/null and b/docs/assets/MarkovChains.png differ diff --git a/docs/assets/arithmetic1.png b/docs/assets/arithmetic1.png new file mode 100644 index 0000000..9491ace Binary files /dev/null and b/docs/assets/arithmetic1.png differ diff --git a/docs/assets/arithmetic2.png b/docs/assets/arithmetic2.png new file mode 100644 index 0000000..d8375db Binary files /dev/null and b/docs/assets/arithmetic2.png differ diff --git a/docs/assets/arithmetic3.png b/docs/assets/arithmetic3.png new file mode 100644 index 0000000..0881c1c Binary files /dev/null and b/docs/assets/arithmetic3.png differ diff --git a/docs/assets/arithmetic4.png b/docs/assets/arithmetic4.png new file mode 100644 index 0000000..b90429a Binary files /dev/null and b/docs/assets/arithmetic4.png differ diff --git a/docs/assets/arithmetic5.png b/docs/assets/arithmetic5.png new file mode 100644 index 0000000..437f69f Binary files /dev/null and b/docs/assets/arithmetic5.png differ diff --git a/docs/assets/arithmetic6.png b/docs/assets/arithmetic6.png new file mode 100644 index 0000000..ce1ff03 Binary files /dev/null and b/docs/assets/arithmetic6.png differ diff --git a/docs/assets/css/interactive.css b/docs/assets/css/interactive.css new file mode 100644 index 0000000..85429ba --- /dev/null +++ b/docs/assets/css/interactive.css @@ -0,0 +1,28 @@ +.button-success, +.button-error, +.button-warning, +.button-secondary { + color: white; + border-radius: 4px; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); +} + +.button-success { + background: rgb(28, 184, 65); + /* this is a green */ +} + +.button-error { + background: rgb(202, 60, 60); + /* this is a maroon */ +} + +.button-warning { + background: rgb(223, 117, 20); + /* this is an orange */ +} + +.button-secondary { + background: rgb(66, 184, 221); + /* this is a light blue */ +} diff --git a/docs/assets/css/just-the-docs-dark.css b/docs/assets/css/just-the-docs-dark.css new file mode 100644 index 0000000..4cacb0f --- /dev/null +++ b/docs/assets/css/just-the-docs-dark.css @@ -0,0 +1,1570 @@ +@charset "UTF-8"; +/*! normalize.scss v0.1.0 | MIT License | based on git.io/normalize */ +/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ +html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } + +/** Remove default margin. */ +body { margin: 0; } + +/* HTML5 display definitions ========================================================================== */ +/** Correct `block` display not defined for any HTML5 element in IE 8/9. Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. Correct `block` display not defined for `main` in IE 11. */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } + +/** 1. Correct `inline-block` display not defined in IE 8/9. 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ +audio, canvas, progress, video { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } + +/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ +audio:not([controls]) { display: none; height: 0; } + +/** Address `[hidden]` styling not present in IE 8/9/10. Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. */ +[hidden], template { display: none; } + +/* Links ========================================================================== */ +/** Remove the gray background color from active links in IE 10. */ +a { background-color: transparent; } + +/** Improve readability when focused and also mouse hovered in all browsers. */ +a:active, a:hover { outline: 0; } + +/* Text-level semantics ========================================================================== */ +/** Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ +abbr[title] { border-bottom: 1px dotted; } + +/** Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ +b, strong { font-weight: bold; } + +/** Address styling not present in Safari and Chrome. */ +dfn { font-style: italic; } + +/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari, and Chrome. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +/** Address styling not present in IE 8/9. */ +mark { background: #ff0; color: #000; } + +/** Address inconsistent and variable font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { top: -0.5em; } + +sub { bottom: -0.25em; } + +/* Embedded content ========================================================================== */ +/** Remove border when inside `a` element in IE 8/9/10. */ +img { border: 0; } + +/** Correct overflow not hidden in IE 9/10/11. */ +svg:not(:root) { overflow: hidden; } + +/* Grouping content ========================================================================== */ +/** Address margin not present in IE 8/9 and Safari. */ +figure { margin: 1em 40px; } + +/** Address differences between Firefox and other browsers. */ +hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } + +/** Contain overflow in all browsers. */ +pre { overflow: auto; } + +/** Address odd `em`-unit font size rendering in all browsers. */ +code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; } + +/* Forms ========================================================================== */ +/** Known limitation: by default, Chrome and Safari on OS X allow very limited styling of `select`, unless a `border` property is set. */ +/** 1. Correct color not being inherited. Known issue: affects color of disabled elements. 2. Correct font properties not being inherited. 3. Address margins set differently in Firefox 4+, Safari, and Chrome. */ +button, input, optgroup, select, textarea { color: inherit; /* 1 */ font: inherit; /* 2 */ margin: 0; /* 3 */ } + +/** Address `overflow` set to `hidden` in IE 8/9/10/11. */ +button { overflow: visible; } + +/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. Correct `select` style inheritance in Firefox. */ +button, select { text-transform: none; } + +/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ +button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } + +/** Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { cursor: default; } + +/** Remove inner padding and border in Firefox 4+. */ +button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } + +/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ +input { line-height: normal; } + +/** It's recommended that you don't attempt to style these elements. Firefox's implementation doesn't respect box-sizing, padding, or width. 1. Address box sizing set to `content-box` in IE 8/9/10. 2. Remove excess padding in IE 8/9/10. */ +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } + +/** Fix the cursor style for Chrome's increment/decrement buttons. For certain `font-size` values of the `input`, it causes the cursor style of the decrement button to change from `default` to `text`. */ +input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { height: auto; } + +/** 1. Address `appearance` set to `searchfield` in Safari and Chrome. 2. Address `box-sizing` set to `border-box` in Safari and Chrome (include `-moz` to future-proof). */ +input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } + +/** Remove inner padding and search cancel button in Safari and Chrome on OS X. Safari (but not Chrome) clips the cancel button when the search input has padding (and `textfield` appearance). */ +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** Define consistent border, margin, and padding. */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct `color` not being inherited in IE 8/9/10/11. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ +legend { border: 0; /* 1 */ padding: 0; /* 2 */ } + +/** Remove default vertical scrollbar in IE 8/9/10/11. */ +textarea { overflow: auto; } + +/** Don't inherit the `font-weight` (applied by a rule above). NOTE: the default cannot safely be changed in Chrome and Safari on OS X. */ +optgroup { font-weight: bold; } + +/* Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +td, th { padding: 0; } + +* { box-sizing: border-box; } + +::selection { color: #fff; background: #2c84fa; } + +html { font-size: 15px !important; scroll-behavior: smooth; } + +@media (min-width: 31.25rem) { html { font-size: 16px !important; } } + +body { font-family: -apple-system, BlinkMacSystemFont, "helvetica neue", helvetica, roboto, noto, "segoe ui", arial, sans-serif; font-size: inherit; line-height: 1.4; color: #e6e1e8; background-color: #27262b; } + +ol, ul, dl, pre, address, blockquote, table, div, hr, form, fieldset, noscript .table-wrapper { margin-top: 0; } + +h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: 1em; font-weight: 500; line-height: 1.25; color: #f5f6fa; } + +p { margin-top: 1em; margin-bottom: 1em; } + +a { color: #2c84fa; text-decoration: none; } + +a:not([class]) { text-decoration: none; background-image: linear-gradient(#44434d 0%, #44434d 100%); background-repeat: repeat-x; background-position: 0 100%; background-size: 1px 1px; } + +a:not([class]):hover { background-image: linear-gradient(rgba(44, 132, 250, 0.45) 0%, rgba(44, 132, 250, 0.45) 100%); background-size: 1px 1px; } + +code { font-family: "SFMono-Regular", Menlo, Consolas, Monospace; font-size: 0.75em; line-height: 1.4; } + +figure, pre { margin: 0; } + +li { margin: 0.25em 0; } + +img { max-width: 100%; height: auto; } + +hr { height: 1px; padding: 0; margin: 2rem 0; background-color: #44434d; border: 0; } + +.side-bar { z-index: 0; display: flex; flex-wrap: wrap; background-color: #27262b; } + +@media (min-width: 50rem) { .side-bar { flex-wrap: nowrap; position: fixed; width: 248px; height: 100%; flex-direction: column; border-right: 1px solid #44434d; align-items: flex-end; } } + +@media (min-width: 66.5rem) { .side-bar { width: calc((100% - 1064px) / 2 + 264px); min-width: 264px; } } + +@media (min-width: 50rem) { .main { position: relative; max-width: 800px; margin-left: 248px; } } + +@media (min-width: 66.5rem) { .main { margin-left: calc( (100% - 1064px) / 2 + 264px); } } + +.main-content-wrap { padding-right: 1rem; padding-left: 1rem; padding-top: 1rem; padding-bottom: 1rem; } + +@media (min-width: 50rem) { .main-content-wrap { padding-right: 2rem; padding-left: 2rem; } } + +@media (min-width: 50rem) { .main-content-wrap { padding-top: 2rem; padding-bottom: 2rem; } } + +.main-header { z-index: 0; display: none; background-color: #27262b; } + +@media (min-width: 50rem) { .main-header { display: flex; justify-content: space-between; height: 60px; background-color: #27262b; border-bottom: 1px solid #44434d; } } + +.main-header.nav-open { display: block; } + +@media (min-width: 50rem) { .main-header.nav-open { display: flex; } } + +.site-nav, .site-header, .site-footer { width: 100%; } + +@media (min-width: 66.5rem) { .site-nav, .site-header, .site-footer { width: 264px; } } + +.site-nav { display: none; } + +.site-nav.nav-open { display: block; } + +@media (min-width: 50rem) { .site-nav { display: block; padding-top: 3rem; padding-bottom: 1rem; overflow-y: auto; flex: 1 1 auto; } } + +.site-header { display: flex; min-height: 60px; align-items: center; } + +@media (min-width: 50rem) { .site-header { height: 60px; max-height: 60px; border-bottom: 1px solid #44434d; } } + +.site-title { padding-right: 1rem; padding-left: 1rem; flex-grow: 1; display: flex; height: 100%; align-items: center; padding-top: 0.75rem; padding-bottom: 0.75rem; color: #f5f6fa; font-size: 18px !important; } + +@media (min-width: 50rem) { .site-title { padding-right: 2rem; padding-left: 2rem; } } + +@media (min-width: 31.25rem) { .site-title { font-size: 24px !important; line-height: 1.25; } } + +@media (min-width: 50rem) { .site-title { padding-top: 0.5rem; padding-bottom: 0.5rem; } } + +.site-button { display: flex; height: 100%; padding: 1rem; align-items: center; } + +@media (min-width: 50rem) { .site-header .site-button { display: none; } } + +.site-title:hover { background-image: linear-gradient(-90deg, #201f23 0%, rgba(32, 31, 35, 0.8) 80%, rgba(32, 31, 35, 0) 100%); } + +.site-button:hover { background-image: linear-gradient(-90deg, #201f23 0%, rgba(32, 31, 35, 0.8) 100%); } + +body { position: relative; padding-bottom: 4rem; overflow-y: scroll; } + +@media (min-width: 50rem) { body { position: static; padding-bottom: 0; } } + +.site-footer { padding-right: 1rem; padding-left: 1rem; position: absolute; bottom: 0; left: 0; padding-top: 1rem; padding-bottom: 1rem; color: #959396; font-size: 11px !important; } + +@media (min-width: 50rem) { .site-footer { padding-right: 2rem; padding-left: 2rem; } } + +@media (min-width: 31.25rem) { .site-footer { font-size: 12px !important; } } + +@media (min-width: 50rem) { .site-footer { position: static; justify-self: end; } } + +.icon { width: 1.5rem; height: 1.5rem; color: #2c84fa; } + +.main-content { line-height: 1.6; } + +.main-content ol, .main-content ul, .main-content dl, .main-content pre, .main-content address, .main-content blockquote, .main-content .table-wrapper { margin-top: 0.5em; } + +.main-content a { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + +.main-content ul, .main-content ol { padding-left: 1.5em; } + +.main-content li .highlight { margin-top: 0.25rem; } + +.main-content ol { list-style-type: none; counter-reset: step-counter; } + +.main-content ol > li { position: relative; } + +.main-content ol > li::before { position: absolute; top: 0.2em; left: -1.6em; color: #959396; content: counter(step-counter); counter-increment: step-counter; font-size: 12px !important; } + +@media (min-width: 31.25rem) { .main-content ol > li::before { font-size: 14px !important; } } + +@media (min-width: 31.25rem) { .main-content ol > li::before { top: 0.11em; } } + +.main-content ol > li ol { counter-reset: sub-counter; } + +.main-content ol > li ol li::before { content: counter(sub-counter, lower-alpha); counter-increment: sub-counter; } + +.main-content ul { list-style: none; } + +.main-content ul > li::before { position: absolute; margin-left: -1.4em; color: #959396; content: "•"; } + +.main-content .task-list { padding-left: 0; } + +.main-content .task-list-item { display: flex; align-items: center; } + +.main-content .task-list-item::before { content: ""; } + +.main-content .task-list-item-checkbox { margin-right: 0.6em; } + +.main-content hr + * { margin-top: 0; } + +.main-content h1:first-of-type { margin-top: 0.5em; } + +.main-content dl { display: grid; grid-template: auto / 10em 1fr; } + +.main-content dt, .main-content dd { margin: 0.25em 0; } + +.main-content dt { grid-column: 1; font-weight: 500; text-align: right; } + +.main-content dt::after { content: ":"; } + +.main-content dd { grid-column: 2; margin-bottom: 0; margin-left: 1em; } + +.main-content .anchor-heading { position: absolute; right: -1rem; width: 1.5rem; height: 100%; padding-right: 0.25rem; padding-left: 0.25rem; overflow: visible; } + +@media (min-width: 50rem) { .main-content .anchor-heading { right: auto; left: -1.5rem; } } + +.main-content .anchor-heading svg { display: inline-block; width: 100%; height: 100%; color: #2c84fa; visibility: hidden; } + +.main-content .anchor-heading:hover svg, .main-content h1:hover > .anchor-heading svg, .main-content h2:hover > .anchor-heading svg, .main-content h3:hover > .anchor-heading svg, .main-content h4:hover > .anchor-heading svg, .main-content h5:hover > .anchor-heading svg, .main-content h6:hover > .anchor-heading svg { visibility: visible; } + +.main-content summary { cursor: pointer; } + +.main-content h1, .main-content h2, .main-content h3, .main-content h4, .main-content h5, .main-content h6 { position: relative; margin-top: 1.5em; margin-bottom: 0.25em; } + +.main-content h1:first-child, .main-content h2:first-child, .main-content h3:first-child, .main-content h4:first-child, .main-content h5:first-child, .main-content h6:first-child { margin-top: 0.5rem; } + +.main-content h1 + table, .main-content h1 + .table-wrapper, .main-content h1 + .code-example, .main-content h1 + .highlighter-rouge, .main-content h2 + table, .main-content h2 + .table-wrapper, .main-content h2 + .code-example, .main-content h2 + .highlighter-rouge, .main-content h3 + table, .main-content h3 + .table-wrapper, .main-content h3 + .code-example, .main-content h3 + .highlighter-rouge, .main-content h4 + table, .main-content h4 + .table-wrapper, .main-content h4 + .code-example, .main-content h4 + .highlighter-rouge, .main-content h5 + table, .main-content h5 + .table-wrapper, .main-content h5 + .code-example, .main-content h5 + .highlighter-rouge, .main-content h6 + table, .main-content h6 + .table-wrapper, .main-content h6 + .code-example, .main-content h6 + .highlighter-rouge { margin-top: 1em; } + +.main-content h1 + p, .main-content h2 + p, .main-content h3 + p, .main-content h4 + p, .main-content h5 + p, .main-content h6 + p { margin-top: 0; } + +.nav-list { padding: 0; margin-top: 0; margin-bottom: 0; list-style: none; } + +.nav-list .nav-list-item { font-size: 15px !important; position: relative; margin: 0; } + +@media (min-width: 31.25rem) { .nav-list .nav-list-item { font-size: 16px !important; } } + +@media (min-width: 50rem) { .nav-list .nav-list-item { font-size: 12px !important; } } + +@media (min-width: 50rem) and (min-width: 31.25rem) { .nav-list .nav-list-item { font-size: 14px !important; } } + +.nav-list .nav-list-item .nav-list-link { display: block; min-height: 3rem; padding-top: 0.25rem; padding-bottom: 0.25rem; line-height: 2.5rem; padding-right: 3rem; padding-left: 1rem; } + +@media (min-width: 50rem) { .nav-list .nav-list-item .nav-list-link { min-height: 2rem; line-height: 1.5rem; padding-right: 2rem; padding-left: 2rem; } } + +.nav-list .nav-list-item .nav-list-link.active { font-weight: 600; text-decoration: none; } + +.nav-list .nav-list-item .nav-list-link:hover, .nav-list .nav-list-item .nav-list-link.active { background-image: linear-gradient(-90deg, #201f23 0%, rgba(32, 31, 35, 0.8) 80%, rgba(32, 31, 35, 0) 100%); } + +.nav-list .nav-list-item .nav-list-expander { position: absolute; right: 0; width: 3rem; height: 3rem; padding-top: 0.75rem; padding-right: 0.75rem; padding-bottom: 0.75rem; padding-left: 0.75rem; color: #2c84fa; } + +@media (min-width: 50rem) { .nav-list .nav-list-item .nav-list-expander { width: 2rem; height: 2rem; padding-top: 0.5rem; padding-right: 0.5rem; padding-bottom: 0.5rem; padding-left: 0.5rem; } } + +.nav-list .nav-list-item .nav-list-expander:hover { background-image: linear-gradient(-90deg, #201f23 0%, rgba(32, 31, 35, 0.8) 100%); } + +.nav-list .nav-list-item .nav-list-expander svg { transform: rotate(90deg); } + +.nav-list .nav-list-item > .nav-list { display: none; padding-left: 0.75rem; list-style: none; } + +.nav-list .nav-list-item > .nav-list .nav-list-item { position: relative; } + +.nav-list .nav-list-item > .nav-list .nav-list-item .nav-list-link { color: #959396; } + +.nav-list .nav-list-item > .nav-list .nav-list-item .nav-list-expander { color: #959396; } + +.nav-list .nav-list-item.active > .nav-list-expander svg { transform: rotate(-90deg); } + +.nav-list .nav-list-item.active > .nav-list { display: block; } + +.nav-category { padding-top: 0.5rem; padding-right: 1rem; padding-bottom: 0.5rem; padding-left: 1rem; font-weight: 600; text-align: end; text-transform: uppercase; border-bottom: 1px solid #44434d; font-size: 11px !important; } + +@media (min-width: 31.25rem) { .nav-category { font-size: 12px !important; } } + +@media (min-width: 50rem) { .nav-category { padding-right: 2rem; padding-left: 2rem; margin-top: 1rem; text-align: start; } .nav-category:first-child { margin-top: 0; } } + +.aux-nav { height: 100%; overflow-x: auto; font-size: 11px !important; } + +@media (min-width: 31.25rem) { .aux-nav { font-size: 12px !important; } } + +.aux-nav .aux-nav-list { display: flex; height: 100%; padding: 0; margin: 0; list-style: none; } + +.aux-nav .aux-nav-list-item { display: inline-block; height: 100%; padding: 0; margin: 0; } + +@media (min-width: 50rem) { .aux-nav { padding-right: 1rem; } } + +@media (min-width: 50rem) { .breadcrumb-nav { margin-top: -1rem; } } + +.breadcrumb-nav-list { padding-left: 0; margin-bottom: 0.75rem; list-style: none; } + +.breadcrumb-nav-list-item { display: table-cell; font-size: 11px !important; } + +@media (min-width: 31.25rem) { .breadcrumb-nav-list-item { font-size: 12px !important; } } + +.breadcrumb-nav-list-item::before { display: none; } + +.breadcrumb-nav-list-item::after { display: inline-block; margin-right: 0.5rem; margin-left: 0.5rem; color: #959396; content: "/"; } + +.breadcrumb-nav-list-item:last-child::after { content: ""; } + +h1, .text-alpha { font-size: 32px !important; line-height: 1.25; font-weight: 300; } + +@media (min-width: 31.25rem) { h1, .text-alpha { font-size: 36px !important; } } + +h2, .text-beta { font-size: 18px !important; } + +@media (min-width: 31.25rem) { h2, .text-beta { font-size: 24px !important; line-height: 1.25; } } + +h3, .text-gamma { font-size: 16px !important; } + +@media (min-width: 31.25rem) { h3, .text-gamma { font-size: 18px !important; } } + +h4, .text-delta { font-size: 11px !important; font-weight: 400; text-transform: uppercase; letter-spacing: 0.1em; } + +@media (min-width: 31.25rem) { h4, .text-delta { font-size: 12px !important; } } + +h5, .text-epsilon { font-size: 12px !important; color: #44434d; } + +@media (min-width: 31.25rem) { h5, .text-epsilon { font-size: 14px !important; } } + +h6, .text-zeta { font-size: 11px !important; color: #44434d; } + +@media (min-width: 31.25rem) { h6, .text-zeta { font-size: 12px !important; } } + +.text-small { font-size: 11px !important; } + +@media (min-width: 31.25rem) { .text-small { font-size: 12px !important; } } + +.text-mono { font-family: "SFMono-Regular", Menlo, Consolas, Monospace !important; } + +.text-left { text-align: left !important; } + +.text-center { text-align: center !important; } + +.text-right { text-align: right !important; } + +.label, .label-blue { display: inline-block; padding-top: 0.16em; padding-right: 0.56em; padding-bottom: 0.16em; padding-left: 0.56em; margin-right: 0.5rem; margin-left: 0.5rem; color: #fff; text-transform: uppercase; vertical-align: middle; background-color: #2869e6; font-size: 11px !important; border-radius: 12px; } + +@media (min-width: 31.25rem) { .label, .label-blue { font-size: 12px !important; } } + +.label-green { background-color: #009c7b; } + +.label-purple { background-color: #5e41d0; } + +.label-red { background-color: #e94c4c; } + +.label-yellow { color: #44434d; background-color: #f7d12e; } + +.btn { display: inline-block; box-sizing: border-box; padding-top: 0.3em; padding-right: 1em; padding-bottom: 0.3em; padding-left: 1em; margin: 0; font-family: inherit; font-size: inherit; font-weight: 500; line-height: 1.5; color: #2c84fa; text-decoration: none; vertical-align: baseline; cursor: pointer; background-color: #302d36; border-width: 0; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); appearance: none; } + +.btn:focus { text-decoration: none; outline: none; box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.25); } + +.btn:focus:hover, .btn.selected:focus { box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.25); } + +.btn:hover, .btn.zeroclipboard-is-hover { color: #227efa; } + +.btn:hover, .btn:active, .btn.zeroclipboard-is-hover, .btn.zeroclipboard-is-active { text-decoration: none; background-color: #2e2b33; } + +.btn:active, .btn.selected, .btn.zeroclipboard-is-active { background-color: #29262e; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn.selected:hover { background-color: #cfcfcf; } + +.btn:disabled, .btn:disabled:hover, .btn.disabled, .btn.disabled:hover { color: rgba(102, 102, 102, 0.5); cursor: default; background-color: rgba(229, 229, 229, 0.5); background-image: none; box-shadow: none; } + +.btn-outline { color: #2c84fa; background: transparent; box-shadow: inset 0 0 0 2px #e6e1e8; } + +.btn-outline:hover, .btn-outline:active, .btn-outline.zeroclipboard-is-hover, .btn-outline.zeroclipboard-is-active { color: #1878fa; text-decoration: none; background-color: transparent; box-shadow: inset 0 0 0 3px #e6e1e8; } + +.btn-outline:focus { text-decoration: none; outline: none; box-shadow: inset 0 0 0 2px #5c5962, 0 0 0 3px rgba(0, 0, 255, 0.25); } + +.btn-outline:focus:hover, .btn-outline.selected:focus { box-shadow: inset 0 0 0 2px #5c5962; } + +.btn-primary { color: #fff; background-color: #2448a7; background-image: linear-gradient(#2b55c4, #2448a7); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); } + +.btn-primary:hover, .btn-primary.zeroclipboard-is-hover { color: #fff; background-color: #22459e; background-image: linear-gradient(#2850b7, #22459e); } + +.btn-primary:active, .btn-primary.selected, .btn-primary.zeroclipboard-is-active { background-color: #21439a; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn-primary.selected:hover { background-color: #1d3a85; } + +.btn-purple { color: #fff; background-color: #5739ce; background-image: linear-gradient(#6f55d5, #5739ce); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); } + +.btn-purple:hover, .btn-purple.zeroclipboard-is-hover { color: #fff; background-color: #5132cb; background-image: linear-gradient(#6549d2, #5132cb); } + +.btn-purple:active, .btn-purple.selected, .btn-purple.zeroclipboard-is-active { background-color: #4f31c6; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn-purple.selected:hover { background-color: #472cb2; } + +.btn-blue { color: #fff; background-color: #227efa; background-image: linear-gradient(#4593fb, #227efa); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); } + +.btn-blue:hover, .btn-blue.zeroclipboard-is-hover { color: #fff; background-color: #1878fa; background-image: linear-gradient(#368afa, #1878fa); } + +.btn-blue:active, .btn-blue.selected, .btn-blue.zeroclipboard-is-active { background-color: #1375f9; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn-blue.selected:hover { background-color: #0669ed; } + +.btn-green { color: #fff; background-color: #10ac7d; background-image: linear-gradient(#13cc95, #10ac7d); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); } + +.btn-green:hover, .btn-green.zeroclipboard-is-hover { color: #fff; background-color: #0fa276; background-image: linear-gradient(#12be8b, #0fa276); } + +.btn-green:active, .btn-green.selected, .btn-green.zeroclipboard-is-active { background-color: #0f9e73; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn-green.selected:hover { background-color: #0d8662; } + +.search { position: relative; z-index: 2; flex-grow: 1; height: 4rem; padding: 0.5rem; transition: padding linear 200ms; } + +@media (min-width: 50rem) { .search { position: relative !important; width: auto !important; height: 100% !important; padding: 0; transition: none; } } + +.search-input-wrap { position: relative; z-index: 1; height: 3rem; overflow: hidden; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); transition: height linear 200ms; } + +@media (min-width: 50rem) { .search-input-wrap { position: absolute; width: 100%; max-width: 536px; height: 100% !important; border-radius: 0; box-shadow: none; transition: width ease 400ms; } } + +.search-input { position: absolute; width: 100%; height: 100%; padding-top: 0.5rem; padding-right: 1rem; padding-bottom: 0.5rem; padding-left: 2.5rem; font-size: 16px; background-color: #302d36; border-top: 0; border-right: 0; border-bottom: 0; border-left: 0; border-radius: 0; } + +@media (min-width: 50rem) { .search-input { padding-top: 1rem; padding-bottom: 1rem; padding-left: 3.5rem; font-size: 14px; background-color: #27262b; transition: padding-left linear 200ms; } } + +.search-input:focus { outline: 0; } + +.search-input:focus + .search-label .search-icon { color: #2c84fa; } + +.search-label { position: absolute; display: flex; height: 100%; padding-left: 1rem; } + +@media (min-width: 50rem) { .search-label { padding-left: 2rem; transition: padding-left linear 200ms; } } + +.search-label .search-icon { width: 1.2rem; height: 1.2rem; align-self: center; color: #959396; } + +.search-results { position: absolute; left: 0; display: none; width: 100%; max-height: calc(100% - 4rem); overflow-y: auto; background-color: #302d36; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); } + +@media (min-width: 50rem) { .search-results { top: 100%; width: 536px; max-height: calc(100vh - 200%) !important; } } + +.search-results-list { padding-left: 0; margin-bottom: 0.25rem; list-style: none; font-size: 15px !important; } + +@media (min-width: 31.25rem) { .search-results-list { font-size: 16px !important; } } + +@media (min-width: 50rem) { .search-results-list { font-size: 12px !important; } } + +@media (min-width: 50rem) and (min-width: 31.25rem) { .search-results-list { font-size: 14px !important; } } + +.search-results-list-item { padding: 0; margin: 0; } + +.search-result { display: block; padding-top: 0.25rem; padding-right: 0.75rem; padding-bottom: 0.25rem; padding-left: 0.75rem; } + +.search-result:hover, .search-result.active { background-color: #201f23; } + +.search-result-title { display: block; padding-top: 0.5rem; padding-bottom: 0.5rem; } + +@media (min-width: 31.25rem) { .search-result-title { display: inline-block; width: 40%; padding-right: 0.5rem; vertical-align: top; } } + +.search-result-doc { display: flex; align-items: center; word-wrap: break-word; } + +.search-result-doc.search-result-doc-parent { opacity: 0.5; font-size: 12px !important; } + +@media (min-width: 31.25rem) { .search-result-doc.search-result-doc-parent { font-size: 14px !important; } } + +@media (min-width: 50rem) { .search-result-doc.search-result-doc-parent { font-size: 11px !important; } } + +@media (min-width: 50rem) and (min-width: 31.25rem) { .search-result-doc.search-result-doc-parent { font-size: 12px !important; } } + +.search-result-doc .search-result-icon { width: 1rem; height: 1rem; margin-right: 0.5rem; color: #2c84fa; flex-shrink: 0; } + +.search-result-doc .search-result-doc-title { overflow: auto; } + +.search-result-section { margin-left: 1.5rem; word-wrap: break-word; } + +.search-result-rel-url { display: block; margin-left: 1.5rem; overflow: hidden; color: #959396; text-overflow: ellipsis; white-space: nowrap; font-size: 9px !important; } + +@media (min-width: 31.25rem) { .search-result-rel-url { font-size: 10px !important; } } + +.search-result-previews { display: block; padding-top: 0.5rem; padding-bottom: 0.5rem; padding-left: 1rem; margin-left: 0.5rem; color: #959396; word-wrap: break-word; border-left: 1px solid; border-left-color: #44434d; font-size: 11px !important; } + +@media (min-width: 31.25rem) { .search-result-previews { font-size: 12px !important; } } + +@media (min-width: 31.25rem) { .search-result-previews { display: inline-block; width: 60%; padding-left: 0.5rem; margin-left: 0; vertical-align: top; } } + +.search-result-preview + .search-result-preview { margin-top: 0.25rem; } + +.search-result-highlight { font-weight: bold; } + +.search-no-result { padding-top: 0.5rem; padding-right: 0.75rem; padding-bottom: 0.5rem; padding-left: 0.75rem; font-size: 12px !important; } + +@media (min-width: 31.25rem) { .search-no-result { font-size: 14px !important; } } + +.search-button { position: fixed; right: 1rem; bottom: 1rem; display: flex; width: 3.5rem; height: 3.5rem; background-color: #302d36; border: 1px solid rgba(44, 132, 250, 0.3); border-radius: 1.75rem; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); align-items: center; justify-content: center; } + +.search-overlay { position: fixed; top: 0; left: 0; z-index: 1; width: 0; height: 0; background-color: rgba(0, 0, 0, 0.3); opacity: 0; transition: opacity ease 400ms, width 0s 400ms, height 0s 400ms; } + +.search-active .search { position: fixed; top: 0; left: 0; width: 100%; height: 100%; padding: 0; } + +.search-active .search-input-wrap { height: 4rem; border-radius: 0; } + +@media (min-width: 50rem) { .search-active .search-input-wrap { width: 536px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); } } + +.search-active .search-input { background-color: #302d36; } + +@media (min-width: 50rem) { .search-active .search-input { padding-left: 2.75rem; } } + +@media (min-width: 50rem) { .search-active .search-label { padding-left: 1.25rem; } } + +.search-active .search-results { display: block; } + +.search-active .search-overlay { width: 100%; height: 100%; opacity: 1; transition: opacity ease 400ms, width 0s, height 0s; } + +@media (min-width: 50rem) { .search-active .main { position: fixed; right: 0; left: 0; } } + +.search-active .main-header { padding-top: 4rem; } + +@media (min-width: 50rem) { .search-active .main-header { padding-top: 0; } } + +.table-wrapper { display: block; width: 100%; max-width: 100%; margin-bottom: 1.5rem; overflow-x: auto; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); } + +table { display: table; min-width: 100%; border-collapse: separate; } + +th, td { font-size: 12px !important; min-width: 120px; padding-top: 0.5rem; padding-right: 0.75rem; padding-bottom: 0.5rem; padding-left: 0.75rem; background-color: #302d36; border-bottom: 1px solid rgba(68, 67, 77, 0.5); border-left: 1px solid #44434d; } + +@media (min-width: 31.25rem) { th, td { font-size: 14px !important; } } + +th:first-of-type, td:first-of-type { border-left: 0; } + +tbody tr:last-of-type th, tbody tr:last-of-type td { border-bottom: 0; } + +tbody tr:last-of-type td { padding-bottom: 0.75rem; } + +thead th { border-bottom: 1px solid #44434d; } + +code { padding: 0.2em 0.15em; font-weight: 400; background-color: #302d36; border: 1px solid #44434d; border-radius: 4px; } + +pre.highlight, figure.highlight { padding: 0.75rem; margin-top: 0; margin-bottom: 0; background-color: #302d36; border-radius: 4px; -webkit-overflow-scrolling: touch; } + +pre.highlight code, figure.highlight code { padding: 0; border: 0; } + +.highlighter-rouge { margin-bottom: 0.75rem; } + +.highlight .c { color: #586e75; } + +.highlight .err { color: #93a1a1; } + +.highlight .g { color: #93a1a1; } + +.highlight .k { color: #859900; } + +.highlight .l { color: #93a1a1; } + +.highlight .n { color: #93a1a1; } + +.highlight .o { color: #859900; } + +.highlight .x { color: #cb4b16; } + +.highlight .p { color: #93a1a1; } + +.highlight .cm { color: #586e75; } + +.highlight .cp { color: #859900; } + +.highlight .c1 { color: #586e75; } + +.highlight .cs { color: #859900; } + +.highlight .gd { color: #2aa198; } + +.highlight .ge { font-style: italic; color: #93a1a1; } + +.highlight .gr { color: #dc322f; } + +.highlight .gh { color: #cb4b16; } + +.highlight .gi { color: #859900; } + +.highlight .go { color: #93a1a1; } + +.highlight .gp { color: #93a1a1; } + +.highlight .gs { font-weight: bold; color: #93a1a1; } + +.highlight .gu { color: #cb4b16; } + +.highlight .gt { color: #93a1a1; } + +.highlight .kc { color: #cb4b16; } + +.highlight .kd { color: #268bd2; } + +.highlight .kn { color: #859900; } + +.highlight .kp { color: #859900; } + +.highlight .kr { color: #268bd2; } + +.highlight .kt { color: #dc322f; } + +.highlight .ld { color: #93a1a1; } + +.highlight .m { color: #2aa198; } + +.highlight .s { color: #2aa198; } + +.highlight .na { color: #555; } + +.highlight .nb { color: #b58900; } + +.highlight .nc { color: #268bd2; } + +.highlight .no { color: #cb4b16; } + +.highlight .nd { color: #268bd2; } + +.highlight .ni { color: #cb4b16; } + +.highlight .ne { color: #cb4b16; } + +.highlight .nf { color: #268bd2; } + +.highlight .nl { color: #555; } + +.highlight .nn { color: #93a1a1; } + +.highlight .nx { color: #555; } + +.highlight .py { color: #93a1a1; } + +.highlight .nt { color: #268bd2; } + +.highlight .nv { color: #268bd2; } + +.highlight .ow { color: #859900; } + +.highlight .w { color: #93a1a1; } + +.highlight .mf { color: #2aa198; } + +.highlight .mh { color: #2aa198; } + +.highlight .mi { color: #2aa198; } + +.highlight .mo { color: #2aa198; } + +.highlight .sb { color: #586e75; } + +.highlight .sc { color: #2aa198; } + +.highlight .sd { color: #93a1a1; } + +.highlight .s2 { color: #2aa198; } + +.highlight .se { color: #cb4b16; } + +.highlight .sh { color: #93a1a1; } + +.highlight .si { color: #2aa198; } + +.highlight .sx { color: #2aa198; } + +.highlight .sr { color: #dc322f; } + +.highlight .s1 { color: #2aa198; } + +.highlight .ss { color: #2aa198; } + +.highlight .bp { color: #268bd2; } + +.highlight .vc { color: #268bd2; } + +.highlight .vg { color: #268bd2; } + +.highlight .vi { color: #268bd2; } + +.highlight .il { color: #2aa198; } + +.code-example { padding: 0.75rem; margin-bottom: 0.75rem; overflow: auto; border: 1px solid #44434d; border-radius: 4px; } + +.code-example + .highlighter-rouge, .code-example + figure.highlight { position: relative; margin-top: -1rem; border-right: 1px solid #44434d; border-bottom: 1px solid #44434d; border-left: 1px solid #44434d; border-top-left-radius: 0; border-top-right-radius: 0; } + +.text-grey-dk-000 { color: #959396 !important; } + +.text-grey-dk-100 { color: #5c5962 !important; } + +.text-grey-dk-200 { color: #44434d !important; } + +.text-grey-dk-250 { color: #302d36 !important; } + +.text-grey-dk-300 { color: #27262b !important; } + +.text-grey-lt-000 { color: #f5f6fa !important; } + +.text-grey-lt-100 { color: #eeebee !important; } + +.text-grey-lt-200 { color: #ecebed !important; } + +.text-grey-lt-300 { color: #e6e1e8 !important; } + +.text-blue-000 { color: #2c84fa !important; } + +.text-blue-100 { color: #2869e6 !important; } + +.text-blue-200 { color: #264caf !important; } + +.text-blue-300 { color: #183385 !important; } + +.text-green-000 { color: #41d693 !important; } + +.text-green-100 { color: #11b584 !important; } + +.text-green-200 { color: #009c7b !important; } + +.text-green-300 { color: #026e57 !important; } + +.text-purple-000 { color: #7253ed !important; } + +.text-purple-100 { color: #5e41d0 !important; } + +.text-purple-200 { color: #4e26af !important; } + +.text-purple-300 { color: #381885 !important; } + +.text-yellow-000 { color: #ffeb82 !important; } + +.text-yellow-100 { color: #fadf50 !important; } + +.text-yellow-200 { color: #f7d12e !important; } + +.text-yellow-300 { color: #e7af06 !important; } + +.text-red-000 { color: #f77e7e !important; } + +.text-red-100 { color: #f96e65 !important; } + +.text-red-200 { color: #e94c4c !important; } + +.text-red-300 { color: #dd2e2e !important; } + +.bg-grey-dk-000 { background-color: #959396 !important; } + +.bg-grey-dk-100 { background-color: #5c5962 !important; } + +.bg-grey-dk-200 { background-color: #44434d !important; } + +.bg-grey-dk-250 { background-color: #302d36 !important; } + +.bg-grey-dk-300 { background-color: #27262b !important; } + +.bg-grey-lt-000 { background-color: #f5f6fa !important; } + +.bg-grey-lt-100 { background-color: #eeebee !important; } + +.bg-grey-lt-200 { background-color: #ecebed !important; } + +.bg-grey-lt-300 { background-color: #e6e1e8 !important; } + +.bg-blue-000 { background-color: #2c84fa !important; } + +.bg-blue-100 { background-color: #2869e6 !important; } + +.bg-blue-200 { background-color: #264caf !important; } + +.bg-blue-300 { background-color: #183385 !important; } + +.bg-green-000 { background-color: #41d693 !important; } + +.bg-green-100 { background-color: #11b584 !important; } + +.bg-green-200 { background-color: #009c7b !important; } + +.bg-green-300 { background-color: #026e57 !important; } + +.bg-purple-000 { background-color: #7253ed !important; } + +.bg-purple-100 { background-color: #5e41d0 !important; } + +.bg-purple-200 { background-color: #4e26af !important; } + +.bg-purple-300 { background-color: #381885 !important; } + +.bg-yellow-000 { background-color: #ffeb82 !important; } + +.bg-yellow-100 { background-color: #fadf50 !important; } + +.bg-yellow-200 { background-color: #f7d12e !important; } + +.bg-yellow-300 { background-color: #e7af06 !important; } + +.bg-red-000 { background-color: #f77e7e !important; } + +.bg-red-100 { background-color: #f96e65 !important; } + +.bg-red-200 { background-color: #e94c4c !important; } + +.bg-red-300 { background-color: #dd2e2e !important; } + +.d-block { display: block !important; } + +.d-flex { display: flex !important; } + +.d-inline { display: inline !important; } + +.d-inline-block { display: inline-block !important; } + +.d-none { display: none !important; } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +.float-left { float: left !important; } + +.float-right { float: right !important; } + +.flex-justify-start { justify-content: flex-start !important; } + +.flex-justify-end { justify-content: flex-end !important; } + +.flex-justify-between { justify-content: space-between !important; } + +.flex-justify-around { justify-content: space-around !important; } + +.v-align-baseline { vertical-align: baseline !important; } + +.v-align-bottom { vertical-align: bottom !important; } + +.v-align-middle { vertical-align: middle !important; } + +.v-align-text-bottom { vertical-align: text-bottom !important; } + +.v-align-text-top { vertical-align: text-top !important; } + +.v-align-top { vertical-align: top !important; } + +.fs-1 { font-size: 9px !important; } + +@media (min-width: 31.25rem) { .fs-1 { font-size: 10px !important; } } + +.fs-2 { font-size: 11px !important; } + +@media (min-width: 31.25rem) { .fs-2 { font-size: 12px !important; } } + +.fs-3 { font-size: 12px !important; } + +@media (min-width: 31.25rem) { .fs-3 { font-size: 14px !important; } } + +.fs-4 { font-size: 15px !important; } + +@media (min-width: 31.25rem) { .fs-4 { font-size: 16px !important; } } + +.fs-5 { font-size: 16px !important; } + +@media (min-width: 31.25rem) { .fs-5 { font-size: 18px !important; } } + +.fs-6 { font-size: 18px !important; } + +@media (min-width: 31.25rem) { .fs-6 { font-size: 24px !important; line-height: 1.25; } } + +.fs-7 { font-size: 24px !important; line-height: 1.25; } + +@media (min-width: 31.25rem) { .fs-7 { font-size: 32px !important; } } + +.fs-8 { font-size: 32px !important; line-height: 1.25; } + +@media (min-width: 31.25rem) { .fs-8 { font-size: 36px !important; } } + +.fs-9 { font-size: 36px !important; line-height: 1.25; } + +@media (min-width: 31.25rem) { .fs-9 { font-size: 42px !important; } } + +.fs-10 { font-size: 42px !important; line-height: 1.25; } + +@media (min-width: 31.25rem) { .fs-10 { font-size: 48px !important; } } + +.fw-300 { font-weight: 300 !important; } + +.fw-400 { font-weight: 400 !important; } + +.fw-500 { font-weight: 500 !important; } + +.fw-700 { font-weight: 700 !important; } + +.lh-0 { line-height: 0 !important; } + +.lh-default { line-height: 1.4; } + +.lh-tight { line-height: 1.25; } + +.ls-5 { letter-spacing: 0.05em !important; } + +.ls-10 { letter-spacing: 0.1em !important; } + +.ls-0 { letter-spacing: 0 !important; } + +.text-uppercase { text-transform: uppercase !important; } + +.list-style-none { padding: 0 !important; margin: 0 !important; list-style: none !important; } + +.list-style-none li::before { display: none !important; } + +.mx-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-0 { margin: 0 !important; } + +.mt-0 { margin-top: 0 !important; } + +.mr-0 { margin-right: 0 !important; } + +.mb-0 { margin-bottom: 0 !important; } + +.ml-0 { margin-left: 0 !important; } + +.mx-0 { margin-right: 0 !important; margin-left: 0 !important; } + +.my-0 { margin-top: 0 !important; margin-bottom: 0 !important; } + +.mxn-0 { margin-right: -0 !important; margin-left: -0 !important; } + +.mx-0-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-1 { margin: 0.25rem !important; } + +.mt-1 { margin-top: 0.25rem !important; } + +.mr-1 { margin-right: 0.25rem !important; } + +.mb-1 { margin-bottom: 0.25rem !important; } + +.ml-1 { margin-left: 0.25rem !important; } + +.mx-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } + +.my-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } + +.mxn-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } + +.mx-1-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-2 { margin: 0.5rem !important; } + +.mt-2 { margin-top: 0.5rem !important; } + +.mr-2 { margin-right: 0.5rem !important; } + +.mb-2 { margin-bottom: 0.5rem !important; } + +.ml-2 { margin-left: 0.5rem !important; } + +.mx-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } + +.my-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } + +.mxn-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } + +.mx-2-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-3 { margin: 0.75rem !important; } + +.mt-3 { margin-top: 0.75rem !important; } + +.mr-3 { margin-right: 0.75rem !important; } + +.mb-3 { margin-bottom: 0.75rem !important; } + +.ml-3 { margin-left: 0.75rem !important; } + +.mx-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } + +.my-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } + +.mxn-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } + +.mx-3-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-4 { margin: 1rem !important; } + +.mt-4 { margin-top: 1rem !important; } + +.mr-4 { margin-right: 1rem !important; } + +.mb-4 { margin-bottom: 1rem !important; } + +.ml-4 { margin-left: 1rem !important; } + +.mx-4 { margin-right: 1rem !important; margin-left: 1rem !important; } + +.my-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } + +.mxn-4 { margin-right: -1rem !important; margin-left: -1rem !important; } + +.mx-4-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-5 { margin: 1.5rem !important; } + +.mt-5 { margin-top: 1.5rem !important; } + +.mr-5 { margin-right: 1.5rem !important; } + +.mb-5 { margin-bottom: 1.5rem !important; } + +.ml-5 { margin-left: 1.5rem !important; } + +.mx-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } + +.my-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } + +.mxn-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } + +.mx-5-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-6 { margin: 2rem !important; } + +.mt-6 { margin-top: 2rem !important; } + +.mr-6 { margin-right: 2rem !important; } + +.mb-6 { margin-bottom: 2rem !important; } + +.ml-6 { margin-left: 2rem !important; } + +.mx-6 { margin-right: 2rem !important; margin-left: 2rem !important; } + +.my-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } + +.mxn-6 { margin-right: -2rem !important; margin-left: -2rem !important; } + +.mx-6-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-7 { margin: 2.5rem !important; } + +.mt-7 { margin-top: 2.5rem !important; } + +.mr-7 { margin-right: 2.5rem !important; } + +.mb-7 { margin-bottom: 2.5rem !important; } + +.ml-7 { margin-left: 2.5rem !important; } + +.mx-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } + +.my-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } + +.mxn-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } + +.mx-7-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-8 { margin: 3rem !important; } + +.mt-8 { margin-top: 3rem !important; } + +.mr-8 { margin-right: 3rem !important; } + +.mb-8 { margin-bottom: 3rem !important; } + +.ml-8 { margin-left: 3rem !important; } + +.mx-8 { margin-right: 3rem !important; margin-left: 3rem !important; } + +.my-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } + +.mxn-8 { margin-right: -3rem !important; margin-left: -3rem !important; } + +.mx-8-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-9 { margin: 3.5rem !important; } + +.mt-9 { margin-top: 3.5rem !important; } + +.mr-9 { margin-right: 3.5rem !important; } + +.mb-9 { margin-bottom: 3.5rem !important; } + +.ml-9 { margin-left: 3.5rem !important; } + +.mx-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } + +.my-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } + +.mxn-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } + +.mx-9-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-10 { margin: 4rem !important; } + +.mt-10 { margin-top: 4rem !important; } + +.mr-10 { margin-right: 4rem !important; } + +.mb-10 { margin-bottom: 4rem !important; } + +.ml-10 { margin-left: 4rem !important; } + +.mx-10 { margin-right: 4rem !important; margin-left: 4rem !important; } + +.my-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } + +.mxn-10 { margin-right: -4rem !important; margin-left: -4rem !important; } + +.mx-10-auto { margin-right: auto !important; margin-left: auto !important; } + +@media (min-width: 20rem) { .m-xs-0 { margin: 0 !important; } .mt-xs-0 { margin-top: 0 !important; } .mr-xs-0 { margin-right: 0 !important; } .mb-xs-0 { margin-bottom: 0 !important; } .ml-xs-0 { margin-left: 0 !important; } .mx-xs-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-xs-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-xs-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 20rem) { .m-xs-1 { margin: 0.25rem !important; } .mt-xs-1 { margin-top: 0.25rem !important; } .mr-xs-1 { margin-right: 0.25rem !important; } .mb-xs-1 { margin-bottom: 0.25rem !important; } .ml-xs-1 { margin-left: 0.25rem !important; } .mx-xs-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-xs-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-xs-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 20rem) { .m-xs-2 { margin: 0.5rem !important; } .mt-xs-2 { margin-top: 0.5rem !important; } .mr-xs-2 { margin-right: 0.5rem !important; } .mb-xs-2 { margin-bottom: 0.5rem !important; } .ml-xs-2 { margin-left: 0.5rem !important; } .mx-xs-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-xs-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-xs-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 20rem) { .m-xs-3 { margin: 0.75rem !important; } .mt-xs-3 { margin-top: 0.75rem !important; } .mr-xs-3 { margin-right: 0.75rem !important; } .mb-xs-3 { margin-bottom: 0.75rem !important; } .ml-xs-3 { margin-left: 0.75rem !important; } .mx-xs-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-xs-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-xs-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 20rem) { .m-xs-4 { margin: 1rem !important; } .mt-xs-4 { margin-top: 1rem !important; } .mr-xs-4 { margin-right: 1rem !important; } .mb-xs-4 { margin-bottom: 1rem !important; } .ml-xs-4 { margin-left: 1rem !important; } .mx-xs-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-xs-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-xs-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 20rem) { .m-xs-5 { margin: 1.5rem !important; } .mt-xs-5 { margin-top: 1.5rem !important; } .mr-xs-5 { margin-right: 1.5rem !important; } .mb-xs-5 { margin-bottom: 1.5rem !important; } .ml-xs-5 { margin-left: 1.5rem !important; } .mx-xs-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-xs-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-xs-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 20rem) { .m-xs-6 { margin: 2rem !important; } .mt-xs-6 { margin-top: 2rem !important; } .mr-xs-6 { margin-right: 2rem !important; } .mb-xs-6 { margin-bottom: 2rem !important; } .ml-xs-6 { margin-left: 2rem !important; } .mx-xs-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-xs-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-xs-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 20rem) { .m-xs-7 { margin: 2.5rem !important; } .mt-xs-7 { margin-top: 2.5rem !important; } .mr-xs-7 { margin-right: 2.5rem !important; } .mb-xs-7 { margin-bottom: 2.5rem !important; } .ml-xs-7 { margin-left: 2.5rem !important; } .mx-xs-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-xs-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-xs-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 20rem) { .m-xs-8 { margin: 3rem !important; } .mt-xs-8 { margin-top: 3rem !important; } .mr-xs-8 { margin-right: 3rem !important; } .mb-xs-8 { margin-bottom: 3rem !important; } .ml-xs-8 { margin-left: 3rem !important; } .mx-xs-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-xs-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-xs-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 20rem) { .m-xs-9 { margin: 3.5rem !important; } .mt-xs-9 { margin-top: 3.5rem !important; } .mr-xs-9 { margin-right: 3.5rem !important; } .mb-xs-9 { margin-bottom: 3.5rem !important; } .ml-xs-9 { margin-left: 3.5rem !important; } .mx-xs-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-xs-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-xs-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 20rem) { .m-xs-10 { margin: 4rem !important; } .mt-xs-10 { margin-top: 4rem !important; } .mr-xs-10 { margin-right: 4rem !important; } .mb-xs-10 { margin-bottom: 4rem !important; } .ml-xs-10 { margin-left: 4rem !important; } .mx-xs-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-xs-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-xs-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-0 { margin: 0 !important; } .mt-sm-0 { margin-top: 0 !important; } .mr-sm-0 { margin-right: 0 !important; } .mb-sm-0 { margin-bottom: 0 !important; } .ml-sm-0 { margin-left: 0 !important; } .mx-sm-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-sm-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-sm-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 31.25rem) { .m-sm-1 { margin: 0.25rem !important; } .mt-sm-1 { margin-top: 0.25rem !important; } .mr-sm-1 { margin-right: 0.25rem !important; } .mb-sm-1 { margin-bottom: 0.25rem !important; } .ml-sm-1 { margin-left: 0.25rem !important; } .mx-sm-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-sm-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-sm-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-2 { margin: 0.5rem !important; } .mt-sm-2 { margin-top: 0.5rem !important; } .mr-sm-2 { margin-right: 0.5rem !important; } .mb-sm-2 { margin-bottom: 0.5rem !important; } .ml-sm-2 { margin-left: 0.5rem !important; } .mx-sm-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-sm-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-sm-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-3 { margin: 0.75rem !important; } .mt-sm-3 { margin-top: 0.75rem !important; } .mr-sm-3 { margin-right: 0.75rem !important; } .mb-sm-3 { margin-bottom: 0.75rem !important; } .ml-sm-3 { margin-left: 0.75rem !important; } .mx-sm-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-sm-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-sm-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-4 { margin: 1rem !important; } .mt-sm-4 { margin-top: 1rem !important; } .mr-sm-4 { margin-right: 1rem !important; } .mb-sm-4 { margin-bottom: 1rem !important; } .ml-sm-4 { margin-left: 1rem !important; } .mx-sm-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-sm-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-sm-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-5 { margin: 1.5rem !important; } .mt-sm-5 { margin-top: 1.5rem !important; } .mr-sm-5 { margin-right: 1.5rem !important; } .mb-sm-5 { margin-bottom: 1.5rem !important; } .ml-sm-5 { margin-left: 1.5rem !important; } .mx-sm-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-sm-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-sm-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-6 { margin: 2rem !important; } .mt-sm-6 { margin-top: 2rem !important; } .mr-sm-6 { margin-right: 2rem !important; } .mb-sm-6 { margin-bottom: 2rem !important; } .ml-sm-6 { margin-left: 2rem !important; } .mx-sm-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-sm-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-sm-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-7 { margin: 2.5rem !important; } .mt-sm-7 { margin-top: 2.5rem !important; } .mr-sm-7 { margin-right: 2.5rem !important; } .mb-sm-7 { margin-bottom: 2.5rem !important; } .ml-sm-7 { margin-left: 2.5rem !important; } .mx-sm-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-sm-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-sm-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-8 { margin: 3rem !important; } .mt-sm-8 { margin-top: 3rem !important; } .mr-sm-8 { margin-right: 3rem !important; } .mb-sm-8 { margin-bottom: 3rem !important; } .ml-sm-8 { margin-left: 3rem !important; } .mx-sm-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-sm-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-sm-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-9 { margin: 3.5rem !important; } .mt-sm-9 { margin-top: 3.5rem !important; } .mr-sm-9 { margin-right: 3.5rem !important; } .mb-sm-9 { margin-bottom: 3.5rem !important; } .ml-sm-9 { margin-left: 3.5rem !important; } .mx-sm-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-sm-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-sm-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-10 { margin: 4rem !important; } .mt-sm-10 { margin-top: 4rem !important; } .mr-sm-10 { margin-right: 4rem !important; } .mb-sm-10 { margin-bottom: 4rem !important; } .ml-sm-10 { margin-left: 4rem !important; } .mx-sm-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-sm-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-sm-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +@media (min-width: 50rem) { .m-md-0 { margin: 0 !important; } .mt-md-0 { margin-top: 0 !important; } .mr-md-0 { margin-right: 0 !important; } .mb-md-0 { margin-bottom: 0 !important; } .ml-md-0 { margin-left: 0 !important; } .mx-md-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-md-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-md-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 50rem) { .m-md-1 { margin: 0.25rem !important; } .mt-md-1 { margin-top: 0.25rem !important; } .mr-md-1 { margin-right: 0.25rem !important; } .mb-md-1 { margin-bottom: 0.25rem !important; } .ml-md-1 { margin-left: 0.25rem !important; } .mx-md-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-md-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-md-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 50rem) { .m-md-2 { margin: 0.5rem !important; } .mt-md-2 { margin-top: 0.5rem !important; } .mr-md-2 { margin-right: 0.5rem !important; } .mb-md-2 { margin-bottom: 0.5rem !important; } .ml-md-2 { margin-left: 0.5rem !important; } .mx-md-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-md-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-md-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 50rem) { .m-md-3 { margin: 0.75rem !important; } .mt-md-3 { margin-top: 0.75rem !important; } .mr-md-3 { margin-right: 0.75rem !important; } .mb-md-3 { margin-bottom: 0.75rem !important; } .ml-md-3 { margin-left: 0.75rem !important; } .mx-md-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-md-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-md-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 50rem) { .m-md-4 { margin: 1rem !important; } .mt-md-4 { margin-top: 1rem !important; } .mr-md-4 { margin-right: 1rem !important; } .mb-md-4 { margin-bottom: 1rem !important; } .ml-md-4 { margin-left: 1rem !important; } .mx-md-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-md-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-md-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 50rem) { .m-md-5 { margin: 1.5rem !important; } .mt-md-5 { margin-top: 1.5rem !important; } .mr-md-5 { margin-right: 1.5rem !important; } .mb-md-5 { margin-bottom: 1.5rem !important; } .ml-md-5 { margin-left: 1.5rem !important; } .mx-md-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-md-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-md-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 50rem) { .m-md-6 { margin: 2rem !important; } .mt-md-6 { margin-top: 2rem !important; } .mr-md-6 { margin-right: 2rem !important; } .mb-md-6 { margin-bottom: 2rem !important; } .ml-md-6 { margin-left: 2rem !important; } .mx-md-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-md-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-md-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 50rem) { .m-md-7 { margin: 2.5rem !important; } .mt-md-7 { margin-top: 2.5rem !important; } .mr-md-7 { margin-right: 2.5rem !important; } .mb-md-7 { margin-bottom: 2.5rem !important; } .ml-md-7 { margin-left: 2.5rem !important; } .mx-md-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-md-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-md-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 50rem) { .m-md-8 { margin: 3rem !important; } .mt-md-8 { margin-top: 3rem !important; } .mr-md-8 { margin-right: 3rem !important; } .mb-md-8 { margin-bottom: 3rem !important; } .ml-md-8 { margin-left: 3rem !important; } .mx-md-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-md-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-md-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 50rem) { .m-md-9 { margin: 3.5rem !important; } .mt-md-9 { margin-top: 3.5rem !important; } .mr-md-9 { margin-right: 3.5rem !important; } .mb-md-9 { margin-bottom: 3.5rem !important; } .ml-md-9 { margin-left: 3.5rem !important; } .mx-md-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-md-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-md-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 50rem) { .m-md-10 { margin: 4rem !important; } .mt-md-10 { margin-top: 4rem !important; } .mr-md-10 { margin-right: 4rem !important; } .mb-md-10 { margin-bottom: 4rem !important; } .ml-md-10 { margin-left: 4rem !important; } .mx-md-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-md-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-md-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-0 { margin: 0 !important; } .mt-lg-0 { margin-top: 0 !important; } .mr-lg-0 { margin-right: 0 !important; } .mb-lg-0 { margin-bottom: 0 !important; } .ml-lg-0 { margin-left: 0 !important; } .mx-lg-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-lg-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-lg-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 66.5rem) { .m-lg-1 { margin: 0.25rem !important; } .mt-lg-1 { margin-top: 0.25rem !important; } .mr-lg-1 { margin-right: 0.25rem !important; } .mb-lg-1 { margin-bottom: 0.25rem !important; } .ml-lg-1 { margin-left: 0.25rem !important; } .mx-lg-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-lg-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-lg-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-2 { margin: 0.5rem !important; } .mt-lg-2 { margin-top: 0.5rem !important; } .mr-lg-2 { margin-right: 0.5rem !important; } .mb-lg-2 { margin-bottom: 0.5rem !important; } .ml-lg-2 { margin-left: 0.5rem !important; } .mx-lg-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-lg-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-lg-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-3 { margin: 0.75rem !important; } .mt-lg-3 { margin-top: 0.75rem !important; } .mr-lg-3 { margin-right: 0.75rem !important; } .mb-lg-3 { margin-bottom: 0.75rem !important; } .ml-lg-3 { margin-left: 0.75rem !important; } .mx-lg-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-lg-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-lg-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-4 { margin: 1rem !important; } .mt-lg-4 { margin-top: 1rem !important; } .mr-lg-4 { margin-right: 1rem !important; } .mb-lg-4 { margin-bottom: 1rem !important; } .ml-lg-4 { margin-left: 1rem !important; } .mx-lg-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-lg-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-lg-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-5 { margin: 1.5rem !important; } .mt-lg-5 { margin-top: 1.5rem !important; } .mr-lg-5 { margin-right: 1.5rem !important; } .mb-lg-5 { margin-bottom: 1.5rem !important; } .ml-lg-5 { margin-left: 1.5rem !important; } .mx-lg-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-lg-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-lg-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-6 { margin: 2rem !important; } .mt-lg-6 { margin-top: 2rem !important; } .mr-lg-6 { margin-right: 2rem !important; } .mb-lg-6 { margin-bottom: 2rem !important; } .ml-lg-6 { margin-left: 2rem !important; } .mx-lg-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-lg-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-lg-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-7 { margin: 2.5rem !important; } .mt-lg-7 { margin-top: 2.5rem !important; } .mr-lg-7 { margin-right: 2.5rem !important; } .mb-lg-7 { margin-bottom: 2.5rem !important; } .ml-lg-7 { margin-left: 2.5rem !important; } .mx-lg-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-lg-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-lg-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-8 { margin: 3rem !important; } .mt-lg-8 { margin-top: 3rem !important; } .mr-lg-8 { margin-right: 3rem !important; } .mb-lg-8 { margin-bottom: 3rem !important; } .ml-lg-8 { margin-left: 3rem !important; } .mx-lg-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-lg-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-lg-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-9 { margin: 3.5rem !important; } .mt-lg-9 { margin-top: 3.5rem !important; } .mr-lg-9 { margin-right: 3.5rem !important; } .mb-lg-9 { margin-bottom: 3.5rem !important; } .ml-lg-9 { margin-left: 3.5rem !important; } .mx-lg-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-lg-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-lg-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-10 { margin: 4rem !important; } .mt-lg-10 { margin-top: 4rem !important; } .mr-lg-10 { margin-right: 4rem !important; } .mb-lg-10 { margin-bottom: 4rem !important; } .ml-lg-10 { margin-left: 4rem !important; } .mx-lg-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-lg-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-lg-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-0 { margin: 0 !important; } .mt-xl-0 { margin-top: 0 !important; } .mr-xl-0 { margin-right: 0 !important; } .mb-xl-0 { margin-bottom: 0 !important; } .ml-xl-0 { margin-left: 0 !important; } .mx-xl-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-xl-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-xl-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 87.5rem) { .m-xl-1 { margin: 0.25rem !important; } .mt-xl-1 { margin-top: 0.25rem !important; } .mr-xl-1 { margin-right: 0.25rem !important; } .mb-xl-1 { margin-bottom: 0.25rem !important; } .ml-xl-1 { margin-left: 0.25rem !important; } .mx-xl-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-xl-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-xl-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-2 { margin: 0.5rem !important; } .mt-xl-2 { margin-top: 0.5rem !important; } .mr-xl-2 { margin-right: 0.5rem !important; } .mb-xl-2 { margin-bottom: 0.5rem !important; } .ml-xl-2 { margin-left: 0.5rem !important; } .mx-xl-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-xl-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-xl-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-3 { margin: 0.75rem !important; } .mt-xl-3 { margin-top: 0.75rem !important; } .mr-xl-3 { margin-right: 0.75rem !important; } .mb-xl-3 { margin-bottom: 0.75rem !important; } .ml-xl-3 { margin-left: 0.75rem !important; } .mx-xl-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-xl-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-xl-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-4 { margin: 1rem !important; } .mt-xl-4 { margin-top: 1rem !important; } .mr-xl-4 { margin-right: 1rem !important; } .mb-xl-4 { margin-bottom: 1rem !important; } .ml-xl-4 { margin-left: 1rem !important; } .mx-xl-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-xl-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-xl-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-5 { margin: 1.5rem !important; } .mt-xl-5 { margin-top: 1.5rem !important; } .mr-xl-5 { margin-right: 1.5rem !important; } .mb-xl-5 { margin-bottom: 1.5rem !important; } .ml-xl-5 { margin-left: 1.5rem !important; } .mx-xl-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-xl-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-xl-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-6 { margin: 2rem !important; } .mt-xl-6 { margin-top: 2rem !important; } .mr-xl-6 { margin-right: 2rem !important; } .mb-xl-6 { margin-bottom: 2rem !important; } .ml-xl-6 { margin-left: 2rem !important; } .mx-xl-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-xl-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-xl-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-7 { margin: 2.5rem !important; } .mt-xl-7 { margin-top: 2.5rem !important; } .mr-xl-7 { margin-right: 2.5rem !important; } .mb-xl-7 { margin-bottom: 2.5rem !important; } .ml-xl-7 { margin-left: 2.5rem !important; } .mx-xl-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-xl-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-xl-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-8 { margin: 3rem !important; } .mt-xl-8 { margin-top: 3rem !important; } .mr-xl-8 { margin-right: 3rem !important; } .mb-xl-8 { margin-bottom: 3rem !important; } .ml-xl-8 { margin-left: 3rem !important; } .mx-xl-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-xl-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-xl-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-9 { margin: 3.5rem !important; } .mt-xl-9 { margin-top: 3.5rem !important; } .mr-xl-9 { margin-right: 3.5rem !important; } .mb-xl-9 { margin-bottom: 3.5rem !important; } .ml-xl-9 { margin-left: 3.5rem !important; } .mx-xl-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-xl-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-xl-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-10 { margin: 4rem !important; } .mt-xl-10 { margin-top: 4rem !important; } .mr-xl-10 { margin-right: 4rem !important; } .mb-xl-10 { margin-bottom: 4rem !important; } .ml-xl-10 { margin-left: 4rem !important; } .mx-xl-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-xl-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-xl-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +.p-0 { padding: 0 !important; } + +.pt-0 { padding-top: 0 !important; } + +.pr-0 { padding-right: 0 !important; } + +.pb-0 { padding-bottom: 0 !important; } + +.pl-0 { padding-left: 0 !important; } + +.px-0 { padding-right: 0 !important; padding-left: 0 !important; } + +.py-0 { padding-top: 0 !important; padding-bottom: 0 !important; } + +.p-1 { padding: 0.25rem !important; } + +.pt-1 { padding-top: 0.25rem !important; } + +.pr-1 { padding-right: 0.25rem !important; } + +.pb-1 { padding-bottom: 0.25rem !important; } + +.pl-1 { padding-left: 0.25rem !important; } + +.px-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } + +.py-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } + +.p-2 { padding: 0.5rem !important; } + +.pt-2 { padding-top: 0.5rem !important; } + +.pr-2 { padding-right: 0.5rem !important; } + +.pb-2 { padding-bottom: 0.5rem !important; } + +.pl-2 { padding-left: 0.5rem !important; } + +.px-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } + +.py-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } + +.p-3 { padding: 0.75rem !important; } + +.pt-3 { padding-top: 0.75rem !important; } + +.pr-3 { padding-right: 0.75rem !important; } + +.pb-3 { padding-bottom: 0.75rem !important; } + +.pl-3 { padding-left: 0.75rem !important; } + +.px-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } + +.py-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } + +.p-4 { padding: 1rem !important; } + +.pt-4 { padding-top: 1rem !important; } + +.pr-4 { padding-right: 1rem !important; } + +.pb-4 { padding-bottom: 1rem !important; } + +.pl-4 { padding-left: 1rem !important; } + +.px-4 { padding-right: 1rem !important; padding-left: 1rem !important; } + +.py-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } + +.p-5 { padding: 1.5rem !important; } + +.pt-5 { padding-top: 1.5rem !important; } + +.pr-5 { padding-right: 1.5rem !important; } + +.pb-5 { padding-bottom: 1.5rem !important; } + +.pl-5 { padding-left: 1.5rem !important; } + +.px-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } + +.py-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } + +.p-6 { padding: 2rem !important; } + +.pt-6 { padding-top: 2rem !important; } + +.pr-6 { padding-right: 2rem !important; } + +.pb-6 { padding-bottom: 2rem !important; } + +.pl-6 { padding-left: 2rem !important; } + +.px-6 { padding-right: 2rem !important; padding-left: 2rem !important; } + +.py-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } + +.p-7 { padding: 2.5rem !important; } + +.pt-7 { padding-top: 2.5rem !important; } + +.pr-7 { padding-right: 2.5rem !important; } + +.pb-7 { padding-bottom: 2.5rem !important; } + +.pl-7 { padding-left: 2.5rem !important; } + +.px-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } + +.py-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } + +.p-8 { padding: 3rem !important; } + +.pt-8 { padding-top: 3rem !important; } + +.pr-8 { padding-right: 3rem !important; } + +.pb-8 { padding-bottom: 3rem !important; } + +.pl-8 { padding-left: 3rem !important; } + +.px-8 { padding-right: 3rem !important; padding-left: 3rem !important; } + +.py-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } + +.p-9 { padding: 3.5rem !important; } + +.pt-9 { padding-top: 3.5rem !important; } + +.pr-9 { padding-right: 3.5rem !important; } + +.pb-9 { padding-bottom: 3.5rem !important; } + +.pl-9 { padding-left: 3.5rem !important; } + +.px-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } + +.py-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } + +.p-10 { padding: 4rem !important; } + +.pt-10 { padding-top: 4rem !important; } + +.pr-10 { padding-right: 4rem !important; } + +.pb-10 { padding-bottom: 4rem !important; } + +.pl-10 { padding-left: 4rem !important; } + +.px-10 { padding-right: 4rem !important; padding-left: 4rem !important; } + +.py-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } + +@media (min-width: 20rem) { .p-xs-0 { padding: 0 !important; } .pt-xs-0 { padding-top: 0 !important; } .pr-xs-0 { padding-right: 0 !important; } .pb-xs-0 { padding-bottom: 0 !important; } .pl-xs-0 { padding-left: 0 !important; } .px-xs-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-xs-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-xs-1 { padding: 0.25rem !important; } .pt-xs-1 { padding-top: 0.25rem !important; } .pr-xs-1 { padding-right: 0.25rem !important; } .pb-xs-1 { padding-bottom: 0.25rem !important; } .pl-xs-1 { padding-left: 0.25rem !important; } .px-xs-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-xs-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-xs-2 { padding: 0.5rem !important; } .pt-xs-2 { padding-top: 0.5rem !important; } .pr-xs-2 { padding-right: 0.5rem !important; } .pb-xs-2 { padding-bottom: 0.5rem !important; } .pl-xs-2 { padding-left: 0.5rem !important; } .px-xs-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-xs-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-xs-3 { padding: 0.75rem !important; } .pt-xs-3 { padding-top: 0.75rem !important; } .pr-xs-3 { padding-right: 0.75rem !important; } .pb-xs-3 { padding-bottom: 0.75rem !important; } .pl-xs-3 { padding-left: 0.75rem !important; } .px-xs-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-xs-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-xs-4 { padding: 1rem !important; } .pt-xs-4 { padding-top: 1rem !important; } .pr-xs-4 { padding-right: 1rem !important; } .pb-xs-4 { padding-bottom: 1rem !important; } .pl-xs-4 { padding-left: 1rem !important; } .px-xs-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-xs-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-xs-5 { padding: 1.5rem !important; } .pt-xs-5 { padding-top: 1.5rem !important; } .pr-xs-5 { padding-right: 1.5rem !important; } .pb-xs-5 { padding-bottom: 1.5rem !important; } .pl-xs-5 { padding-left: 1.5rem !important; } .px-xs-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-xs-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-xs-6 { padding: 2rem !important; } .pt-xs-6 { padding-top: 2rem !important; } .pr-xs-6 { padding-right: 2rem !important; } .pb-xs-6 { padding-bottom: 2rem !important; } .pl-xs-6 { padding-left: 2rem !important; } .px-xs-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-xs-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-xs-7 { padding: 2.5rem !important; } .pt-xs-7 { padding-top: 2.5rem !important; } .pr-xs-7 { padding-right: 2.5rem !important; } .pb-xs-7 { padding-bottom: 2.5rem !important; } .pl-xs-7 { padding-left: 2.5rem !important; } .px-xs-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-xs-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-xs-8 { padding: 3rem !important; } .pt-xs-8 { padding-top: 3rem !important; } .pr-xs-8 { padding-right: 3rem !important; } .pb-xs-8 { padding-bottom: 3rem !important; } .pl-xs-8 { padding-left: 3rem !important; } .px-xs-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xs-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-xs-9 { padding: 3.5rem !important; } .pt-xs-9 { padding-top: 3.5rem !important; } .pr-xs-9 { padding-right: 3.5rem !important; } .pb-xs-9 { padding-bottom: 3.5rem !important; } .pl-xs-9 { padding-left: 3.5rem !important; } .px-xs-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-xs-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-xs-10 { padding: 4rem !important; } .pt-xs-10 { padding-top: 4rem !important; } .pr-xs-10 { padding-right: 4rem !important; } .pb-xs-10 { padding-bottom: 4rem !important; } .pl-xs-10 { padding-left: 4rem !important; } .px-xs-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-xs-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media (min-width: 31.25rem) { .p-sm-0 { padding: 0 !important; } .pt-sm-0 { padding-top: 0 !important; } .pr-sm-0 { padding-right: 0 !important; } .pb-sm-0 { padding-bottom: 0 !important; } .pl-sm-0 { padding-left: 0 !important; } .px-sm-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-sm-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-sm-1 { padding: 0.25rem !important; } .pt-sm-1 { padding-top: 0.25rem !important; } .pr-sm-1 { padding-right: 0.25rem !important; } .pb-sm-1 { padding-bottom: 0.25rem !important; } .pl-sm-1 { padding-left: 0.25rem !important; } .px-sm-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-sm-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-sm-2 { padding: 0.5rem !important; } .pt-sm-2 { padding-top: 0.5rem !important; } .pr-sm-2 { padding-right: 0.5rem !important; } .pb-sm-2 { padding-bottom: 0.5rem !important; } .pl-sm-2 { padding-left: 0.5rem !important; } .px-sm-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-sm-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-sm-3 { padding: 0.75rem !important; } .pt-sm-3 { padding-top: 0.75rem !important; } .pr-sm-3 { padding-right: 0.75rem !important; } .pb-sm-3 { padding-bottom: 0.75rem !important; } .pl-sm-3 { padding-left: 0.75rem !important; } .px-sm-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-sm-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-sm-4 { padding: 1rem !important; } .pt-sm-4 { padding-top: 1rem !important; } .pr-sm-4 { padding-right: 1rem !important; } .pb-sm-4 { padding-bottom: 1rem !important; } .pl-sm-4 { padding-left: 1rem !important; } .px-sm-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-sm-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-sm-5 { padding: 1.5rem !important; } .pt-sm-5 { padding-top: 1.5rem !important; } .pr-sm-5 { padding-right: 1.5rem !important; } .pb-sm-5 { padding-bottom: 1.5rem !important; } .pl-sm-5 { padding-left: 1.5rem !important; } .px-sm-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-sm-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-sm-6 { padding: 2rem !important; } .pt-sm-6 { padding-top: 2rem !important; } .pr-sm-6 { padding-right: 2rem !important; } .pb-sm-6 { padding-bottom: 2rem !important; } .pl-sm-6 { padding-left: 2rem !important; } .px-sm-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-sm-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-sm-7 { padding: 2.5rem !important; } .pt-sm-7 { padding-top: 2.5rem !important; } .pr-sm-7 { padding-right: 2.5rem !important; } .pb-sm-7 { padding-bottom: 2.5rem !important; } .pl-sm-7 { padding-left: 2.5rem !important; } .px-sm-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-sm-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-sm-8 { padding: 3rem !important; } .pt-sm-8 { padding-top: 3rem !important; } .pr-sm-8 { padding-right: 3rem !important; } .pb-sm-8 { padding-bottom: 3rem !important; } .pl-sm-8 { padding-left: 3rem !important; } .px-sm-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-sm-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-sm-9 { padding: 3.5rem !important; } .pt-sm-9 { padding-top: 3.5rem !important; } .pr-sm-9 { padding-right: 3.5rem !important; } .pb-sm-9 { padding-bottom: 3.5rem !important; } .pl-sm-9 { padding-left: 3.5rem !important; } .px-sm-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-sm-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-sm-10 { padding: 4rem !important; } .pt-sm-10 { padding-top: 4rem !important; } .pr-sm-10 { padding-right: 4rem !important; } .pb-sm-10 { padding-bottom: 4rem !important; } .pl-sm-10 { padding-left: 4rem !important; } .px-sm-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-sm-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media (min-width: 50rem) { .p-md-0 { padding: 0 !important; } .pt-md-0 { padding-top: 0 !important; } .pr-md-0 { padding-right: 0 !important; } .pb-md-0 { padding-bottom: 0 !important; } .pl-md-0 { padding-left: 0 !important; } .px-md-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-md-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-md-1 { padding: 0.25rem !important; } .pt-md-1 { padding-top: 0.25rem !important; } .pr-md-1 { padding-right: 0.25rem !important; } .pb-md-1 { padding-bottom: 0.25rem !important; } .pl-md-1 { padding-left: 0.25rem !important; } .px-md-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-md-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-md-2 { padding: 0.5rem !important; } .pt-md-2 { padding-top: 0.5rem !important; } .pr-md-2 { padding-right: 0.5rem !important; } .pb-md-2 { padding-bottom: 0.5rem !important; } .pl-md-2 { padding-left: 0.5rem !important; } .px-md-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-md-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-md-3 { padding: 0.75rem !important; } .pt-md-3 { padding-top: 0.75rem !important; } .pr-md-3 { padding-right: 0.75rem !important; } .pb-md-3 { padding-bottom: 0.75rem !important; } .pl-md-3 { padding-left: 0.75rem !important; } .px-md-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-md-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-md-4 { padding: 1rem !important; } .pt-md-4 { padding-top: 1rem !important; } .pr-md-4 { padding-right: 1rem !important; } .pb-md-4 { padding-bottom: 1rem !important; } .pl-md-4 { padding-left: 1rem !important; } .px-md-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-md-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-md-5 { padding: 1.5rem !important; } .pt-md-5 { padding-top: 1.5rem !important; } .pr-md-5 { padding-right: 1.5rem !important; } .pb-md-5 { padding-bottom: 1.5rem !important; } .pl-md-5 { padding-left: 1.5rem !important; } .px-md-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-md-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-md-6 { padding: 2rem !important; } .pt-md-6 { padding-top: 2rem !important; } .pr-md-6 { padding-right: 2rem !important; } .pb-md-6 { padding-bottom: 2rem !important; } .pl-md-6 { padding-left: 2rem !important; } .px-md-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-md-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-md-7 { padding: 2.5rem !important; } .pt-md-7 { padding-top: 2.5rem !important; } .pr-md-7 { padding-right: 2.5rem !important; } .pb-md-7 { padding-bottom: 2.5rem !important; } .pl-md-7 { padding-left: 2.5rem !important; } .px-md-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-md-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-md-8 { padding: 3rem !important; } .pt-md-8 { padding-top: 3rem !important; } .pr-md-8 { padding-right: 3rem !important; } .pb-md-8 { padding-bottom: 3rem !important; } .pl-md-8 { padding-left: 3rem !important; } .px-md-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-md-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-md-9 { padding: 3.5rem !important; } .pt-md-9 { padding-top: 3.5rem !important; } .pr-md-9 { padding-right: 3.5rem !important; } .pb-md-9 { padding-bottom: 3.5rem !important; } .pl-md-9 { padding-left: 3.5rem !important; } .px-md-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-md-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-md-10 { padding: 4rem !important; } .pt-md-10 { padding-top: 4rem !important; } .pr-md-10 { padding-right: 4rem !important; } .pb-md-10 { padding-bottom: 4rem !important; } .pl-md-10 { padding-left: 4rem !important; } .px-md-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-md-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media (min-width: 66.5rem) { .p-lg-0 { padding: 0 !important; } .pt-lg-0 { padding-top: 0 !important; } .pr-lg-0 { padding-right: 0 !important; } .pb-lg-0 { padding-bottom: 0 !important; } .pl-lg-0 { padding-left: 0 !important; } .px-lg-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-lg-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-lg-1 { padding: 0.25rem !important; } .pt-lg-1 { padding-top: 0.25rem !important; } .pr-lg-1 { padding-right: 0.25rem !important; } .pb-lg-1 { padding-bottom: 0.25rem !important; } .pl-lg-1 { padding-left: 0.25rem !important; } .px-lg-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-lg-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-lg-2 { padding: 0.5rem !important; } .pt-lg-2 { padding-top: 0.5rem !important; } .pr-lg-2 { padding-right: 0.5rem !important; } .pb-lg-2 { padding-bottom: 0.5rem !important; } .pl-lg-2 { padding-left: 0.5rem !important; } .px-lg-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-lg-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-lg-3 { padding: 0.75rem !important; } .pt-lg-3 { padding-top: 0.75rem !important; } .pr-lg-3 { padding-right: 0.75rem !important; } .pb-lg-3 { padding-bottom: 0.75rem !important; } .pl-lg-3 { padding-left: 0.75rem !important; } .px-lg-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-lg-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-lg-4 { padding: 1rem !important; } .pt-lg-4 { padding-top: 1rem !important; } .pr-lg-4 { padding-right: 1rem !important; } .pb-lg-4 { padding-bottom: 1rem !important; } .pl-lg-4 { padding-left: 1rem !important; } .px-lg-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-lg-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-lg-5 { padding: 1.5rem !important; } .pt-lg-5 { padding-top: 1.5rem !important; } .pr-lg-5 { padding-right: 1.5rem !important; } .pb-lg-5 { padding-bottom: 1.5rem !important; } .pl-lg-5 { padding-left: 1.5rem !important; } .px-lg-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-lg-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-lg-6 { padding: 2rem !important; } .pt-lg-6 { padding-top: 2rem !important; } .pr-lg-6 { padding-right: 2rem !important; } .pb-lg-6 { padding-bottom: 2rem !important; } .pl-lg-6 { padding-left: 2rem !important; } .px-lg-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-lg-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-lg-7 { padding: 2.5rem !important; } .pt-lg-7 { padding-top: 2.5rem !important; } .pr-lg-7 { padding-right: 2.5rem !important; } .pb-lg-7 { padding-bottom: 2.5rem !important; } .pl-lg-7 { padding-left: 2.5rem !important; } .px-lg-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-lg-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-lg-8 { padding: 3rem !important; } .pt-lg-8 { padding-top: 3rem !important; } .pr-lg-8 { padding-right: 3rem !important; } .pb-lg-8 { padding-bottom: 3rem !important; } .pl-lg-8 { padding-left: 3rem !important; } .px-lg-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-lg-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-lg-9 { padding: 3.5rem !important; } .pt-lg-9 { padding-top: 3.5rem !important; } .pr-lg-9 { padding-right: 3.5rem !important; } .pb-lg-9 { padding-bottom: 3.5rem !important; } .pl-lg-9 { padding-left: 3.5rem !important; } .px-lg-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-lg-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-lg-10 { padding: 4rem !important; } .pt-lg-10 { padding-top: 4rem !important; } .pr-lg-10 { padding-right: 4rem !important; } .pb-lg-10 { padding-bottom: 4rem !important; } .pl-lg-10 { padding-left: 4rem !important; } .px-lg-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-lg-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media (min-width: 87.5rem) { .p-xl-0 { padding: 0 !important; } .pt-xl-0 { padding-top: 0 !important; } .pr-xl-0 { padding-right: 0 !important; } .pb-xl-0 { padding-bottom: 0 !important; } .pl-xl-0 { padding-left: 0 !important; } .px-xl-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-xl-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-xl-1 { padding: 0.25rem !important; } .pt-xl-1 { padding-top: 0.25rem !important; } .pr-xl-1 { padding-right: 0.25rem !important; } .pb-xl-1 { padding-bottom: 0.25rem !important; } .pl-xl-1 { padding-left: 0.25rem !important; } .px-xl-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-xl-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-xl-2 { padding: 0.5rem !important; } .pt-xl-2 { padding-top: 0.5rem !important; } .pr-xl-2 { padding-right: 0.5rem !important; } .pb-xl-2 { padding-bottom: 0.5rem !important; } .pl-xl-2 { padding-left: 0.5rem !important; } .px-xl-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-xl-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-xl-3 { padding: 0.75rem !important; } .pt-xl-3 { padding-top: 0.75rem !important; } .pr-xl-3 { padding-right: 0.75rem !important; } .pb-xl-3 { padding-bottom: 0.75rem !important; } .pl-xl-3 { padding-left: 0.75rem !important; } .px-xl-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-xl-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-xl-4 { padding: 1rem !important; } .pt-xl-4 { padding-top: 1rem !important; } .pr-xl-4 { padding-right: 1rem !important; } .pb-xl-4 { padding-bottom: 1rem !important; } .pl-xl-4 { padding-left: 1rem !important; } .px-xl-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-xl-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-xl-5 { padding: 1.5rem !important; } .pt-xl-5 { padding-top: 1.5rem !important; } .pr-xl-5 { padding-right: 1.5rem !important; } .pb-xl-5 { padding-bottom: 1.5rem !important; } .pl-xl-5 { padding-left: 1.5rem !important; } .px-xl-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-xl-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-xl-6 { padding: 2rem !important; } .pt-xl-6 { padding-top: 2rem !important; } .pr-xl-6 { padding-right: 2rem !important; } .pb-xl-6 { padding-bottom: 2rem !important; } .pl-xl-6 { padding-left: 2rem !important; } .px-xl-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-xl-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-xl-7 { padding: 2.5rem !important; } .pt-xl-7 { padding-top: 2.5rem !important; } .pr-xl-7 { padding-right: 2.5rem !important; } .pb-xl-7 { padding-bottom: 2.5rem !important; } .pl-xl-7 { padding-left: 2.5rem !important; } .px-xl-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-xl-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-xl-8 { padding: 3rem !important; } .pt-xl-8 { padding-top: 3rem !important; } .pr-xl-8 { padding-right: 3rem !important; } .pb-xl-8 { padding-bottom: 3rem !important; } .pl-xl-8 { padding-left: 3rem !important; } .px-xl-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xl-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-xl-9 { padding: 3.5rem !important; } .pt-xl-9 { padding-top: 3.5rem !important; } .pr-xl-9 { padding-right: 3.5rem !important; } .pb-xl-9 { padding-bottom: 3.5rem !important; } .pl-xl-9 { padding-left: 3.5rem !important; } .px-xl-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-xl-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-xl-10 { padding: 4rem !important; } .pt-xl-10 { padding-top: 4rem !important; } .pr-xl-10 { padding-right: 4rem !important; } .pb-xl-10 { padding-bottom: 4rem !important; } .pl-xl-10 { padding-left: 4rem !important; } .px-xl-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-xl-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media print { .site-footer, .site-button, #edit-this-page, #back-to-top, .site-nav, .main-header { display: none !important; } .side-bar { width: 100%; height: auto; border-right: 0 !important; } .site-header { border-bottom: 1px solid #44434d; } .site-title { font-size: 16px !important; font-weight: 700 !important; } .text-small { font-size: 8pt !important; } pre.highlight { border: 1px solid #44434d; } .main { max-width: none; margin-left: 0; } } + +.site-header { height: 90px; max-height: 90px; } + +@media (max-width: 90rem) and (min-width: 50rem) { .site-nav, .site-header, .site-footer { width: 364px; } .side-bar { width: 364px; } .main { margin-left: 364px; } } + +@media (min-width: 90rem) { .site-nav, .site-header, .site-footer { width: 364px; } .side-bar { width: calc((100%) / 2 - 364px); } .main { margin-left: calc((100%) / 2 - 364px); } .side-left { width: 364px; } } + +.main-fs { margin-left: 6px; margin-right: 6px; max-width: initial; height: calc(100% - 14rem); } + +.main-fs { padding-top: 2rem; } + +.main-fs { padding-top: 1rem; } + +@media (min-width: 50rem) and (max-width: 90rem) { .main-fs { margin-left: 384px; margin-right: 20px; width: calc(100% - 384px - 20px); max-width: initial; height: calc(100% - 14rem); } .main-fs { padding-top: 2rem; } } + +@media (min-width: 90rem) { .main-fs { margin-left: 444px; margin-right: 80px; width: calc(100% - 444px - 80px); max-width: initial; height: calc(100% - 14rem); } .main-fs { padding-top: 4rem; } } + +.canvas-container-jtd { margin-top: 4px; border: 2px solid gray; border-radius: 4px; width: 100%; height: 600px; } + +.container-jtd-fs { border: 2px solid gray; border-radius: 4px; width: 100%; } + +.canvas-container-jtd:not(.container-jtd-fs):not(.pointer-events) { pointer-events: none; } + +.pure-button { border-radius: 4px !important; } + +.pure-label { padding-left: 4px !important; } + +.pure-checkbox { display: inline !important; margin-right: 4px !important; } + +.slider-container { padding-left: 16px; padding-right: 16px; } + +th, td { min-width: auto; text-align: center; } + +/*# sourceMappingURL=just-the-docs-dark.css.map */ \ No newline at end of file diff --git a/docs/assets/css/just-the-docs-dark.css.map b/docs/assets/css/just-the-docs-dark.css.map new file mode 100644 index 0000000..e99d434 --- /dev/null +++ b/docs/assets/css/just-the-docs-dark.css.map @@ -0,0 +1,68 @@ +{ + "version": 3, + "file": "just-the-docs-dark.css", + "sources": [ + "just-the-docs-dark.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/support.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/_variables.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/_functions.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/mixins/mixins.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/mixins/_layout.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/mixins/_buttons.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/mixins/_typography.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/color_schemes/dark.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/modules.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/vendor/normalize.scss/normalize.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/base.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/layout.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/content.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/navigation.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/typography.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/labels.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/buttons.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/search.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/tables.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/code.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/utilities.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_colors.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_layout.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_typography.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_lists.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_spacing.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/print.scss", + "site/_sass/custom/custom.scss" + ], + "sourcesContent": [ + "\n@import \"./support/support\";\n@import \"./color_schemes/dark\";\n@import \"./modules\";\n@import \"./custom/custom\";\n\n\n", + "@import \"./variables\";\n@import \"./functions\";\n@import \"./mixins/mixins\";\n", + "//\n// Typography\n//\n\n$body-font-family: -apple-system, BlinkMacSystemFont, \"helvetica neue\",\n helvetica, roboto, noto, \"segoe ui\", arial, sans-serif !default;\n$mono-font-family: \"SFMono-Regular\", Menlo, Consolas, Monospace !default;\n$root-font-size: 16px !default; // Base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n//\n// Colors\n//\n\n$white: #fff !default;\n\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n$body-background-color: $white !default;\n$sidebar-color: $grey-lt-000 !default;\n$search-background-color: $white !default;\n$table-background-color: $white !default;\n$code-background-color: $grey-lt-000 !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n\n$body-text-color: $grey-dk-100 !default;\n$body-heading-color: $grey-dk-300 !default;\n$search-result-preview-color: $grey-dk-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$btn-primary-color: $purple-100 !default;\n$base-button-color: #f7f7f7 !default;\n\n//\n// Spacing\n//\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n//\n// Borders\n//\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n//\n// Grid system\n//\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 264px !default;\n$nav-width-md: 248px !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 800px !default;\n$header-height: 60px !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n//\n// Media queries in pixels\n//\n\n$media-queries: (\n xs: 320px,\n sm: 500px,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 1400px,\n) !default;\n", + "@function rem($size, $unit: \"\") {\n $remSize: $size / $root-font-size;\n\n @if ($unit == false) {\n @return #{$remSize};\n } @else {\n @return #{$remSize}rem;\n }\n}\n", + "@import \"./layout\";\n@import \"./buttons\";\n@import \"./typography\";\n", + "// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value != null {\n // Prints a media query based on the value\n @media (min-width: rem($value)) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. \"\n + \"Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n", + "// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n", + "// Font size\n\n@mixin fs-1 {\n font-size: 9px !important;\n\n @include mq(sm) {\n font-size: 10px !important;\n }\n}\n\n@mixin fs-2 {\n font-size: 11px !important;\n\n @include mq(sm) {\n font-size: 12px !important;\n }\n}\n\n@mixin fs-3 {\n font-size: 12px !important;\n\n @include mq(sm) {\n font-size: 14px !important;\n }\n}\n\n@mixin fs-4 {\n font-size: 15px !important;\n\n @include mq(sm) {\n font-size: 16px !important;\n }\n}\n\n@mixin fs-5 {\n font-size: 16px !important;\n\n @include mq(sm) {\n font-size: 18px !important;\n }\n}\n\n@mixin fs-6 {\n font-size: 18px !important;\n\n @include mq(sm) {\n font-size: 24px !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n font-size: 24px !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: 32px !important;\n }\n}\n\n@mixin fs-8 {\n font-size: 32px !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: 36px !important;\n }\n}\n\n@mixin fs-9 {\n font-size: 36px !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: 42px !important;\n }\n}\n\n@mixin fs-10 {\n font-size: 42px !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: 48px !important;\n }\n}\n", + "$body-background-color: $grey-dk-300;\n$sidebar-color: $grey-dk-300;\n$border-color: $grey-dk-200;\n\n$body-text-color: $grey-lt-300;\n$body-heading-color: $grey-lt-000;\n$nav-child-link-color: $grey-dk-000;\n$search-result-preview-color: $grey-dk-000;\n\n$link-color: $blue-000;\n$btn-primary-color: $blue-200;\n$base-button-color: $grey-dk-250;\n\n$code-background-color: $grey-dk-250;\n$search-background-color: $grey-dk-250;\n$table-background-color: $grey-dk-250;\n$feedback-color: darken($sidebar-color, 3%);\n", + "//\n// Import external dependencies\n//\n@import \"./vendor/normalize.scss/normalize.scss\";\n\n//\n// Modules\n//\n@import \"./base\";\n@import \"./layout\";\n@import \"./content\";\n@import \"./navigation\";\n@import \"./typography\";\n@import \"./labels\";\n@import \"./buttons\";\n@import \"./search\";\n@import \"./tables\";\n@import \"./code\";\n@import \"./utilities/utilities\";\n@import \"./print\";\n", + "/*! normalize.scss v0.1.0 | MIT License | based on git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n", + "//\n// Base element style overrides\n//\n// stylelint-disable selector-no-type, selector-max-type\n\n* {\n box-sizing: border-box;\n}\n\n::selection {\n color: $white;\n background: $link-color;\n}\n\nhtml {\n @include fs-4;\n scroll-behavior: smooth;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: none;\n background-image: linear-gradient($border-color 0%, $border-color 100%);\n background-repeat: repeat-x;\n background-position: 0 100%;\n background-size: 1px 1px;\n\n &:hover {\n background-image: linear-gradient(\n rgba($link-color, 0.45) 0%,\n rgba($link-color, 0.45) 100%\n );\n background-size: 1px 1px;\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n", + "//\n// The basic two column layout\n//\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-wrap: nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n flex-direction: column;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n}\n\n.main {\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n margin-left: calc(\n (100% - #{$nav-width + $content-width}) / 2 + #{$nav-width}\n );\n }\n}\n\n.main-content-wrap {\n @include container;\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n background-color: $body-background-color;\n border-bottom: $border $border-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n @include container;\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n// stylelint-disable selector-max-type\n\nbody {\n position: relative;\n padding-bottom: $sp-10;\n overflow-y: scroll;\n\n @include mq(md) {\n position: static;\n padding-bottom: 0;\n }\n}\n\n// stylelint-enable selector-max-type\n\n.site-footer {\n @include container;\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n color: $grey-dk-000;\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n", + "@charset \"UTF-8\";\n\n//\n// Styles for rendered markdown in the .main-content container\n//\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list {\n padding-left: 0;\n }\n\n .task-list-item {\n display: flex;\n align-items: center;\n\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n &:first-child {\n margin-top: $sp-2;\n }\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge {\n margin-top: 1em;\n }\n\n + p {\n margin-top: 0;\n }\n }\n}\n", + "//\n// Main nav, breadcrumb, etc...\n//\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n @include fs-4;\n position: relative;\n margin: 0;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding-top: #{$nav-list-item-height-sm / 4};\n padding-right: #{$nav-list-item-height-sm / 4};\n padding-bottom: #{$nav-list-item-height-sm / 4};\n padding-left: #{$nav-list-item-height-sm / 4};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding-top: #{$nav-list-item-height / 4};\n padding-right: #{$nav-list-item-height / 4};\n padding-bottom: #{$nav-list-item-height / 4};\n padding-left: #{$nav-list-item-height / 4};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding-top: $sp-2;\n padding-right: $gutter-spacing-sm;\n padding-bottom: $sp-2;\n padding-left: $gutter-spacing-sm;\n font-weight: 600;\n text-align: end;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n", + "//\n// Typography\n//\n// stylelint-disable primer/selector-no-utility, primer/no-override, selector-no-type, selector-max-type\n\nh1,\n.text-alpha {\n @include fs-8;\n font-weight: 300;\n}\n\nh2,\n.text-beta {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n @include fs-2;\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n color: $grey-dk-200;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n color: $grey-dk-200;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n", + "//\n// Labels (not the form kind)\n//\n\n.label,\n.label-blue {\n display: inline-block;\n padding-top: 0.16em;\n padding-right: 0.56em;\n padding-bottom: 0.16em;\n padding-left: 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n @include fs-2;\n border-radius: 12px;\n}\n\n.label-green {\n background-color: $green-200;\n}\n\n.label-purple {\n background-color: $purple-100;\n}\n\n.label-red {\n background-color: $red-200;\n}\n\n.label-yellow {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n", + "//\n// Buttons and things that look like buttons\n//\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding-top: 0.3em;\n padding-right: 1em;\n padding-bottom: 0.3em;\n padding-left: 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: inset 0 0 0 2px $grey-dk-100, 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-000);\n}\n\n.btn-green {\n @include btn-color($white, $green-100);\n}\n", + "//\n// Search input and autocomplete\n//\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration / 2};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration / 2};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding-top: $sp-2;\n padding-right: $gutter-spacing-sm;\n padding-bottom: $sp-2;\n padding-left: #{$gutter-spacing-sm + $sp-5};\n font-size: 16px;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n padding-left: #{$gutter-spacing + $sp-5};\n font-size: 14px;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration / 2};\n }\n\n &:focus {\n outline: 0;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration / 2};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding-top: $sp-1;\n padding-right: $sp-3;\n padding-bottom: $sp-1;\n padding-left: $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding-top: $sp-2;\n padding-right: $sp-3;\n padding-bottom: $sp-2;\n padding-left: $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 / 2};\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition: opacity ease $transition-duration, width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: #{$sp-4 * 1.25 + $sp-5};\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: #{$sp-4 * 1.25};\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition: opacity ease $transition-duration, width 0s, height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n", + "//\n// Tables\n//\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n @include fs-3;\n min-width: 120px;\n padding-top: $sp-2;\n padding-right: $sp-3;\n padding-bottom: $sp-2;\n padding-left: $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n", + "//\n// Code and syntax highlighting\n//\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type\n\ncode {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n}\n\npre.highlight,\nfigure.highlight {\n padding: $sp-3;\n margin-top: 0;\n margin-bottom: 0;\n background-color: $code-background-color;\n border-radius: $border-radius;\n -webkit-overflow-scrolling: touch;\n\n code {\n padding: 0;\n border: 0;\n }\n}\n\n.highlighter-rouge {\n margin-bottom: $sp-3;\n}\n\n.highlight .c {\n color: #586e75;\n} // comment //\n.highlight .err {\n color: #93a1a1;\n} // error //\n.highlight .g {\n color: #93a1a1;\n} // generic //\n.highlight .k {\n color: #859900;\n} // keyword //\n.highlight .l {\n color: #93a1a1;\n} // literal //\n.highlight .n {\n color: #93a1a1;\n} // name //\n.highlight .o {\n color: #859900;\n} // operator //\n.highlight .x {\n color: #cb4b16;\n} // other //\n.highlight .p {\n color: #93a1a1;\n} // punctuation //\n.highlight .cm {\n color: #586e75;\n} // comment.multiline //\n.highlight .cp {\n color: #859900;\n} // comment.preproc //\n.highlight .c1 {\n color: #586e75;\n} // comment.single //\n.highlight .cs {\n color: #859900;\n} // comment.special //\n.highlight .gd {\n color: #2aa198;\n} // generic.deleted //\n.highlight .ge {\n font-style: italic;\n color: #93a1a1;\n} // generic.emph //\n.highlight .gr {\n color: #dc322f;\n} // generic.error //\n.highlight .gh {\n color: #cb4b16;\n} // generic.heading //\n.highlight .gi {\n color: #859900;\n} // generic.inserted //\n.highlight .go {\n color: #93a1a1;\n} // generic.output //\n.highlight .gp {\n color: #93a1a1;\n} // generic.prompt //\n.highlight .gs {\n font-weight: bold;\n color: #93a1a1;\n} // generic.strong //\n.highlight .gu {\n color: #cb4b16;\n} // generic.subheading //\n.highlight .gt {\n color: #93a1a1;\n} // generic.traceback //\n.highlight .kc {\n color: #cb4b16;\n} // keyword.constant //\n.highlight .kd {\n color: #268bd2;\n} // keyword.declaration //\n.highlight .kn {\n color: #859900;\n} // keyword.namespace //\n.highlight .kp {\n color: #859900;\n} // keyword.pseudo //\n.highlight .kr {\n color: #268bd2;\n} // keyword.reserved //\n.highlight .kt {\n color: #dc322f;\n} // keyword.type //\n.highlight .ld {\n color: #93a1a1;\n} // literal.date //\n.highlight .m {\n color: #2aa198;\n} // literal.number //\n.highlight .s {\n color: #2aa198;\n} // literal.string //\n.highlight .na {\n color: #555;\n} // name.attribute //\n.highlight .nb {\n color: #b58900;\n} // name.builtin //\n.highlight .nc {\n color: #268bd2;\n} // name.class //\n.highlight .no {\n color: #cb4b16;\n} // name.constant //\n.highlight .nd {\n color: #268bd2;\n} // name.decorator //\n.highlight .ni {\n color: #cb4b16;\n} // name.entity //\n.highlight .ne {\n color: #cb4b16;\n} // name.exception //\n.highlight .nf {\n color: #268bd2;\n} // name.function //\n.highlight .nl {\n color: #555;\n} // name.label //\n.highlight .nn {\n color: #93a1a1;\n} // name.namespace //\n.highlight .nx {\n color: #555;\n} // name.other //\n.highlight .py {\n color: #93a1a1;\n} // name.property //\n.highlight .nt {\n color: #268bd2;\n} // name.tag //\n.highlight .nv {\n color: #268bd2;\n} // name.variable //\n.highlight .ow {\n color: #859900;\n} // operator.word //\n.highlight .w {\n color: #93a1a1;\n} // text.whitespace //\n.highlight .mf {\n color: #2aa198;\n} // literal.number.float //\n.highlight .mh {\n color: #2aa198;\n} // literal.number.hex //\n.highlight .mi {\n color: #2aa198;\n} // literal.number.integer //\n.highlight .mo {\n color: #2aa198;\n} // literal.number.oct //\n.highlight .sb {\n color: #586e75;\n} // literal.string.backtick //\n.highlight .sc {\n color: #2aa198;\n} // literal.string.char //\n.highlight .sd {\n color: #93a1a1;\n} // literal.string.doc //\n.highlight .s2 {\n color: #2aa198;\n} // literal.string.double //\n.highlight .se {\n color: #cb4b16;\n} // literal.string.escape //\n.highlight .sh {\n color: #93a1a1;\n} // literal.string.heredoc //\n.highlight .si {\n color: #2aa198;\n} // literal.string.interpol //\n.highlight .sx {\n color: #2aa198;\n} // literal.string.other //\n.highlight .sr {\n color: #dc322f;\n} // literal.string.regex //\n.highlight .s1 {\n color: #2aa198;\n} // literal.string.single //\n.highlight .ss {\n color: #2aa198;\n} // literal.string.symbol //\n.highlight .bp {\n color: #268bd2;\n} // name.builtin.pseudo //\n.highlight .vc {\n color: #268bd2;\n} // name.variable.class //\n.highlight .vg {\n color: #268bd2;\n} // name.variable.global //\n.highlight .vi {\n color: #268bd2;\n} // name.variable.instance //\n.highlight .il {\n color: #2aa198;\n} // literal.number.integer.long //\n\n//\n// Code examples (rendered)\n//\n\n.code-example {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n", + "@import \"./colors\";\n@import \"./layout\";\n@import \"./typography\";\n@import \"./lists\";\n@import \"./spacing\";\n", + "//\n// Utility classes for colors\n//\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n", + "// stylelint-disable primer/selector-no-utility, primer/no-override\n//\n// Utility classes for layout\n//\n\n// Display\n\n.d-block {\n display: block !important;\n}\n.d-flex {\n display: flex !important;\n}\n.d-inline {\n display: inline !important;\n}\n.d-inline-block {\n display: inline-block !important;\n}\n.d-none {\n display: none !important;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n.v-align-middle {\n vertical-align: middle !important;\n}\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n.v-align-top {\n vertical-align: top !important;\n}\n", + "//\n// Utility classes for typography\n//\n\n// stylelint-disable primer/selector-no-utility, primer/no-override\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n// stylelint-enable primer/selector-no-utility\n", + "//\n// Utility classes for lists\n//\n\n// stylelint-disable primer/selector-no-utility, primer/no-override, selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n", + "//\n// Utility classes for margins and padding\n//\n\n// scss-lint:disable SpaceAfterPropertyName\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before, primer/selector-no-utility, primer/no-override\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n", + "// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type, primer/no-override,\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: $root-font-size !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n", + "$sidebar_width: 364px;\n\n.site-header {\n height: 90px;\n max-height: 90px;\n}\n\n@media (max-width: 90rem) and (min-width: 50rem) {\n .site-nav,\n .site-header,\n .site-footer {\n width: $sidebar_width;\n }\n\n $sidebar_width_offset: calc((100%) / 2 - #{$sidebar_width});\n\n .side-bar {\n width: $sidebar_width;\n }\n\n .main {\n margin-left: $sidebar_width;\n }\n}\n\n@media (min-width: 90rem) {\n .site-nav,\n .site-header,\n .site-footer {\n width: $sidebar_width;\n }\n\n $sidebar_width_offset: calc((100%) / 2 - #{$sidebar_width});\n\n .side-bar {\n width: $sidebar_width_offset;\n }\n\n .main {\n margin-left: $sidebar_width_offset;\n }\n\n .side-left {\n width: $sidebar_width;\n }\n}\n\n$margin: 6px;\n$margin-left: $margin;\n$margin-right: $margin;\n\n.main-fs {\n margin-left: $margin-left;\n margin-right: $margin-right;\n max-width: initial;\n height: calc(100% - 14rem);\n}\n\n.main-fs {\n padding-top: 2rem;\n}\n\n.main-fs {\n padding-top: 1rem;\n}\n\n@media (min-width: 50rem) and (max-width: 90rem) {\n $margin: 20px;\n $margin-left: $sidebar_width + $margin;\n $margin-right: $margin;\n\n .main-fs {\n margin-left: $margin-left;\n margin-right: $margin-right;\n width: calc(100% - #{$margin-left} - #{$margin-right});\n max-width: initial;\n height: calc(100% - 14rem);\n }\n\n .main-fs {\n padding-top: 2rem;\n }\n}\n\n@media (min-width: 90rem) {\n $margin: 80px;\n $margin-left: $sidebar_width + $margin;\n $margin-right: $margin;\n\n .main-fs {\n margin-left: $margin-left;\n margin-right: $margin-right;\n width: calc(100% - #{$margin-left} - #{$margin-right});\n max-width: initial;\n height: calc(100% - 14rem);\n }\n\n .main-fs {\n padding-top: 4rem;\n }\n}\n\n// body,\n// html {\n// height: 100%;\n// }\n\n.canvas-container-jtd {\n margin-top: 4px;\n border: 2px solid gray;\n border-radius: 4px;\n width: 100%;\n height: 600px;\n}\n\n.container-jtd-fs {\n border: 2px solid gray;\n border-radius: 4px;\n width: 100%;\n}\n\n.canvas-container-jtd:not(.container-jtd-fs):not(.pointer-events) {\n pointer-events: none;\n}\n\n.pure-button {\n border-radius: 4px !important;\n}\n\n.pure-label {\n padding-left: 4px !important;\n}\n\n.pure-checkbox {\n display: inline !important;\n margin-right: 4px !important;\n}\n\n.slider-container {\n padding-left: 16px;\n padding-right: 16px;\n}\n\nth,\ntd {\n min-width: auto;\n text-align: center;\n}\n" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/docs/assets/css/just-the-docs-default.css b/docs/assets/css/just-the-docs-default.css new file mode 100644 index 0000000..3258baf --- /dev/null +++ b/docs/assets/css/just-the-docs-default.css @@ -0,0 +1,1570 @@ +@charset "UTF-8"; +/*! normalize.scss v0.1.0 | MIT License | based on git.io/normalize */ +/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ +html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } + +/** Remove default margin. */ +body { margin: 0; } + +/* HTML5 display definitions ========================================================================== */ +/** Correct `block` display not defined for any HTML5 element in IE 8/9. Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. Correct `block` display not defined for `main` in IE 11. */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } + +/** 1. Correct `inline-block` display not defined in IE 8/9. 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ +audio, canvas, progress, video { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } + +/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ +audio:not([controls]) { display: none; height: 0; } + +/** Address `[hidden]` styling not present in IE 8/9/10. Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. */ +[hidden], template { display: none; } + +/* Links ========================================================================== */ +/** Remove the gray background color from active links in IE 10. */ +a { background-color: transparent; } + +/** Improve readability when focused and also mouse hovered in all browsers. */ +a:active, a:hover { outline: 0; } + +/* Text-level semantics ========================================================================== */ +/** Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ +abbr[title] { border-bottom: 1px dotted; } + +/** Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ +b, strong { font-weight: bold; } + +/** Address styling not present in Safari and Chrome. */ +dfn { font-style: italic; } + +/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari, and Chrome. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +/** Address styling not present in IE 8/9. */ +mark { background: #ff0; color: #000; } + +/** Address inconsistent and variable font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { top: -0.5em; } + +sub { bottom: -0.25em; } + +/* Embedded content ========================================================================== */ +/** Remove border when inside `a` element in IE 8/9/10. */ +img { border: 0; } + +/** Correct overflow not hidden in IE 9/10/11. */ +svg:not(:root) { overflow: hidden; } + +/* Grouping content ========================================================================== */ +/** Address margin not present in IE 8/9 and Safari. */ +figure { margin: 1em 40px; } + +/** Address differences between Firefox and other browsers. */ +hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } + +/** Contain overflow in all browsers. */ +pre { overflow: auto; } + +/** Address odd `em`-unit font size rendering in all browsers. */ +code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; } + +/* Forms ========================================================================== */ +/** Known limitation: by default, Chrome and Safari on OS X allow very limited styling of `select`, unless a `border` property is set. */ +/** 1. Correct color not being inherited. Known issue: affects color of disabled elements. 2. Correct font properties not being inherited. 3. Address margins set differently in Firefox 4+, Safari, and Chrome. */ +button, input, optgroup, select, textarea { color: inherit; /* 1 */ font: inherit; /* 2 */ margin: 0; /* 3 */ } + +/** Address `overflow` set to `hidden` in IE 8/9/10/11. */ +button { overflow: visible; } + +/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. Correct `select` style inheritance in Firefox. */ +button, select { text-transform: none; } + +/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ +button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } + +/** Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { cursor: default; } + +/** Remove inner padding and border in Firefox 4+. */ +button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } + +/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ +input { line-height: normal; } + +/** It's recommended that you don't attempt to style these elements. Firefox's implementation doesn't respect box-sizing, padding, or width. 1. Address box sizing set to `content-box` in IE 8/9/10. 2. Remove excess padding in IE 8/9/10. */ +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } + +/** Fix the cursor style for Chrome's increment/decrement buttons. For certain `font-size` values of the `input`, it causes the cursor style of the decrement button to change from `default` to `text`. */ +input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { height: auto; } + +/** 1. Address `appearance` set to `searchfield` in Safari and Chrome. 2. Address `box-sizing` set to `border-box` in Safari and Chrome (include `-moz` to future-proof). */ +input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } + +/** Remove inner padding and search cancel button in Safari and Chrome on OS X. Safari (but not Chrome) clips the cancel button when the search input has padding (and `textfield` appearance). */ +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** Define consistent border, margin, and padding. */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct `color` not being inherited in IE 8/9/10/11. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ +legend { border: 0; /* 1 */ padding: 0; /* 2 */ } + +/** Remove default vertical scrollbar in IE 8/9/10/11. */ +textarea { overflow: auto; } + +/** Don't inherit the `font-weight` (applied by a rule above). NOTE: the default cannot safely be changed in Chrome and Safari on OS X. */ +optgroup { font-weight: bold; } + +/* Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +td, th { padding: 0; } + +* { box-sizing: border-box; } + +::selection { color: #fff; background: #7253ed; } + +html { font-size: 15px !important; scroll-behavior: smooth; } + +@media (min-width: 31.25rem) { html { font-size: 16px !important; } } + +body { font-family: -apple-system, BlinkMacSystemFont, "helvetica neue", helvetica, roboto, noto, "segoe ui", arial, sans-serif; font-size: inherit; line-height: 1.4; color: #5c5962; background-color: #fff; } + +ol, ul, dl, pre, address, blockquote, table, div, hr, form, fieldset, noscript .table-wrapper { margin-top: 0; } + +h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: 1em; font-weight: 500; line-height: 1.25; color: #27262b; } + +p { margin-top: 1em; margin-bottom: 1em; } + +a { color: #7253ed; text-decoration: none; } + +a:not([class]) { text-decoration: none; background-image: linear-gradient(#eeebee 0%, #eeebee 100%); background-repeat: repeat-x; background-position: 0 100%; background-size: 1px 1px; } + +a:not([class]):hover { background-image: linear-gradient(rgba(114, 83, 237, 0.45) 0%, rgba(114, 83, 237, 0.45) 100%); background-size: 1px 1px; } + +code { font-family: "SFMono-Regular", Menlo, Consolas, Monospace; font-size: 0.75em; line-height: 1.4; } + +figure, pre { margin: 0; } + +li { margin: 0.25em 0; } + +img { max-width: 100%; height: auto; } + +hr { height: 1px; padding: 0; margin: 2rem 0; background-color: #eeebee; border: 0; } + +.side-bar { z-index: 0; display: flex; flex-wrap: wrap; background-color: #f5f6fa; } + +@media (min-width: 50rem) { .side-bar { flex-wrap: nowrap; position: fixed; width: 248px; height: 100%; flex-direction: column; border-right: 1px solid #eeebee; align-items: flex-end; } } + +@media (min-width: 66.5rem) { .side-bar { width: calc((100% - 1064px) / 2 + 264px); min-width: 264px; } } + +@media (min-width: 50rem) { .main { position: relative; max-width: 800px; margin-left: 248px; } } + +@media (min-width: 66.5rem) { .main { margin-left: calc( (100% - 1064px) / 2 + 264px); } } + +.main-content-wrap { padding-right: 1rem; padding-left: 1rem; padding-top: 1rem; padding-bottom: 1rem; } + +@media (min-width: 50rem) { .main-content-wrap { padding-right: 2rem; padding-left: 2rem; } } + +@media (min-width: 50rem) { .main-content-wrap { padding-top: 2rem; padding-bottom: 2rem; } } + +.main-header { z-index: 0; display: none; background-color: #f5f6fa; } + +@media (min-width: 50rem) { .main-header { display: flex; justify-content: space-between; height: 60px; background-color: #fff; border-bottom: 1px solid #eeebee; } } + +.main-header.nav-open { display: block; } + +@media (min-width: 50rem) { .main-header.nav-open { display: flex; } } + +.site-nav, .site-header, .site-footer { width: 100%; } + +@media (min-width: 66.5rem) { .site-nav, .site-header, .site-footer { width: 264px; } } + +.site-nav { display: none; } + +.site-nav.nav-open { display: block; } + +@media (min-width: 50rem) { .site-nav { display: block; padding-top: 3rem; padding-bottom: 1rem; overflow-y: auto; flex: 1 1 auto; } } + +.site-header { display: flex; min-height: 60px; align-items: center; } + +@media (min-width: 50rem) { .site-header { height: 60px; max-height: 60px; border-bottom: 1px solid #eeebee; } } + +.site-title { padding-right: 1rem; padding-left: 1rem; flex-grow: 1; display: flex; height: 100%; align-items: center; padding-top: 0.75rem; padding-bottom: 0.75rem; color: #27262b; font-size: 18px !important; } + +@media (min-width: 50rem) { .site-title { padding-right: 2rem; padding-left: 2rem; } } + +@media (min-width: 31.25rem) { .site-title { font-size: 24px !important; line-height: 1.25; } } + +@media (min-width: 50rem) { .site-title { padding-top: 0.5rem; padding-bottom: 0.5rem; } } + +.site-button { display: flex; height: 100%; padding: 1rem; align-items: center; } + +@media (min-width: 50rem) { .site-header .site-button { display: none; } } + +.site-title:hover { background-image: linear-gradient(-90deg, #ebedf5 0%, rgba(235, 237, 245, 0.8) 80%, rgba(235, 237, 245, 0) 100%); } + +.site-button:hover { background-image: linear-gradient(-90deg, #ebedf5 0%, rgba(235, 237, 245, 0.8) 100%); } + +body { position: relative; padding-bottom: 4rem; overflow-y: scroll; } + +@media (min-width: 50rem) { body { position: static; padding-bottom: 0; } } + +.site-footer { padding-right: 1rem; padding-left: 1rem; position: absolute; bottom: 0; left: 0; padding-top: 1rem; padding-bottom: 1rem; color: #959396; font-size: 11px !important; } + +@media (min-width: 50rem) { .site-footer { padding-right: 2rem; padding-left: 2rem; } } + +@media (min-width: 31.25rem) { .site-footer { font-size: 12px !important; } } + +@media (min-width: 50rem) { .site-footer { position: static; justify-self: end; } } + +.icon { width: 1.5rem; height: 1.5rem; color: #7253ed; } + +.main-content { line-height: 1.6; } + +.main-content ol, .main-content ul, .main-content dl, .main-content pre, .main-content address, .main-content blockquote, .main-content .table-wrapper { margin-top: 0.5em; } + +.main-content a { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + +.main-content ul, .main-content ol { padding-left: 1.5em; } + +.main-content li .highlight { margin-top: 0.25rem; } + +.main-content ol { list-style-type: none; counter-reset: step-counter; } + +.main-content ol > li { position: relative; } + +.main-content ol > li::before { position: absolute; top: 0.2em; left: -1.6em; color: #959396; content: counter(step-counter); counter-increment: step-counter; font-size: 12px !important; } + +@media (min-width: 31.25rem) { .main-content ol > li::before { font-size: 14px !important; } } + +@media (min-width: 31.25rem) { .main-content ol > li::before { top: 0.11em; } } + +.main-content ol > li ol { counter-reset: sub-counter; } + +.main-content ol > li ol li::before { content: counter(sub-counter, lower-alpha); counter-increment: sub-counter; } + +.main-content ul { list-style: none; } + +.main-content ul > li::before { position: absolute; margin-left: -1.4em; color: #959396; content: "•"; } + +.main-content .task-list { padding-left: 0; } + +.main-content .task-list-item { display: flex; align-items: center; } + +.main-content .task-list-item::before { content: ""; } + +.main-content .task-list-item-checkbox { margin-right: 0.6em; } + +.main-content hr + * { margin-top: 0; } + +.main-content h1:first-of-type { margin-top: 0.5em; } + +.main-content dl { display: grid; grid-template: auto / 10em 1fr; } + +.main-content dt, .main-content dd { margin: 0.25em 0; } + +.main-content dt { grid-column: 1; font-weight: 500; text-align: right; } + +.main-content dt::after { content: ":"; } + +.main-content dd { grid-column: 2; margin-bottom: 0; margin-left: 1em; } + +.main-content .anchor-heading { position: absolute; right: -1rem; width: 1.5rem; height: 100%; padding-right: 0.25rem; padding-left: 0.25rem; overflow: visible; } + +@media (min-width: 50rem) { .main-content .anchor-heading { right: auto; left: -1.5rem; } } + +.main-content .anchor-heading svg { display: inline-block; width: 100%; height: 100%; color: #7253ed; visibility: hidden; } + +.main-content .anchor-heading:hover svg, .main-content h1:hover > .anchor-heading svg, .main-content h2:hover > .anchor-heading svg, .main-content h3:hover > .anchor-heading svg, .main-content h4:hover > .anchor-heading svg, .main-content h5:hover > .anchor-heading svg, .main-content h6:hover > .anchor-heading svg { visibility: visible; } + +.main-content summary { cursor: pointer; } + +.main-content h1, .main-content h2, .main-content h3, .main-content h4, .main-content h5, .main-content h6 { position: relative; margin-top: 1.5em; margin-bottom: 0.25em; } + +.main-content h1:first-child, .main-content h2:first-child, .main-content h3:first-child, .main-content h4:first-child, .main-content h5:first-child, .main-content h6:first-child { margin-top: 0.5rem; } + +.main-content h1 + table, .main-content h1 + .table-wrapper, .main-content h1 + .code-example, .main-content h1 + .highlighter-rouge, .main-content h2 + table, .main-content h2 + .table-wrapper, .main-content h2 + .code-example, .main-content h2 + .highlighter-rouge, .main-content h3 + table, .main-content h3 + .table-wrapper, .main-content h3 + .code-example, .main-content h3 + .highlighter-rouge, .main-content h4 + table, .main-content h4 + .table-wrapper, .main-content h4 + .code-example, .main-content h4 + .highlighter-rouge, .main-content h5 + table, .main-content h5 + .table-wrapper, .main-content h5 + .code-example, .main-content h5 + .highlighter-rouge, .main-content h6 + table, .main-content h6 + .table-wrapper, .main-content h6 + .code-example, .main-content h6 + .highlighter-rouge { margin-top: 1em; } + +.main-content h1 + p, .main-content h2 + p, .main-content h3 + p, .main-content h4 + p, .main-content h5 + p, .main-content h6 + p { margin-top: 0; } + +.nav-list { padding: 0; margin-top: 0; margin-bottom: 0; list-style: none; } + +.nav-list .nav-list-item { font-size: 15px !important; position: relative; margin: 0; } + +@media (min-width: 31.25rem) { .nav-list .nav-list-item { font-size: 16px !important; } } + +@media (min-width: 50rem) { .nav-list .nav-list-item { font-size: 12px !important; } } + +@media (min-width: 50rem) and (min-width: 31.25rem) { .nav-list .nav-list-item { font-size: 14px !important; } } + +.nav-list .nav-list-item .nav-list-link { display: block; min-height: 3rem; padding-top: 0.25rem; padding-bottom: 0.25rem; line-height: 2.5rem; padding-right: 3rem; padding-left: 1rem; } + +@media (min-width: 50rem) { .nav-list .nav-list-item .nav-list-link { min-height: 2rem; line-height: 1.5rem; padding-right: 2rem; padding-left: 2rem; } } + +.nav-list .nav-list-item .nav-list-link.active { font-weight: 600; text-decoration: none; } + +.nav-list .nav-list-item .nav-list-link:hover, .nav-list .nav-list-item .nav-list-link.active { background-image: linear-gradient(-90deg, #ebedf5 0%, rgba(235, 237, 245, 0.8) 80%, rgba(235, 237, 245, 0) 100%); } + +.nav-list .nav-list-item .nav-list-expander { position: absolute; right: 0; width: 3rem; height: 3rem; padding-top: 0.75rem; padding-right: 0.75rem; padding-bottom: 0.75rem; padding-left: 0.75rem; color: #7253ed; } + +@media (min-width: 50rem) { .nav-list .nav-list-item .nav-list-expander { width: 2rem; height: 2rem; padding-top: 0.5rem; padding-right: 0.5rem; padding-bottom: 0.5rem; padding-left: 0.5rem; } } + +.nav-list .nav-list-item .nav-list-expander:hover { background-image: linear-gradient(-90deg, #ebedf5 0%, rgba(235, 237, 245, 0.8) 100%); } + +.nav-list .nav-list-item .nav-list-expander svg { transform: rotate(90deg); } + +.nav-list .nav-list-item > .nav-list { display: none; padding-left: 0.75rem; list-style: none; } + +.nav-list .nav-list-item > .nav-list .nav-list-item { position: relative; } + +.nav-list .nav-list-item > .nav-list .nav-list-item .nav-list-link { color: #5c5962; } + +.nav-list .nav-list-item > .nav-list .nav-list-item .nav-list-expander { color: #5c5962; } + +.nav-list .nav-list-item.active > .nav-list-expander svg { transform: rotate(-90deg); } + +.nav-list .nav-list-item.active > .nav-list { display: block; } + +.nav-category { padding-top: 0.5rem; padding-right: 1rem; padding-bottom: 0.5rem; padding-left: 1rem; font-weight: 600; text-align: end; text-transform: uppercase; border-bottom: 1px solid #eeebee; font-size: 11px !important; } + +@media (min-width: 31.25rem) { .nav-category { font-size: 12px !important; } } + +@media (min-width: 50rem) { .nav-category { padding-right: 2rem; padding-left: 2rem; margin-top: 1rem; text-align: start; } .nav-category:first-child { margin-top: 0; } } + +.aux-nav { height: 100%; overflow-x: auto; font-size: 11px !important; } + +@media (min-width: 31.25rem) { .aux-nav { font-size: 12px !important; } } + +.aux-nav .aux-nav-list { display: flex; height: 100%; padding: 0; margin: 0; list-style: none; } + +.aux-nav .aux-nav-list-item { display: inline-block; height: 100%; padding: 0; margin: 0; } + +@media (min-width: 50rem) { .aux-nav { padding-right: 1rem; } } + +@media (min-width: 50rem) { .breadcrumb-nav { margin-top: -1rem; } } + +.breadcrumb-nav-list { padding-left: 0; margin-bottom: 0.75rem; list-style: none; } + +.breadcrumb-nav-list-item { display: table-cell; font-size: 11px !important; } + +@media (min-width: 31.25rem) { .breadcrumb-nav-list-item { font-size: 12px !important; } } + +.breadcrumb-nav-list-item::before { display: none; } + +.breadcrumb-nav-list-item::after { display: inline-block; margin-right: 0.5rem; margin-left: 0.5rem; color: #959396; content: "/"; } + +.breadcrumb-nav-list-item:last-child::after { content: ""; } + +h1, .text-alpha { font-size: 32px !important; line-height: 1.25; font-weight: 300; } + +@media (min-width: 31.25rem) { h1, .text-alpha { font-size: 36px !important; } } + +h2, .text-beta { font-size: 18px !important; } + +@media (min-width: 31.25rem) { h2, .text-beta { font-size: 24px !important; line-height: 1.25; } } + +h3, .text-gamma { font-size: 16px !important; } + +@media (min-width: 31.25rem) { h3, .text-gamma { font-size: 18px !important; } } + +h4, .text-delta { font-size: 11px !important; font-weight: 400; text-transform: uppercase; letter-spacing: 0.1em; } + +@media (min-width: 31.25rem) { h4, .text-delta { font-size: 12px !important; } } + +h5, .text-epsilon { font-size: 12px !important; color: #44434d; } + +@media (min-width: 31.25rem) { h5, .text-epsilon { font-size: 14px !important; } } + +h6, .text-zeta { font-size: 11px !important; color: #44434d; } + +@media (min-width: 31.25rem) { h6, .text-zeta { font-size: 12px !important; } } + +.text-small { font-size: 11px !important; } + +@media (min-width: 31.25rem) { .text-small { font-size: 12px !important; } } + +.text-mono { font-family: "SFMono-Regular", Menlo, Consolas, Monospace !important; } + +.text-left { text-align: left !important; } + +.text-center { text-align: center !important; } + +.text-right { text-align: right !important; } + +.label, .label-blue { display: inline-block; padding-top: 0.16em; padding-right: 0.56em; padding-bottom: 0.16em; padding-left: 0.56em; margin-right: 0.5rem; margin-left: 0.5rem; color: #fff; text-transform: uppercase; vertical-align: middle; background-color: #2869e6; font-size: 11px !important; border-radius: 12px; } + +@media (min-width: 31.25rem) { .label, .label-blue { font-size: 12px !important; } } + +.label-green { background-color: #009c7b; } + +.label-purple { background-color: #5e41d0; } + +.label-red { background-color: #e94c4c; } + +.label-yellow { color: #44434d; background-color: #f7d12e; } + +.btn { display: inline-block; box-sizing: border-box; padding-top: 0.3em; padding-right: 1em; padding-bottom: 0.3em; padding-left: 1em; margin: 0; font-family: inherit; font-size: inherit; font-weight: 500; line-height: 1.5; color: #7253ed; text-decoration: none; vertical-align: baseline; cursor: pointer; background-color: #f7f7f7; border-width: 0; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); appearance: none; } + +.btn:focus { text-decoration: none; outline: none; box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.25); } + +.btn:focus:hover, .btn.selected:focus { box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.25); } + +.btn:hover, .btn.zeroclipboard-is-hover { color: #6a4aec; } + +.btn:hover, .btn:active, .btn.zeroclipboard-is-hover, .btn.zeroclipboard-is-active { text-decoration: none; background-color: #f4f4f4; } + +.btn:active, .btn.selected, .btn.zeroclipboard-is-active { background-color: #efefef; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn.selected:hover { background-color: #cfcfcf; } + +.btn:disabled, .btn:disabled:hover, .btn.disabled, .btn.disabled:hover { color: rgba(102, 102, 102, 0.5); cursor: default; background-color: rgba(229, 229, 229, 0.5); background-image: none; box-shadow: none; } + +.btn-outline { color: #7253ed; background: transparent; box-shadow: inset 0 0 0 2px #e6e1e8; } + +.btn-outline:hover, .btn-outline:active, .btn-outline.zeroclipboard-is-hover, .btn-outline.zeroclipboard-is-active { color: #6341eb; text-decoration: none; background-color: transparent; box-shadow: inset 0 0 0 3px #e6e1e8; } + +.btn-outline:focus { text-decoration: none; outline: none; box-shadow: inset 0 0 0 2px #5c5962, 0 0 0 3px rgba(0, 0, 255, 0.25); } + +.btn-outline:focus:hover, .btn-outline.selected:focus { box-shadow: inset 0 0 0 2px #5c5962; } + +.btn-primary { color: #fff; background-color: #5739ce; background-image: linear-gradient(#6f55d5, #5739ce); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); } + +.btn-primary:hover, .btn-primary.zeroclipboard-is-hover { color: #fff; background-color: #5132cb; background-image: linear-gradient(#6549d2, #5132cb); } + +.btn-primary:active, .btn-primary.selected, .btn-primary.zeroclipboard-is-active { background-color: #4f31c6; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn-primary.selected:hover { background-color: #472cb2; } + +.btn-purple { color: #fff; background-color: #5739ce; background-image: linear-gradient(#6f55d5, #5739ce); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); } + +.btn-purple:hover, .btn-purple.zeroclipboard-is-hover { color: #fff; background-color: #5132cb; background-image: linear-gradient(#6549d2, #5132cb); } + +.btn-purple:active, .btn-purple.selected, .btn-purple.zeroclipboard-is-active { background-color: #4f31c6; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn-purple.selected:hover { background-color: #472cb2; } + +.btn-blue { color: #fff; background-color: #227efa; background-image: linear-gradient(#4593fb, #227efa); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); } + +.btn-blue:hover, .btn-blue.zeroclipboard-is-hover { color: #fff; background-color: #1878fa; background-image: linear-gradient(#368afa, #1878fa); } + +.btn-blue:active, .btn-blue.selected, .btn-blue.zeroclipboard-is-active { background-color: #1375f9; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn-blue.selected:hover { background-color: #0669ed; } + +.btn-green { color: #fff; background-color: #10ac7d; background-image: linear-gradient(#13cc95, #10ac7d); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); } + +.btn-green:hover, .btn-green.zeroclipboard-is-hover { color: #fff; background-color: #0fa276; background-image: linear-gradient(#12be8b, #0fa276); } + +.btn-green:active, .btn-green.selected, .btn-green.zeroclipboard-is-active { background-color: #0f9e73; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn-green.selected:hover { background-color: #0d8662; } + +.search { position: relative; z-index: 2; flex-grow: 1; height: 4rem; padding: 0.5rem; transition: padding linear 200ms; } + +@media (min-width: 50rem) { .search { position: relative !important; width: auto !important; height: 100% !important; padding: 0; transition: none; } } + +.search-input-wrap { position: relative; z-index: 1; height: 3rem; overflow: hidden; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); transition: height linear 200ms; } + +@media (min-width: 50rem) { .search-input-wrap { position: absolute; width: 100%; max-width: 536px; height: 100% !important; border-radius: 0; box-shadow: none; transition: width ease 400ms; } } + +.search-input { position: absolute; width: 100%; height: 100%; padding-top: 0.5rem; padding-right: 1rem; padding-bottom: 0.5rem; padding-left: 2.5rem; font-size: 16px; background-color: #fff; border-top: 0; border-right: 0; border-bottom: 0; border-left: 0; border-radius: 0; } + +@media (min-width: 50rem) { .search-input { padding-top: 1rem; padding-bottom: 1rem; padding-left: 3.5rem; font-size: 14px; background-color: #fff; transition: padding-left linear 200ms; } } + +.search-input:focus { outline: 0; } + +.search-input:focus + .search-label .search-icon { color: #7253ed; } + +.search-label { position: absolute; display: flex; height: 100%; padding-left: 1rem; } + +@media (min-width: 50rem) { .search-label { padding-left: 2rem; transition: padding-left linear 200ms; } } + +.search-label .search-icon { width: 1.2rem; height: 1.2rem; align-self: center; color: #959396; } + +.search-results { position: absolute; left: 0; display: none; width: 100%; max-height: calc(100% - 4rem); overflow-y: auto; background-color: #fff; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); } + +@media (min-width: 50rem) { .search-results { top: 100%; width: 536px; max-height: calc(100vh - 200%) !important; } } + +.search-results-list { padding-left: 0; margin-bottom: 0.25rem; list-style: none; font-size: 15px !important; } + +@media (min-width: 31.25rem) { .search-results-list { font-size: 16px !important; } } + +@media (min-width: 50rem) { .search-results-list { font-size: 12px !important; } } + +@media (min-width: 50rem) and (min-width: 31.25rem) { .search-results-list { font-size: 14px !important; } } + +.search-results-list-item { padding: 0; margin: 0; } + +.search-result { display: block; padding-top: 0.25rem; padding-right: 0.75rem; padding-bottom: 0.25rem; padding-left: 0.75rem; } + +.search-result:hover, .search-result.active { background-color: #ebedf5; } + +.search-result-title { display: block; padding-top: 0.5rem; padding-bottom: 0.5rem; } + +@media (min-width: 31.25rem) { .search-result-title { display: inline-block; width: 40%; padding-right: 0.5rem; vertical-align: top; } } + +.search-result-doc { display: flex; align-items: center; word-wrap: break-word; } + +.search-result-doc.search-result-doc-parent { opacity: 0.5; font-size: 12px !important; } + +@media (min-width: 31.25rem) { .search-result-doc.search-result-doc-parent { font-size: 14px !important; } } + +@media (min-width: 50rem) { .search-result-doc.search-result-doc-parent { font-size: 11px !important; } } + +@media (min-width: 50rem) and (min-width: 31.25rem) { .search-result-doc.search-result-doc-parent { font-size: 12px !important; } } + +.search-result-doc .search-result-icon { width: 1rem; height: 1rem; margin-right: 0.5rem; color: #7253ed; flex-shrink: 0; } + +.search-result-doc .search-result-doc-title { overflow: auto; } + +.search-result-section { margin-left: 1.5rem; word-wrap: break-word; } + +.search-result-rel-url { display: block; margin-left: 1.5rem; overflow: hidden; color: #959396; text-overflow: ellipsis; white-space: nowrap; font-size: 9px !important; } + +@media (min-width: 31.25rem) { .search-result-rel-url { font-size: 10px !important; } } + +.search-result-previews { display: block; padding-top: 0.5rem; padding-bottom: 0.5rem; padding-left: 1rem; margin-left: 0.5rem; color: #959396; word-wrap: break-word; border-left: 1px solid; border-left-color: #eeebee; font-size: 11px !important; } + +@media (min-width: 31.25rem) { .search-result-previews { font-size: 12px !important; } } + +@media (min-width: 31.25rem) { .search-result-previews { display: inline-block; width: 60%; padding-left: 0.5rem; margin-left: 0; vertical-align: top; } } + +.search-result-preview + .search-result-preview { margin-top: 0.25rem; } + +.search-result-highlight { font-weight: bold; } + +.search-no-result { padding-top: 0.5rem; padding-right: 0.75rem; padding-bottom: 0.5rem; padding-left: 0.75rem; font-size: 12px !important; } + +@media (min-width: 31.25rem) { .search-no-result { font-size: 14px !important; } } + +.search-button { position: fixed; right: 1rem; bottom: 1rem; display: flex; width: 3.5rem; height: 3.5rem; background-color: #fff; border: 1px solid rgba(114, 83, 237, 0.3); border-radius: 1.75rem; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); align-items: center; justify-content: center; } + +.search-overlay { position: fixed; top: 0; left: 0; z-index: 1; width: 0; height: 0; background-color: rgba(0, 0, 0, 0.3); opacity: 0; transition: opacity ease 400ms, width 0s 400ms, height 0s 400ms; } + +.search-active .search { position: fixed; top: 0; left: 0; width: 100%; height: 100%; padding: 0; } + +.search-active .search-input-wrap { height: 4rem; border-radius: 0; } + +@media (min-width: 50rem) { .search-active .search-input-wrap { width: 536px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); } } + +.search-active .search-input { background-color: #fff; } + +@media (min-width: 50rem) { .search-active .search-input { padding-left: 2.75rem; } } + +@media (min-width: 50rem) { .search-active .search-label { padding-left: 1.25rem; } } + +.search-active .search-results { display: block; } + +.search-active .search-overlay { width: 100%; height: 100%; opacity: 1; transition: opacity ease 400ms, width 0s, height 0s; } + +@media (min-width: 50rem) { .search-active .main { position: fixed; right: 0; left: 0; } } + +.search-active .main-header { padding-top: 4rem; } + +@media (min-width: 50rem) { .search-active .main-header { padding-top: 0; } } + +.table-wrapper { display: block; width: 100%; max-width: 100%; margin-bottom: 1.5rem; overflow-x: auto; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); } + +table { display: table; min-width: 100%; border-collapse: separate; } + +th, td { font-size: 12px !important; min-width: 120px; padding-top: 0.5rem; padding-right: 0.75rem; padding-bottom: 0.5rem; padding-left: 0.75rem; background-color: #fff; border-bottom: 1px solid rgba(238, 235, 238, 0.5); border-left: 1px solid #eeebee; } + +@media (min-width: 31.25rem) { th, td { font-size: 14px !important; } } + +th:first-of-type, td:first-of-type { border-left: 0; } + +tbody tr:last-of-type th, tbody tr:last-of-type td { border-bottom: 0; } + +tbody tr:last-of-type td { padding-bottom: 0.75rem; } + +thead th { border-bottom: 1px solid #eeebee; } + +code { padding: 0.2em 0.15em; font-weight: 400; background-color: #f5f6fa; border: 1px solid #eeebee; border-radius: 4px; } + +pre.highlight, figure.highlight { padding: 0.75rem; margin-top: 0; margin-bottom: 0; background-color: #f5f6fa; border-radius: 4px; -webkit-overflow-scrolling: touch; } + +pre.highlight code, figure.highlight code { padding: 0; border: 0; } + +.highlighter-rouge { margin-bottom: 0.75rem; } + +.highlight .c { color: #586e75; } + +.highlight .err { color: #93a1a1; } + +.highlight .g { color: #93a1a1; } + +.highlight .k { color: #859900; } + +.highlight .l { color: #93a1a1; } + +.highlight .n { color: #93a1a1; } + +.highlight .o { color: #859900; } + +.highlight .x { color: #cb4b16; } + +.highlight .p { color: #93a1a1; } + +.highlight .cm { color: #586e75; } + +.highlight .cp { color: #859900; } + +.highlight .c1 { color: #586e75; } + +.highlight .cs { color: #859900; } + +.highlight .gd { color: #2aa198; } + +.highlight .ge { font-style: italic; color: #93a1a1; } + +.highlight .gr { color: #dc322f; } + +.highlight .gh { color: #cb4b16; } + +.highlight .gi { color: #859900; } + +.highlight .go { color: #93a1a1; } + +.highlight .gp { color: #93a1a1; } + +.highlight .gs { font-weight: bold; color: #93a1a1; } + +.highlight .gu { color: #cb4b16; } + +.highlight .gt { color: #93a1a1; } + +.highlight .kc { color: #cb4b16; } + +.highlight .kd { color: #268bd2; } + +.highlight .kn { color: #859900; } + +.highlight .kp { color: #859900; } + +.highlight .kr { color: #268bd2; } + +.highlight .kt { color: #dc322f; } + +.highlight .ld { color: #93a1a1; } + +.highlight .m { color: #2aa198; } + +.highlight .s { color: #2aa198; } + +.highlight .na { color: #555; } + +.highlight .nb { color: #b58900; } + +.highlight .nc { color: #268bd2; } + +.highlight .no { color: #cb4b16; } + +.highlight .nd { color: #268bd2; } + +.highlight .ni { color: #cb4b16; } + +.highlight .ne { color: #cb4b16; } + +.highlight .nf { color: #268bd2; } + +.highlight .nl { color: #555; } + +.highlight .nn { color: #93a1a1; } + +.highlight .nx { color: #555; } + +.highlight .py { color: #93a1a1; } + +.highlight .nt { color: #268bd2; } + +.highlight .nv { color: #268bd2; } + +.highlight .ow { color: #859900; } + +.highlight .w { color: #93a1a1; } + +.highlight .mf { color: #2aa198; } + +.highlight .mh { color: #2aa198; } + +.highlight .mi { color: #2aa198; } + +.highlight .mo { color: #2aa198; } + +.highlight .sb { color: #586e75; } + +.highlight .sc { color: #2aa198; } + +.highlight .sd { color: #93a1a1; } + +.highlight .s2 { color: #2aa198; } + +.highlight .se { color: #cb4b16; } + +.highlight .sh { color: #93a1a1; } + +.highlight .si { color: #2aa198; } + +.highlight .sx { color: #2aa198; } + +.highlight .sr { color: #dc322f; } + +.highlight .s1 { color: #2aa198; } + +.highlight .ss { color: #2aa198; } + +.highlight .bp { color: #268bd2; } + +.highlight .vc { color: #268bd2; } + +.highlight .vg { color: #268bd2; } + +.highlight .vi { color: #268bd2; } + +.highlight .il { color: #2aa198; } + +.code-example { padding: 0.75rem; margin-bottom: 0.75rem; overflow: auto; border: 1px solid #eeebee; border-radius: 4px; } + +.code-example + .highlighter-rouge, .code-example + figure.highlight { position: relative; margin-top: -1rem; border-right: 1px solid #eeebee; border-bottom: 1px solid #eeebee; border-left: 1px solid #eeebee; border-top-left-radius: 0; border-top-right-radius: 0; } + +.text-grey-dk-000 { color: #959396 !important; } + +.text-grey-dk-100 { color: #5c5962 !important; } + +.text-grey-dk-200 { color: #44434d !important; } + +.text-grey-dk-250 { color: #302d36 !important; } + +.text-grey-dk-300 { color: #27262b !important; } + +.text-grey-lt-000 { color: #f5f6fa !important; } + +.text-grey-lt-100 { color: #eeebee !important; } + +.text-grey-lt-200 { color: #ecebed !important; } + +.text-grey-lt-300 { color: #e6e1e8 !important; } + +.text-blue-000 { color: #2c84fa !important; } + +.text-blue-100 { color: #2869e6 !important; } + +.text-blue-200 { color: #264caf !important; } + +.text-blue-300 { color: #183385 !important; } + +.text-green-000 { color: #41d693 !important; } + +.text-green-100 { color: #11b584 !important; } + +.text-green-200 { color: #009c7b !important; } + +.text-green-300 { color: #026e57 !important; } + +.text-purple-000 { color: #7253ed !important; } + +.text-purple-100 { color: #5e41d0 !important; } + +.text-purple-200 { color: #4e26af !important; } + +.text-purple-300 { color: #381885 !important; } + +.text-yellow-000 { color: #ffeb82 !important; } + +.text-yellow-100 { color: #fadf50 !important; } + +.text-yellow-200 { color: #f7d12e !important; } + +.text-yellow-300 { color: #e7af06 !important; } + +.text-red-000 { color: #f77e7e !important; } + +.text-red-100 { color: #f96e65 !important; } + +.text-red-200 { color: #e94c4c !important; } + +.text-red-300 { color: #dd2e2e !important; } + +.bg-grey-dk-000 { background-color: #959396 !important; } + +.bg-grey-dk-100 { background-color: #5c5962 !important; } + +.bg-grey-dk-200 { background-color: #44434d !important; } + +.bg-grey-dk-250 { background-color: #302d36 !important; } + +.bg-grey-dk-300 { background-color: #27262b !important; } + +.bg-grey-lt-000 { background-color: #f5f6fa !important; } + +.bg-grey-lt-100 { background-color: #eeebee !important; } + +.bg-grey-lt-200 { background-color: #ecebed !important; } + +.bg-grey-lt-300 { background-color: #e6e1e8 !important; } + +.bg-blue-000 { background-color: #2c84fa !important; } + +.bg-blue-100 { background-color: #2869e6 !important; } + +.bg-blue-200 { background-color: #264caf !important; } + +.bg-blue-300 { background-color: #183385 !important; } + +.bg-green-000 { background-color: #41d693 !important; } + +.bg-green-100 { background-color: #11b584 !important; } + +.bg-green-200 { background-color: #009c7b !important; } + +.bg-green-300 { background-color: #026e57 !important; } + +.bg-purple-000 { background-color: #7253ed !important; } + +.bg-purple-100 { background-color: #5e41d0 !important; } + +.bg-purple-200 { background-color: #4e26af !important; } + +.bg-purple-300 { background-color: #381885 !important; } + +.bg-yellow-000 { background-color: #ffeb82 !important; } + +.bg-yellow-100 { background-color: #fadf50 !important; } + +.bg-yellow-200 { background-color: #f7d12e !important; } + +.bg-yellow-300 { background-color: #e7af06 !important; } + +.bg-red-000 { background-color: #f77e7e !important; } + +.bg-red-100 { background-color: #f96e65 !important; } + +.bg-red-200 { background-color: #e94c4c !important; } + +.bg-red-300 { background-color: #dd2e2e !important; } + +.d-block { display: block !important; } + +.d-flex { display: flex !important; } + +.d-inline { display: inline !important; } + +.d-inline-block { display: inline-block !important; } + +.d-none { display: none !important; } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +.float-left { float: left !important; } + +.float-right { float: right !important; } + +.flex-justify-start { justify-content: flex-start !important; } + +.flex-justify-end { justify-content: flex-end !important; } + +.flex-justify-between { justify-content: space-between !important; } + +.flex-justify-around { justify-content: space-around !important; } + +.v-align-baseline { vertical-align: baseline !important; } + +.v-align-bottom { vertical-align: bottom !important; } + +.v-align-middle { vertical-align: middle !important; } + +.v-align-text-bottom { vertical-align: text-bottom !important; } + +.v-align-text-top { vertical-align: text-top !important; } + +.v-align-top { vertical-align: top !important; } + +.fs-1 { font-size: 9px !important; } + +@media (min-width: 31.25rem) { .fs-1 { font-size: 10px !important; } } + +.fs-2 { font-size: 11px !important; } + +@media (min-width: 31.25rem) { .fs-2 { font-size: 12px !important; } } + +.fs-3 { font-size: 12px !important; } + +@media (min-width: 31.25rem) { .fs-3 { font-size: 14px !important; } } + +.fs-4 { font-size: 15px !important; } + +@media (min-width: 31.25rem) { .fs-4 { font-size: 16px !important; } } + +.fs-5 { font-size: 16px !important; } + +@media (min-width: 31.25rem) { .fs-5 { font-size: 18px !important; } } + +.fs-6 { font-size: 18px !important; } + +@media (min-width: 31.25rem) { .fs-6 { font-size: 24px !important; line-height: 1.25; } } + +.fs-7 { font-size: 24px !important; line-height: 1.25; } + +@media (min-width: 31.25rem) { .fs-7 { font-size: 32px !important; } } + +.fs-8 { font-size: 32px !important; line-height: 1.25; } + +@media (min-width: 31.25rem) { .fs-8 { font-size: 36px !important; } } + +.fs-9 { font-size: 36px !important; line-height: 1.25; } + +@media (min-width: 31.25rem) { .fs-9 { font-size: 42px !important; } } + +.fs-10 { font-size: 42px !important; line-height: 1.25; } + +@media (min-width: 31.25rem) { .fs-10 { font-size: 48px !important; } } + +.fw-300 { font-weight: 300 !important; } + +.fw-400 { font-weight: 400 !important; } + +.fw-500 { font-weight: 500 !important; } + +.fw-700 { font-weight: 700 !important; } + +.lh-0 { line-height: 0 !important; } + +.lh-default { line-height: 1.4; } + +.lh-tight { line-height: 1.25; } + +.ls-5 { letter-spacing: 0.05em !important; } + +.ls-10 { letter-spacing: 0.1em !important; } + +.ls-0 { letter-spacing: 0 !important; } + +.text-uppercase { text-transform: uppercase !important; } + +.list-style-none { padding: 0 !important; margin: 0 !important; list-style: none !important; } + +.list-style-none li::before { display: none !important; } + +.mx-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-0 { margin: 0 !important; } + +.mt-0 { margin-top: 0 !important; } + +.mr-0 { margin-right: 0 !important; } + +.mb-0 { margin-bottom: 0 !important; } + +.ml-0 { margin-left: 0 !important; } + +.mx-0 { margin-right: 0 !important; margin-left: 0 !important; } + +.my-0 { margin-top: 0 !important; margin-bottom: 0 !important; } + +.mxn-0 { margin-right: -0 !important; margin-left: -0 !important; } + +.mx-0-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-1 { margin: 0.25rem !important; } + +.mt-1 { margin-top: 0.25rem !important; } + +.mr-1 { margin-right: 0.25rem !important; } + +.mb-1 { margin-bottom: 0.25rem !important; } + +.ml-1 { margin-left: 0.25rem !important; } + +.mx-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } + +.my-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } + +.mxn-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } + +.mx-1-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-2 { margin: 0.5rem !important; } + +.mt-2 { margin-top: 0.5rem !important; } + +.mr-2 { margin-right: 0.5rem !important; } + +.mb-2 { margin-bottom: 0.5rem !important; } + +.ml-2 { margin-left: 0.5rem !important; } + +.mx-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } + +.my-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } + +.mxn-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } + +.mx-2-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-3 { margin: 0.75rem !important; } + +.mt-3 { margin-top: 0.75rem !important; } + +.mr-3 { margin-right: 0.75rem !important; } + +.mb-3 { margin-bottom: 0.75rem !important; } + +.ml-3 { margin-left: 0.75rem !important; } + +.mx-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } + +.my-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } + +.mxn-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } + +.mx-3-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-4 { margin: 1rem !important; } + +.mt-4 { margin-top: 1rem !important; } + +.mr-4 { margin-right: 1rem !important; } + +.mb-4 { margin-bottom: 1rem !important; } + +.ml-4 { margin-left: 1rem !important; } + +.mx-4 { margin-right: 1rem !important; margin-left: 1rem !important; } + +.my-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } + +.mxn-4 { margin-right: -1rem !important; margin-left: -1rem !important; } + +.mx-4-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-5 { margin: 1.5rem !important; } + +.mt-5 { margin-top: 1.5rem !important; } + +.mr-5 { margin-right: 1.5rem !important; } + +.mb-5 { margin-bottom: 1.5rem !important; } + +.ml-5 { margin-left: 1.5rem !important; } + +.mx-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } + +.my-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } + +.mxn-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } + +.mx-5-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-6 { margin: 2rem !important; } + +.mt-6 { margin-top: 2rem !important; } + +.mr-6 { margin-right: 2rem !important; } + +.mb-6 { margin-bottom: 2rem !important; } + +.ml-6 { margin-left: 2rem !important; } + +.mx-6 { margin-right: 2rem !important; margin-left: 2rem !important; } + +.my-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } + +.mxn-6 { margin-right: -2rem !important; margin-left: -2rem !important; } + +.mx-6-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-7 { margin: 2.5rem !important; } + +.mt-7 { margin-top: 2.5rem !important; } + +.mr-7 { margin-right: 2.5rem !important; } + +.mb-7 { margin-bottom: 2.5rem !important; } + +.ml-7 { margin-left: 2.5rem !important; } + +.mx-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } + +.my-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } + +.mxn-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } + +.mx-7-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-8 { margin: 3rem !important; } + +.mt-8 { margin-top: 3rem !important; } + +.mr-8 { margin-right: 3rem !important; } + +.mb-8 { margin-bottom: 3rem !important; } + +.ml-8 { margin-left: 3rem !important; } + +.mx-8 { margin-right: 3rem !important; margin-left: 3rem !important; } + +.my-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } + +.mxn-8 { margin-right: -3rem !important; margin-left: -3rem !important; } + +.mx-8-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-9 { margin: 3.5rem !important; } + +.mt-9 { margin-top: 3.5rem !important; } + +.mr-9 { margin-right: 3.5rem !important; } + +.mb-9 { margin-bottom: 3.5rem !important; } + +.ml-9 { margin-left: 3.5rem !important; } + +.mx-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } + +.my-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } + +.mxn-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } + +.mx-9-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-10 { margin: 4rem !important; } + +.mt-10 { margin-top: 4rem !important; } + +.mr-10 { margin-right: 4rem !important; } + +.mb-10 { margin-bottom: 4rem !important; } + +.ml-10 { margin-left: 4rem !important; } + +.mx-10 { margin-right: 4rem !important; margin-left: 4rem !important; } + +.my-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } + +.mxn-10 { margin-right: -4rem !important; margin-left: -4rem !important; } + +.mx-10-auto { margin-right: auto !important; margin-left: auto !important; } + +@media (min-width: 20rem) { .m-xs-0 { margin: 0 !important; } .mt-xs-0 { margin-top: 0 !important; } .mr-xs-0 { margin-right: 0 !important; } .mb-xs-0 { margin-bottom: 0 !important; } .ml-xs-0 { margin-left: 0 !important; } .mx-xs-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-xs-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-xs-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 20rem) { .m-xs-1 { margin: 0.25rem !important; } .mt-xs-1 { margin-top: 0.25rem !important; } .mr-xs-1 { margin-right: 0.25rem !important; } .mb-xs-1 { margin-bottom: 0.25rem !important; } .ml-xs-1 { margin-left: 0.25rem !important; } .mx-xs-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-xs-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-xs-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 20rem) { .m-xs-2 { margin: 0.5rem !important; } .mt-xs-2 { margin-top: 0.5rem !important; } .mr-xs-2 { margin-right: 0.5rem !important; } .mb-xs-2 { margin-bottom: 0.5rem !important; } .ml-xs-2 { margin-left: 0.5rem !important; } .mx-xs-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-xs-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-xs-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 20rem) { .m-xs-3 { margin: 0.75rem !important; } .mt-xs-3 { margin-top: 0.75rem !important; } .mr-xs-3 { margin-right: 0.75rem !important; } .mb-xs-3 { margin-bottom: 0.75rem !important; } .ml-xs-3 { margin-left: 0.75rem !important; } .mx-xs-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-xs-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-xs-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 20rem) { .m-xs-4 { margin: 1rem !important; } .mt-xs-4 { margin-top: 1rem !important; } .mr-xs-4 { margin-right: 1rem !important; } .mb-xs-4 { margin-bottom: 1rem !important; } .ml-xs-4 { margin-left: 1rem !important; } .mx-xs-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-xs-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-xs-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 20rem) { .m-xs-5 { margin: 1.5rem !important; } .mt-xs-5 { margin-top: 1.5rem !important; } .mr-xs-5 { margin-right: 1.5rem !important; } .mb-xs-5 { margin-bottom: 1.5rem !important; } .ml-xs-5 { margin-left: 1.5rem !important; } .mx-xs-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-xs-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-xs-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 20rem) { .m-xs-6 { margin: 2rem !important; } .mt-xs-6 { margin-top: 2rem !important; } .mr-xs-6 { margin-right: 2rem !important; } .mb-xs-6 { margin-bottom: 2rem !important; } .ml-xs-6 { margin-left: 2rem !important; } .mx-xs-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-xs-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-xs-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 20rem) { .m-xs-7 { margin: 2.5rem !important; } .mt-xs-7 { margin-top: 2.5rem !important; } .mr-xs-7 { margin-right: 2.5rem !important; } .mb-xs-7 { margin-bottom: 2.5rem !important; } .ml-xs-7 { margin-left: 2.5rem !important; } .mx-xs-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-xs-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-xs-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 20rem) { .m-xs-8 { margin: 3rem !important; } .mt-xs-8 { margin-top: 3rem !important; } .mr-xs-8 { margin-right: 3rem !important; } .mb-xs-8 { margin-bottom: 3rem !important; } .ml-xs-8 { margin-left: 3rem !important; } .mx-xs-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-xs-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-xs-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 20rem) { .m-xs-9 { margin: 3.5rem !important; } .mt-xs-9 { margin-top: 3.5rem !important; } .mr-xs-9 { margin-right: 3.5rem !important; } .mb-xs-9 { margin-bottom: 3.5rem !important; } .ml-xs-9 { margin-left: 3.5rem !important; } .mx-xs-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-xs-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-xs-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 20rem) { .m-xs-10 { margin: 4rem !important; } .mt-xs-10 { margin-top: 4rem !important; } .mr-xs-10 { margin-right: 4rem !important; } .mb-xs-10 { margin-bottom: 4rem !important; } .ml-xs-10 { margin-left: 4rem !important; } .mx-xs-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-xs-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-xs-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-0 { margin: 0 !important; } .mt-sm-0 { margin-top: 0 !important; } .mr-sm-0 { margin-right: 0 !important; } .mb-sm-0 { margin-bottom: 0 !important; } .ml-sm-0 { margin-left: 0 !important; } .mx-sm-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-sm-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-sm-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 31.25rem) { .m-sm-1 { margin: 0.25rem !important; } .mt-sm-1 { margin-top: 0.25rem !important; } .mr-sm-1 { margin-right: 0.25rem !important; } .mb-sm-1 { margin-bottom: 0.25rem !important; } .ml-sm-1 { margin-left: 0.25rem !important; } .mx-sm-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-sm-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-sm-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-2 { margin: 0.5rem !important; } .mt-sm-2 { margin-top: 0.5rem !important; } .mr-sm-2 { margin-right: 0.5rem !important; } .mb-sm-2 { margin-bottom: 0.5rem !important; } .ml-sm-2 { margin-left: 0.5rem !important; } .mx-sm-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-sm-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-sm-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-3 { margin: 0.75rem !important; } .mt-sm-3 { margin-top: 0.75rem !important; } .mr-sm-3 { margin-right: 0.75rem !important; } .mb-sm-3 { margin-bottom: 0.75rem !important; } .ml-sm-3 { margin-left: 0.75rem !important; } .mx-sm-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-sm-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-sm-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-4 { margin: 1rem !important; } .mt-sm-4 { margin-top: 1rem !important; } .mr-sm-4 { margin-right: 1rem !important; } .mb-sm-4 { margin-bottom: 1rem !important; } .ml-sm-4 { margin-left: 1rem !important; } .mx-sm-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-sm-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-sm-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-5 { margin: 1.5rem !important; } .mt-sm-5 { margin-top: 1.5rem !important; } .mr-sm-5 { margin-right: 1.5rem !important; } .mb-sm-5 { margin-bottom: 1.5rem !important; } .ml-sm-5 { margin-left: 1.5rem !important; } .mx-sm-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-sm-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-sm-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-6 { margin: 2rem !important; } .mt-sm-6 { margin-top: 2rem !important; } .mr-sm-6 { margin-right: 2rem !important; } .mb-sm-6 { margin-bottom: 2rem !important; } .ml-sm-6 { margin-left: 2rem !important; } .mx-sm-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-sm-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-sm-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-7 { margin: 2.5rem !important; } .mt-sm-7 { margin-top: 2.5rem !important; } .mr-sm-7 { margin-right: 2.5rem !important; } .mb-sm-7 { margin-bottom: 2.5rem !important; } .ml-sm-7 { margin-left: 2.5rem !important; } .mx-sm-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-sm-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-sm-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-8 { margin: 3rem !important; } .mt-sm-8 { margin-top: 3rem !important; } .mr-sm-8 { margin-right: 3rem !important; } .mb-sm-8 { margin-bottom: 3rem !important; } .ml-sm-8 { margin-left: 3rem !important; } .mx-sm-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-sm-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-sm-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-9 { margin: 3.5rem !important; } .mt-sm-9 { margin-top: 3.5rem !important; } .mr-sm-9 { margin-right: 3.5rem !important; } .mb-sm-9 { margin-bottom: 3.5rem !important; } .ml-sm-9 { margin-left: 3.5rem !important; } .mx-sm-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-sm-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-sm-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-10 { margin: 4rem !important; } .mt-sm-10 { margin-top: 4rem !important; } .mr-sm-10 { margin-right: 4rem !important; } .mb-sm-10 { margin-bottom: 4rem !important; } .ml-sm-10 { margin-left: 4rem !important; } .mx-sm-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-sm-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-sm-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +@media (min-width: 50rem) { .m-md-0 { margin: 0 !important; } .mt-md-0 { margin-top: 0 !important; } .mr-md-0 { margin-right: 0 !important; } .mb-md-0 { margin-bottom: 0 !important; } .ml-md-0 { margin-left: 0 !important; } .mx-md-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-md-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-md-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 50rem) { .m-md-1 { margin: 0.25rem !important; } .mt-md-1 { margin-top: 0.25rem !important; } .mr-md-1 { margin-right: 0.25rem !important; } .mb-md-1 { margin-bottom: 0.25rem !important; } .ml-md-1 { margin-left: 0.25rem !important; } .mx-md-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-md-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-md-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 50rem) { .m-md-2 { margin: 0.5rem !important; } .mt-md-2 { margin-top: 0.5rem !important; } .mr-md-2 { margin-right: 0.5rem !important; } .mb-md-2 { margin-bottom: 0.5rem !important; } .ml-md-2 { margin-left: 0.5rem !important; } .mx-md-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-md-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-md-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 50rem) { .m-md-3 { margin: 0.75rem !important; } .mt-md-3 { margin-top: 0.75rem !important; } .mr-md-3 { margin-right: 0.75rem !important; } .mb-md-3 { margin-bottom: 0.75rem !important; } .ml-md-3 { margin-left: 0.75rem !important; } .mx-md-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-md-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-md-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 50rem) { .m-md-4 { margin: 1rem !important; } .mt-md-4 { margin-top: 1rem !important; } .mr-md-4 { margin-right: 1rem !important; } .mb-md-4 { margin-bottom: 1rem !important; } .ml-md-4 { margin-left: 1rem !important; } .mx-md-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-md-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-md-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 50rem) { .m-md-5 { margin: 1.5rem !important; } .mt-md-5 { margin-top: 1.5rem !important; } .mr-md-5 { margin-right: 1.5rem !important; } .mb-md-5 { margin-bottom: 1.5rem !important; } .ml-md-5 { margin-left: 1.5rem !important; } .mx-md-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-md-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-md-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 50rem) { .m-md-6 { margin: 2rem !important; } .mt-md-6 { margin-top: 2rem !important; } .mr-md-6 { margin-right: 2rem !important; } .mb-md-6 { margin-bottom: 2rem !important; } .ml-md-6 { margin-left: 2rem !important; } .mx-md-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-md-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-md-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 50rem) { .m-md-7 { margin: 2.5rem !important; } .mt-md-7 { margin-top: 2.5rem !important; } .mr-md-7 { margin-right: 2.5rem !important; } .mb-md-7 { margin-bottom: 2.5rem !important; } .ml-md-7 { margin-left: 2.5rem !important; } .mx-md-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-md-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-md-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 50rem) { .m-md-8 { margin: 3rem !important; } .mt-md-8 { margin-top: 3rem !important; } .mr-md-8 { margin-right: 3rem !important; } .mb-md-8 { margin-bottom: 3rem !important; } .ml-md-8 { margin-left: 3rem !important; } .mx-md-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-md-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-md-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 50rem) { .m-md-9 { margin: 3.5rem !important; } .mt-md-9 { margin-top: 3.5rem !important; } .mr-md-9 { margin-right: 3.5rem !important; } .mb-md-9 { margin-bottom: 3.5rem !important; } .ml-md-9 { margin-left: 3.5rem !important; } .mx-md-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-md-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-md-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 50rem) { .m-md-10 { margin: 4rem !important; } .mt-md-10 { margin-top: 4rem !important; } .mr-md-10 { margin-right: 4rem !important; } .mb-md-10 { margin-bottom: 4rem !important; } .ml-md-10 { margin-left: 4rem !important; } .mx-md-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-md-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-md-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-0 { margin: 0 !important; } .mt-lg-0 { margin-top: 0 !important; } .mr-lg-0 { margin-right: 0 !important; } .mb-lg-0 { margin-bottom: 0 !important; } .ml-lg-0 { margin-left: 0 !important; } .mx-lg-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-lg-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-lg-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 66.5rem) { .m-lg-1 { margin: 0.25rem !important; } .mt-lg-1 { margin-top: 0.25rem !important; } .mr-lg-1 { margin-right: 0.25rem !important; } .mb-lg-1 { margin-bottom: 0.25rem !important; } .ml-lg-1 { margin-left: 0.25rem !important; } .mx-lg-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-lg-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-lg-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-2 { margin: 0.5rem !important; } .mt-lg-2 { margin-top: 0.5rem !important; } .mr-lg-2 { margin-right: 0.5rem !important; } .mb-lg-2 { margin-bottom: 0.5rem !important; } .ml-lg-2 { margin-left: 0.5rem !important; } .mx-lg-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-lg-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-lg-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-3 { margin: 0.75rem !important; } .mt-lg-3 { margin-top: 0.75rem !important; } .mr-lg-3 { margin-right: 0.75rem !important; } .mb-lg-3 { margin-bottom: 0.75rem !important; } .ml-lg-3 { margin-left: 0.75rem !important; } .mx-lg-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-lg-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-lg-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-4 { margin: 1rem !important; } .mt-lg-4 { margin-top: 1rem !important; } .mr-lg-4 { margin-right: 1rem !important; } .mb-lg-4 { margin-bottom: 1rem !important; } .ml-lg-4 { margin-left: 1rem !important; } .mx-lg-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-lg-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-lg-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-5 { margin: 1.5rem !important; } .mt-lg-5 { margin-top: 1.5rem !important; } .mr-lg-5 { margin-right: 1.5rem !important; } .mb-lg-5 { margin-bottom: 1.5rem !important; } .ml-lg-5 { margin-left: 1.5rem !important; } .mx-lg-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-lg-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-lg-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-6 { margin: 2rem !important; } .mt-lg-6 { margin-top: 2rem !important; } .mr-lg-6 { margin-right: 2rem !important; } .mb-lg-6 { margin-bottom: 2rem !important; } .ml-lg-6 { margin-left: 2rem !important; } .mx-lg-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-lg-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-lg-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-7 { margin: 2.5rem !important; } .mt-lg-7 { margin-top: 2.5rem !important; } .mr-lg-7 { margin-right: 2.5rem !important; } .mb-lg-7 { margin-bottom: 2.5rem !important; } .ml-lg-7 { margin-left: 2.5rem !important; } .mx-lg-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-lg-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-lg-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-8 { margin: 3rem !important; } .mt-lg-8 { margin-top: 3rem !important; } .mr-lg-8 { margin-right: 3rem !important; } .mb-lg-8 { margin-bottom: 3rem !important; } .ml-lg-8 { margin-left: 3rem !important; } .mx-lg-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-lg-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-lg-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-9 { margin: 3.5rem !important; } .mt-lg-9 { margin-top: 3.5rem !important; } .mr-lg-9 { margin-right: 3.5rem !important; } .mb-lg-9 { margin-bottom: 3.5rem !important; } .ml-lg-9 { margin-left: 3.5rem !important; } .mx-lg-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-lg-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-lg-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-10 { margin: 4rem !important; } .mt-lg-10 { margin-top: 4rem !important; } .mr-lg-10 { margin-right: 4rem !important; } .mb-lg-10 { margin-bottom: 4rem !important; } .ml-lg-10 { margin-left: 4rem !important; } .mx-lg-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-lg-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-lg-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-0 { margin: 0 !important; } .mt-xl-0 { margin-top: 0 !important; } .mr-xl-0 { margin-right: 0 !important; } .mb-xl-0 { margin-bottom: 0 !important; } .ml-xl-0 { margin-left: 0 !important; } .mx-xl-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-xl-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-xl-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 87.5rem) { .m-xl-1 { margin: 0.25rem !important; } .mt-xl-1 { margin-top: 0.25rem !important; } .mr-xl-1 { margin-right: 0.25rem !important; } .mb-xl-1 { margin-bottom: 0.25rem !important; } .ml-xl-1 { margin-left: 0.25rem !important; } .mx-xl-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-xl-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-xl-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-2 { margin: 0.5rem !important; } .mt-xl-2 { margin-top: 0.5rem !important; } .mr-xl-2 { margin-right: 0.5rem !important; } .mb-xl-2 { margin-bottom: 0.5rem !important; } .ml-xl-2 { margin-left: 0.5rem !important; } .mx-xl-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-xl-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-xl-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-3 { margin: 0.75rem !important; } .mt-xl-3 { margin-top: 0.75rem !important; } .mr-xl-3 { margin-right: 0.75rem !important; } .mb-xl-3 { margin-bottom: 0.75rem !important; } .ml-xl-3 { margin-left: 0.75rem !important; } .mx-xl-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-xl-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-xl-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-4 { margin: 1rem !important; } .mt-xl-4 { margin-top: 1rem !important; } .mr-xl-4 { margin-right: 1rem !important; } .mb-xl-4 { margin-bottom: 1rem !important; } .ml-xl-4 { margin-left: 1rem !important; } .mx-xl-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-xl-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-xl-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-5 { margin: 1.5rem !important; } .mt-xl-5 { margin-top: 1.5rem !important; } .mr-xl-5 { margin-right: 1.5rem !important; } .mb-xl-5 { margin-bottom: 1.5rem !important; } .ml-xl-5 { margin-left: 1.5rem !important; } .mx-xl-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-xl-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-xl-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-6 { margin: 2rem !important; } .mt-xl-6 { margin-top: 2rem !important; } .mr-xl-6 { margin-right: 2rem !important; } .mb-xl-6 { margin-bottom: 2rem !important; } .ml-xl-6 { margin-left: 2rem !important; } .mx-xl-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-xl-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-xl-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-7 { margin: 2.5rem !important; } .mt-xl-7 { margin-top: 2.5rem !important; } .mr-xl-7 { margin-right: 2.5rem !important; } .mb-xl-7 { margin-bottom: 2.5rem !important; } .ml-xl-7 { margin-left: 2.5rem !important; } .mx-xl-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-xl-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-xl-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-8 { margin: 3rem !important; } .mt-xl-8 { margin-top: 3rem !important; } .mr-xl-8 { margin-right: 3rem !important; } .mb-xl-8 { margin-bottom: 3rem !important; } .ml-xl-8 { margin-left: 3rem !important; } .mx-xl-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-xl-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-xl-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-9 { margin: 3.5rem !important; } .mt-xl-9 { margin-top: 3.5rem !important; } .mr-xl-9 { margin-right: 3.5rem !important; } .mb-xl-9 { margin-bottom: 3.5rem !important; } .ml-xl-9 { margin-left: 3.5rem !important; } .mx-xl-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-xl-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-xl-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-10 { margin: 4rem !important; } .mt-xl-10 { margin-top: 4rem !important; } .mr-xl-10 { margin-right: 4rem !important; } .mb-xl-10 { margin-bottom: 4rem !important; } .ml-xl-10 { margin-left: 4rem !important; } .mx-xl-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-xl-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-xl-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +.p-0 { padding: 0 !important; } + +.pt-0 { padding-top: 0 !important; } + +.pr-0 { padding-right: 0 !important; } + +.pb-0 { padding-bottom: 0 !important; } + +.pl-0 { padding-left: 0 !important; } + +.px-0 { padding-right: 0 !important; padding-left: 0 !important; } + +.py-0 { padding-top: 0 !important; padding-bottom: 0 !important; } + +.p-1 { padding: 0.25rem !important; } + +.pt-1 { padding-top: 0.25rem !important; } + +.pr-1 { padding-right: 0.25rem !important; } + +.pb-1 { padding-bottom: 0.25rem !important; } + +.pl-1 { padding-left: 0.25rem !important; } + +.px-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } + +.py-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } + +.p-2 { padding: 0.5rem !important; } + +.pt-2 { padding-top: 0.5rem !important; } + +.pr-2 { padding-right: 0.5rem !important; } + +.pb-2 { padding-bottom: 0.5rem !important; } + +.pl-2 { padding-left: 0.5rem !important; } + +.px-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } + +.py-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } + +.p-3 { padding: 0.75rem !important; } + +.pt-3 { padding-top: 0.75rem !important; } + +.pr-3 { padding-right: 0.75rem !important; } + +.pb-3 { padding-bottom: 0.75rem !important; } + +.pl-3 { padding-left: 0.75rem !important; } + +.px-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } + +.py-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } + +.p-4 { padding: 1rem !important; } + +.pt-4 { padding-top: 1rem !important; } + +.pr-4 { padding-right: 1rem !important; } + +.pb-4 { padding-bottom: 1rem !important; } + +.pl-4 { padding-left: 1rem !important; } + +.px-4 { padding-right: 1rem !important; padding-left: 1rem !important; } + +.py-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } + +.p-5 { padding: 1.5rem !important; } + +.pt-5 { padding-top: 1.5rem !important; } + +.pr-5 { padding-right: 1.5rem !important; } + +.pb-5 { padding-bottom: 1.5rem !important; } + +.pl-5 { padding-left: 1.5rem !important; } + +.px-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } + +.py-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } + +.p-6 { padding: 2rem !important; } + +.pt-6 { padding-top: 2rem !important; } + +.pr-6 { padding-right: 2rem !important; } + +.pb-6 { padding-bottom: 2rem !important; } + +.pl-6 { padding-left: 2rem !important; } + +.px-6 { padding-right: 2rem !important; padding-left: 2rem !important; } + +.py-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } + +.p-7 { padding: 2.5rem !important; } + +.pt-7 { padding-top: 2.5rem !important; } + +.pr-7 { padding-right: 2.5rem !important; } + +.pb-7 { padding-bottom: 2.5rem !important; } + +.pl-7 { padding-left: 2.5rem !important; } + +.px-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } + +.py-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } + +.p-8 { padding: 3rem !important; } + +.pt-8 { padding-top: 3rem !important; } + +.pr-8 { padding-right: 3rem !important; } + +.pb-8 { padding-bottom: 3rem !important; } + +.pl-8 { padding-left: 3rem !important; } + +.px-8 { padding-right: 3rem !important; padding-left: 3rem !important; } + +.py-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } + +.p-9 { padding: 3.5rem !important; } + +.pt-9 { padding-top: 3.5rem !important; } + +.pr-9 { padding-right: 3.5rem !important; } + +.pb-9 { padding-bottom: 3.5rem !important; } + +.pl-9 { padding-left: 3.5rem !important; } + +.px-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } + +.py-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } + +.p-10 { padding: 4rem !important; } + +.pt-10 { padding-top: 4rem !important; } + +.pr-10 { padding-right: 4rem !important; } + +.pb-10 { padding-bottom: 4rem !important; } + +.pl-10 { padding-left: 4rem !important; } + +.px-10 { padding-right: 4rem !important; padding-left: 4rem !important; } + +.py-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } + +@media (min-width: 20rem) { .p-xs-0 { padding: 0 !important; } .pt-xs-0 { padding-top: 0 !important; } .pr-xs-0 { padding-right: 0 !important; } .pb-xs-0 { padding-bottom: 0 !important; } .pl-xs-0 { padding-left: 0 !important; } .px-xs-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-xs-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-xs-1 { padding: 0.25rem !important; } .pt-xs-1 { padding-top: 0.25rem !important; } .pr-xs-1 { padding-right: 0.25rem !important; } .pb-xs-1 { padding-bottom: 0.25rem !important; } .pl-xs-1 { padding-left: 0.25rem !important; } .px-xs-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-xs-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-xs-2 { padding: 0.5rem !important; } .pt-xs-2 { padding-top: 0.5rem !important; } .pr-xs-2 { padding-right: 0.5rem !important; } .pb-xs-2 { padding-bottom: 0.5rem !important; } .pl-xs-2 { padding-left: 0.5rem !important; } .px-xs-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-xs-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-xs-3 { padding: 0.75rem !important; } .pt-xs-3 { padding-top: 0.75rem !important; } .pr-xs-3 { padding-right: 0.75rem !important; } .pb-xs-3 { padding-bottom: 0.75rem !important; } .pl-xs-3 { padding-left: 0.75rem !important; } .px-xs-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-xs-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-xs-4 { padding: 1rem !important; } .pt-xs-4 { padding-top: 1rem !important; } .pr-xs-4 { padding-right: 1rem !important; } .pb-xs-4 { padding-bottom: 1rem !important; } .pl-xs-4 { padding-left: 1rem !important; } .px-xs-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-xs-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-xs-5 { padding: 1.5rem !important; } .pt-xs-5 { padding-top: 1.5rem !important; } .pr-xs-5 { padding-right: 1.5rem !important; } .pb-xs-5 { padding-bottom: 1.5rem !important; } .pl-xs-5 { padding-left: 1.5rem !important; } .px-xs-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-xs-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-xs-6 { padding: 2rem !important; } .pt-xs-6 { padding-top: 2rem !important; } .pr-xs-6 { padding-right: 2rem !important; } .pb-xs-6 { padding-bottom: 2rem !important; } .pl-xs-6 { padding-left: 2rem !important; } .px-xs-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-xs-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-xs-7 { padding: 2.5rem !important; } .pt-xs-7 { padding-top: 2.5rem !important; } .pr-xs-7 { padding-right: 2.5rem !important; } .pb-xs-7 { padding-bottom: 2.5rem !important; } .pl-xs-7 { padding-left: 2.5rem !important; } .px-xs-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-xs-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-xs-8 { padding: 3rem !important; } .pt-xs-8 { padding-top: 3rem !important; } .pr-xs-8 { padding-right: 3rem !important; } .pb-xs-8 { padding-bottom: 3rem !important; } .pl-xs-8 { padding-left: 3rem !important; } .px-xs-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xs-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-xs-9 { padding: 3.5rem !important; } .pt-xs-9 { padding-top: 3.5rem !important; } .pr-xs-9 { padding-right: 3.5rem !important; } .pb-xs-9 { padding-bottom: 3.5rem !important; } .pl-xs-9 { padding-left: 3.5rem !important; } .px-xs-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-xs-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-xs-10 { padding: 4rem !important; } .pt-xs-10 { padding-top: 4rem !important; } .pr-xs-10 { padding-right: 4rem !important; } .pb-xs-10 { padding-bottom: 4rem !important; } .pl-xs-10 { padding-left: 4rem !important; } .px-xs-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-xs-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media (min-width: 31.25rem) { .p-sm-0 { padding: 0 !important; } .pt-sm-0 { padding-top: 0 !important; } .pr-sm-0 { padding-right: 0 !important; } .pb-sm-0 { padding-bottom: 0 !important; } .pl-sm-0 { padding-left: 0 !important; } .px-sm-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-sm-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-sm-1 { padding: 0.25rem !important; } .pt-sm-1 { padding-top: 0.25rem !important; } .pr-sm-1 { padding-right: 0.25rem !important; } .pb-sm-1 { padding-bottom: 0.25rem !important; } .pl-sm-1 { padding-left: 0.25rem !important; } .px-sm-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-sm-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-sm-2 { padding: 0.5rem !important; } .pt-sm-2 { padding-top: 0.5rem !important; } .pr-sm-2 { padding-right: 0.5rem !important; } .pb-sm-2 { padding-bottom: 0.5rem !important; } .pl-sm-2 { padding-left: 0.5rem !important; } .px-sm-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-sm-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-sm-3 { padding: 0.75rem !important; } .pt-sm-3 { padding-top: 0.75rem !important; } .pr-sm-3 { padding-right: 0.75rem !important; } .pb-sm-3 { padding-bottom: 0.75rem !important; } .pl-sm-3 { padding-left: 0.75rem !important; } .px-sm-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-sm-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-sm-4 { padding: 1rem !important; } .pt-sm-4 { padding-top: 1rem !important; } .pr-sm-4 { padding-right: 1rem !important; } .pb-sm-4 { padding-bottom: 1rem !important; } .pl-sm-4 { padding-left: 1rem !important; } .px-sm-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-sm-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-sm-5 { padding: 1.5rem !important; } .pt-sm-5 { padding-top: 1.5rem !important; } .pr-sm-5 { padding-right: 1.5rem !important; } .pb-sm-5 { padding-bottom: 1.5rem !important; } .pl-sm-5 { padding-left: 1.5rem !important; } .px-sm-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-sm-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-sm-6 { padding: 2rem !important; } .pt-sm-6 { padding-top: 2rem !important; } .pr-sm-6 { padding-right: 2rem !important; } .pb-sm-6 { padding-bottom: 2rem !important; } .pl-sm-6 { padding-left: 2rem !important; } .px-sm-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-sm-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-sm-7 { padding: 2.5rem !important; } .pt-sm-7 { padding-top: 2.5rem !important; } .pr-sm-7 { padding-right: 2.5rem !important; } .pb-sm-7 { padding-bottom: 2.5rem !important; } .pl-sm-7 { padding-left: 2.5rem !important; } .px-sm-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-sm-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-sm-8 { padding: 3rem !important; } .pt-sm-8 { padding-top: 3rem !important; } .pr-sm-8 { padding-right: 3rem !important; } .pb-sm-8 { padding-bottom: 3rem !important; } .pl-sm-8 { padding-left: 3rem !important; } .px-sm-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-sm-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-sm-9 { padding: 3.5rem !important; } .pt-sm-9 { padding-top: 3.5rem !important; } .pr-sm-9 { padding-right: 3.5rem !important; } .pb-sm-9 { padding-bottom: 3.5rem !important; } .pl-sm-9 { padding-left: 3.5rem !important; } .px-sm-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-sm-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-sm-10 { padding: 4rem !important; } .pt-sm-10 { padding-top: 4rem !important; } .pr-sm-10 { padding-right: 4rem !important; } .pb-sm-10 { padding-bottom: 4rem !important; } .pl-sm-10 { padding-left: 4rem !important; } .px-sm-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-sm-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media (min-width: 50rem) { .p-md-0 { padding: 0 !important; } .pt-md-0 { padding-top: 0 !important; } .pr-md-0 { padding-right: 0 !important; } .pb-md-0 { padding-bottom: 0 !important; } .pl-md-0 { padding-left: 0 !important; } .px-md-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-md-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-md-1 { padding: 0.25rem !important; } .pt-md-1 { padding-top: 0.25rem !important; } .pr-md-1 { padding-right: 0.25rem !important; } .pb-md-1 { padding-bottom: 0.25rem !important; } .pl-md-1 { padding-left: 0.25rem !important; } .px-md-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-md-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-md-2 { padding: 0.5rem !important; } .pt-md-2 { padding-top: 0.5rem !important; } .pr-md-2 { padding-right: 0.5rem !important; } .pb-md-2 { padding-bottom: 0.5rem !important; } .pl-md-2 { padding-left: 0.5rem !important; } .px-md-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-md-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-md-3 { padding: 0.75rem !important; } .pt-md-3 { padding-top: 0.75rem !important; } .pr-md-3 { padding-right: 0.75rem !important; } .pb-md-3 { padding-bottom: 0.75rem !important; } .pl-md-3 { padding-left: 0.75rem !important; } .px-md-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-md-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-md-4 { padding: 1rem !important; } .pt-md-4 { padding-top: 1rem !important; } .pr-md-4 { padding-right: 1rem !important; } .pb-md-4 { padding-bottom: 1rem !important; } .pl-md-4 { padding-left: 1rem !important; } .px-md-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-md-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-md-5 { padding: 1.5rem !important; } .pt-md-5 { padding-top: 1.5rem !important; } .pr-md-5 { padding-right: 1.5rem !important; } .pb-md-5 { padding-bottom: 1.5rem !important; } .pl-md-5 { padding-left: 1.5rem !important; } .px-md-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-md-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-md-6 { padding: 2rem !important; } .pt-md-6 { padding-top: 2rem !important; } .pr-md-6 { padding-right: 2rem !important; } .pb-md-6 { padding-bottom: 2rem !important; } .pl-md-6 { padding-left: 2rem !important; } .px-md-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-md-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-md-7 { padding: 2.5rem !important; } .pt-md-7 { padding-top: 2.5rem !important; } .pr-md-7 { padding-right: 2.5rem !important; } .pb-md-7 { padding-bottom: 2.5rem !important; } .pl-md-7 { padding-left: 2.5rem !important; } .px-md-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-md-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-md-8 { padding: 3rem !important; } .pt-md-8 { padding-top: 3rem !important; } .pr-md-8 { padding-right: 3rem !important; } .pb-md-8 { padding-bottom: 3rem !important; } .pl-md-8 { padding-left: 3rem !important; } .px-md-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-md-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-md-9 { padding: 3.5rem !important; } .pt-md-9 { padding-top: 3.5rem !important; } .pr-md-9 { padding-right: 3.5rem !important; } .pb-md-9 { padding-bottom: 3.5rem !important; } .pl-md-9 { padding-left: 3.5rem !important; } .px-md-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-md-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-md-10 { padding: 4rem !important; } .pt-md-10 { padding-top: 4rem !important; } .pr-md-10 { padding-right: 4rem !important; } .pb-md-10 { padding-bottom: 4rem !important; } .pl-md-10 { padding-left: 4rem !important; } .px-md-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-md-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media (min-width: 66.5rem) { .p-lg-0 { padding: 0 !important; } .pt-lg-0 { padding-top: 0 !important; } .pr-lg-0 { padding-right: 0 !important; } .pb-lg-0 { padding-bottom: 0 !important; } .pl-lg-0 { padding-left: 0 !important; } .px-lg-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-lg-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-lg-1 { padding: 0.25rem !important; } .pt-lg-1 { padding-top: 0.25rem !important; } .pr-lg-1 { padding-right: 0.25rem !important; } .pb-lg-1 { padding-bottom: 0.25rem !important; } .pl-lg-1 { padding-left: 0.25rem !important; } .px-lg-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-lg-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-lg-2 { padding: 0.5rem !important; } .pt-lg-2 { padding-top: 0.5rem !important; } .pr-lg-2 { padding-right: 0.5rem !important; } .pb-lg-2 { padding-bottom: 0.5rem !important; } .pl-lg-2 { padding-left: 0.5rem !important; } .px-lg-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-lg-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-lg-3 { padding: 0.75rem !important; } .pt-lg-3 { padding-top: 0.75rem !important; } .pr-lg-3 { padding-right: 0.75rem !important; } .pb-lg-3 { padding-bottom: 0.75rem !important; } .pl-lg-3 { padding-left: 0.75rem !important; } .px-lg-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-lg-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-lg-4 { padding: 1rem !important; } .pt-lg-4 { padding-top: 1rem !important; } .pr-lg-4 { padding-right: 1rem !important; } .pb-lg-4 { padding-bottom: 1rem !important; } .pl-lg-4 { padding-left: 1rem !important; } .px-lg-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-lg-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-lg-5 { padding: 1.5rem !important; } .pt-lg-5 { padding-top: 1.5rem !important; } .pr-lg-5 { padding-right: 1.5rem !important; } .pb-lg-5 { padding-bottom: 1.5rem !important; } .pl-lg-5 { padding-left: 1.5rem !important; } .px-lg-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-lg-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-lg-6 { padding: 2rem !important; } .pt-lg-6 { padding-top: 2rem !important; } .pr-lg-6 { padding-right: 2rem !important; } .pb-lg-6 { padding-bottom: 2rem !important; } .pl-lg-6 { padding-left: 2rem !important; } .px-lg-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-lg-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-lg-7 { padding: 2.5rem !important; } .pt-lg-7 { padding-top: 2.5rem !important; } .pr-lg-7 { padding-right: 2.5rem !important; } .pb-lg-7 { padding-bottom: 2.5rem !important; } .pl-lg-7 { padding-left: 2.5rem !important; } .px-lg-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-lg-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-lg-8 { padding: 3rem !important; } .pt-lg-8 { padding-top: 3rem !important; } .pr-lg-8 { padding-right: 3rem !important; } .pb-lg-8 { padding-bottom: 3rem !important; } .pl-lg-8 { padding-left: 3rem !important; } .px-lg-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-lg-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-lg-9 { padding: 3.5rem !important; } .pt-lg-9 { padding-top: 3.5rem !important; } .pr-lg-9 { padding-right: 3.5rem !important; } .pb-lg-9 { padding-bottom: 3.5rem !important; } .pl-lg-9 { padding-left: 3.5rem !important; } .px-lg-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-lg-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-lg-10 { padding: 4rem !important; } .pt-lg-10 { padding-top: 4rem !important; } .pr-lg-10 { padding-right: 4rem !important; } .pb-lg-10 { padding-bottom: 4rem !important; } .pl-lg-10 { padding-left: 4rem !important; } .px-lg-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-lg-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media (min-width: 87.5rem) { .p-xl-0 { padding: 0 !important; } .pt-xl-0 { padding-top: 0 !important; } .pr-xl-0 { padding-right: 0 !important; } .pb-xl-0 { padding-bottom: 0 !important; } .pl-xl-0 { padding-left: 0 !important; } .px-xl-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-xl-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-xl-1 { padding: 0.25rem !important; } .pt-xl-1 { padding-top: 0.25rem !important; } .pr-xl-1 { padding-right: 0.25rem !important; } .pb-xl-1 { padding-bottom: 0.25rem !important; } .pl-xl-1 { padding-left: 0.25rem !important; } .px-xl-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-xl-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-xl-2 { padding: 0.5rem !important; } .pt-xl-2 { padding-top: 0.5rem !important; } .pr-xl-2 { padding-right: 0.5rem !important; } .pb-xl-2 { padding-bottom: 0.5rem !important; } .pl-xl-2 { padding-left: 0.5rem !important; } .px-xl-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-xl-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-xl-3 { padding: 0.75rem !important; } .pt-xl-3 { padding-top: 0.75rem !important; } .pr-xl-3 { padding-right: 0.75rem !important; } .pb-xl-3 { padding-bottom: 0.75rem !important; } .pl-xl-3 { padding-left: 0.75rem !important; } .px-xl-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-xl-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-xl-4 { padding: 1rem !important; } .pt-xl-4 { padding-top: 1rem !important; } .pr-xl-4 { padding-right: 1rem !important; } .pb-xl-4 { padding-bottom: 1rem !important; } .pl-xl-4 { padding-left: 1rem !important; } .px-xl-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-xl-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-xl-5 { padding: 1.5rem !important; } .pt-xl-5 { padding-top: 1.5rem !important; } .pr-xl-5 { padding-right: 1.5rem !important; } .pb-xl-5 { padding-bottom: 1.5rem !important; } .pl-xl-5 { padding-left: 1.5rem !important; } .px-xl-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-xl-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-xl-6 { padding: 2rem !important; } .pt-xl-6 { padding-top: 2rem !important; } .pr-xl-6 { padding-right: 2rem !important; } .pb-xl-6 { padding-bottom: 2rem !important; } .pl-xl-6 { padding-left: 2rem !important; } .px-xl-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-xl-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-xl-7 { padding: 2.5rem !important; } .pt-xl-7 { padding-top: 2.5rem !important; } .pr-xl-7 { padding-right: 2.5rem !important; } .pb-xl-7 { padding-bottom: 2.5rem !important; } .pl-xl-7 { padding-left: 2.5rem !important; } .px-xl-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-xl-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-xl-8 { padding: 3rem !important; } .pt-xl-8 { padding-top: 3rem !important; } .pr-xl-8 { padding-right: 3rem !important; } .pb-xl-8 { padding-bottom: 3rem !important; } .pl-xl-8 { padding-left: 3rem !important; } .px-xl-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xl-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-xl-9 { padding: 3.5rem !important; } .pt-xl-9 { padding-top: 3.5rem !important; } .pr-xl-9 { padding-right: 3.5rem !important; } .pb-xl-9 { padding-bottom: 3.5rem !important; } .pl-xl-9 { padding-left: 3.5rem !important; } .px-xl-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-xl-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-xl-10 { padding: 4rem !important; } .pt-xl-10 { padding-top: 4rem !important; } .pr-xl-10 { padding-right: 4rem !important; } .pb-xl-10 { padding-bottom: 4rem !important; } .pl-xl-10 { padding-left: 4rem !important; } .px-xl-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-xl-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media print { .site-footer, .site-button, #edit-this-page, #back-to-top, .site-nav, .main-header { display: none !important; } .side-bar { width: 100%; height: auto; border-right: 0 !important; } .site-header { border-bottom: 1px solid #eeebee; } .site-title { font-size: 16px !important; font-weight: 700 !important; } .text-small { font-size: 8pt !important; } pre.highlight { border: 1px solid #eeebee; } .main { max-width: none; margin-left: 0; } } + +.site-header { height: 90px; max-height: 90px; } + +@media (max-width: 90rem) and (min-width: 50rem) { .site-nav, .site-header, .site-footer { width: 364px; } .side-bar { width: 364px; } .main { margin-left: 364px; } } + +@media (min-width: 90rem) { .site-nav, .site-header, .site-footer { width: 364px; } .side-bar { width: calc((100%) / 2 - 364px); } .main { margin-left: calc((100%) / 2 - 364px); } .side-left { width: 364px; } } + +.main-fs { margin-left: 6px; margin-right: 6px; max-width: initial; height: calc(100% - 14rem); } + +.main-fs { padding-top: 2rem; } + +.main-fs { padding-top: 1rem; } + +@media (min-width: 50rem) and (max-width: 90rem) { .main-fs { margin-left: 384px; margin-right: 20px; width: calc(100% - 384px - 20px); max-width: initial; height: calc(100% - 14rem); } .main-fs { padding-top: 2rem; } } + +@media (min-width: 90rem) { .main-fs { margin-left: 444px; margin-right: 80px; width: calc(100% - 444px - 80px); max-width: initial; height: calc(100% - 14rem); } .main-fs { padding-top: 4rem; } } + +.canvas-container-jtd { margin-top: 4px; border: 2px solid gray; border-radius: 4px; width: 100%; height: 600px; } + +.container-jtd-fs { border: 2px solid gray; border-radius: 4px; width: 100%; } + +.canvas-container-jtd:not(.container-jtd-fs):not(.pointer-events) { pointer-events: none; } + +.pure-button { border-radius: 4px !important; } + +.pure-label { padding-left: 4px !important; } + +.pure-checkbox { display: inline !important; margin-right: 4px !important; } + +.slider-container { padding-left: 16px; padding-right: 16px; } + +th, td { min-width: auto; text-align: center; } + +/*# sourceMappingURL=just-the-docs-default.css.map */ \ No newline at end of file diff --git a/docs/assets/css/just-the-docs-default.css.map b/docs/assets/css/just-the-docs-default.css.map new file mode 100644 index 0000000..801465e --- /dev/null +++ b/docs/assets/css/just-the-docs-default.css.map @@ -0,0 +1,68 @@ +{ + "version": 3, + "file": "just-the-docs-default.css", + "sources": [ + "just-the-docs-default.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/support.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/_variables.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/_functions.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/mixins/mixins.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/mixins/_layout.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/mixins/_buttons.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/mixins/_typography.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/color_schemes/light.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/modules.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/vendor/normalize.scss/normalize.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/base.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/layout.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/content.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/navigation.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/typography.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/labels.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/buttons.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/search.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/tables.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/code.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/utilities.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_colors.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_layout.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_typography.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_lists.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_spacing.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/print.scss", + "site/_sass/custom/custom.scss" + ], + "sourcesContent": [ + "\n\n@import \"./support/support\";\n@import \"./color_schemes/light\";\n@import \"./modules\";\n@import \"./custom/custom\";\n\n\n", + "@import \"./variables\";\n@import \"./functions\";\n@import \"./mixins/mixins\";\n", + "//\n// Typography\n//\n\n$body-font-family: -apple-system, BlinkMacSystemFont, \"helvetica neue\",\n helvetica, roboto, noto, \"segoe ui\", arial, sans-serif !default;\n$mono-font-family: \"SFMono-Regular\", Menlo, Consolas, Monospace !default;\n$root-font-size: 16px !default; // Base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n//\n// Colors\n//\n\n$white: #fff !default;\n\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n$body-background-color: $white !default;\n$sidebar-color: $grey-lt-000 !default;\n$search-background-color: $white !default;\n$table-background-color: $white !default;\n$code-background-color: $grey-lt-000 !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n\n$body-text-color: $grey-dk-100 !default;\n$body-heading-color: $grey-dk-300 !default;\n$search-result-preview-color: $grey-dk-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$btn-primary-color: $purple-100 !default;\n$base-button-color: #f7f7f7 !default;\n\n//\n// Spacing\n//\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n//\n// Borders\n//\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n//\n// Grid system\n//\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 264px !default;\n$nav-width-md: 248px !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 800px !default;\n$header-height: 60px !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n//\n// Media queries in pixels\n//\n\n$media-queries: (\n xs: 320px,\n sm: 500px,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 1400px,\n) !default;\n", + "@function rem($size, $unit: \"\") {\n $remSize: $size / $root-font-size;\n\n @if ($unit == false) {\n @return #{$remSize};\n } @else {\n @return #{$remSize}rem;\n }\n}\n", + "@import \"./layout\";\n@import \"./buttons\";\n@import \"./typography\";\n", + "// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value != null {\n // Prints a media query based on the value\n @media (min-width: rem($value)) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. \"\n + \"Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n", + "// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n", + "// Font size\n\n@mixin fs-1 {\n font-size: 9px !important;\n\n @include mq(sm) {\n font-size: 10px !important;\n }\n}\n\n@mixin fs-2 {\n font-size: 11px !important;\n\n @include mq(sm) {\n font-size: 12px !important;\n }\n}\n\n@mixin fs-3 {\n font-size: 12px !important;\n\n @include mq(sm) {\n font-size: 14px !important;\n }\n}\n\n@mixin fs-4 {\n font-size: 15px !important;\n\n @include mq(sm) {\n font-size: 16px !important;\n }\n}\n\n@mixin fs-5 {\n font-size: 16px !important;\n\n @include mq(sm) {\n font-size: 18px !important;\n }\n}\n\n@mixin fs-6 {\n font-size: 18px !important;\n\n @include mq(sm) {\n font-size: 24px !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n font-size: 24px !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: 32px !important;\n }\n}\n\n@mixin fs-8 {\n font-size: 32px !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: 36px !important;\n }\n}\n\n@mixin fs-9 {\n font-size: 36px !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: 42px !important;\n }\n}\n\n@mixin fs-10 {\n font-size: 42px !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: 48px !important;\n }\n}\n", + "", + "//\n// Import external dependencies\n//\n@import \"./vendor/normalize.scss/normalize.scss\";\n\n//\n// Modules\n//\n@import \"./base\";\n@import \"./layout\";\n@import \"./content\";\n@import \"./navigation\";\n@import \"./typography\";\n@import \"./labels\";\n@import \"./buttons\";\n@import \"./search\";\n@import \"./tables\";\n@import \"./code\";\n@import \"./utilities/utilities\";\n@import \"./print\";\n", + "/*! normalize.scss v0.1.0 | MIT License | based on git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n", + "//\n// Base element style overrides\n//\n// stylelint-disable selector-no-type, selector-max-type\n\n* {\n box-sizing: border-box;\n}\n\n::selection {\n color: $white;\n background: $link-color;\n}\n\nhtml {\n @include fs-4;\n scroll-behavior: smooth;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: none;\n background-image: linear-gradient($border-color 0%, $border-color 100%);\n background-repeat: repeat-x;\n background-position: 0 100%;\n background-size: 1px 1px;\n\n &:hover {\n background-image: linear-gradient(\n rgba($link-color, 0.45) 0%,\n rgba($link-color, 0.45) 100%\n );\n background-size: 1px 1px;\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n", + "//\n// The basic two column layout\n//\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-wrap: nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n flex-direction: column;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n}\n\n.main {\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n margin-left: calc(\n (100% - #{$nav-width + $content-width}) / 2 + #{$nav-width}\n );\n }\n}\n\n.main-content-wrap {\n @include container;\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n background-color: $body-background-color;\n border-bottom: $border $border-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n @include container;\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n// stylelint-disable selector-max-type\n\nbody {\n position: relative;\n padding-bottom: $sp-10;\n overflow-y: scroll;\n\n @include mq(md) {\n position: static;\n padding-bottom: 0;\n }\n}\n\n// stylelint-enable selector-max-type\n\n.site-footer {\n @include container;\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n color: $grey-dk-000;\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n", + "@charset \"UTF-8\";\n\n//\n// Styles for rendered markdown in the .main-content container\n//\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list {\n padding-left: 0;\n }\n\n .task-list-item {\n display: flex;\n align-items: center;\n\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n &:first-child {\n margin-top: $sp-2;\n }\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge {\n margin-top: 1em;\n }\n\n + p {\n margin-top: 0;\n }\n }\n}\n", + "//\n// Main nav, breadcrumb, etc...\n//\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n @include fs-4;\n position: relative;\n margin: 0;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding-top: #{$nav-list-item-height-sm / 4};\n padding-right: #{$nav-list-item-height-sm / 4};\n padding-bottom: #{$nav-list-item-height-sm / 4};\n padding-left: #{$nav-list-item-height-sm / 4};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding-top: #{$nav-list-item-height / 4};\n padding-right: #{$nav-list-item-height / 4};\n padding-bottom: #{$nav-list-item-height / 4};\n padding-left: #{$nav-list-item-height / 4};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding-top: $sp-2;\n padding-right: $gutter-spacing-sm;\n padding-bottom: $sp-2;\n padding-left: $gutter-spacing-sm;\n font-weight: 600;\n text-align: end;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n", + "//\n// Typography\n//\n// stylelint-disable primer/selector-no-utility, primer/no-override, selector-no-type, selector-max-type\n\nh1,\n.text-alpha {\n @include fs-8;\n font-weight: 300;\n}\n\nh2,\n.text-beta {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n @include fs-2;\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n color: $grey-dk-200;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n color: $grey-dk-200;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n", + "//\n// Labels (not the form kind)\n//\n\n.label,\n.label-blue {\n display: inline-block;\n padding-top: 0.16em;\n padding-right: 0.56em;\n padding-bottom: 0.16em;\n padding-left: 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n @include fs-2;\n border-radius: 12px;\n}\n\n.label-green {\n background-color: $green-200;\n}\n\n.label-purple {\n background-color: $purple-100;\n}\n\n.label-red {\n background-color: $red-200;\n}\n\n.label-yellow {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n", + "//\n// Buttons and things that look like buttons\n//\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding-top: 0.3em;\n padding-right: 1em;\n padding-bottom: 0.3em;\n padding-left: 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: inset 0 0 0 2px $grey-dk-100, 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-000);\n}\n\n.btn-green {\n @include btn-color($white, $green-100);\n}\n", + "//\n// Search input and autocomplete\n//\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration / 2};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration / 2};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding-top: $sp-2;\n padding-right: $gutter-spacing-sm;\n padding-bottom: $sp-2;\n padding-left: #{$gutter-spacing-sm + $sp-5};\n font-size: 16px;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n padding-left: #{$gutter-spacing + $sp-5};\n font-size: 14px;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration / 2};\n }\n\n &:focus {\n outline: 0;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration / 2};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding-top: $sp-1;\n padding-right: $sp-3;\n padding-bottom: $sp-1;\n padding-left: $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding-top: $sp-2;\n padding-right: $sp-3;\n padding-bottom: $sp-2;\n padding-left: $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 / 2};\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition: opacity ease $transition-duration, width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: #{$sp-4 * 1.25 + $sp-5};\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: #{$sp-4 * 1.25};\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition: opacity ease $transition-duration, width 0s, height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n", + "//\n// Tables\n//\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n @include fs-3;\n min-width: 120px;\n padding-top: $sp-2;\n padding-right: $sp-3;\n padding-bottom: $sp-2;\n padding-left: $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n", + "//\n// Code and syntax highlighting\n//\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type\n\ncode {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n}\n\npre.highlight,\nfigure.highlight {\n padding: $sp-3;\n margin-top: 0;\n margin-bottom: 0;\n background-color: $code-background-color;\n border-radius: $border-radius;\n -webkit-overflow-scrolling: touch;\n\n code {\n padding: 0;\n border: 0;\n }\n}\n\n.highlighter-rouge {\n margin-bottom: $sp-3;\n}\n\n.highlight .c {\n color: #586e75;\n} // comment //\n.highlight .err {\n color: #93a1a1;\n} // error //\n.highlight .g {\n color: #93a1a1;\n} // generic //\n.highlight .k {\n color: #859900;\n} // keyword //\n.highlight .l {\n color: #93a1a1;\n} // literal //\n.highlight .n {\n color: #93a1a1;\n} // name //\n.highlight .o {\n color: #859900;\n} // operator //\n.highlight .x {\n color: #cb4b16;\n} // other //\n.highlight .p {\n color: #93a1a1;\n} // punctuation //\n.highlight .cm {\n color: #586e75;\n} // comment.multiline //\n.highlight .cp {\n color: #859900;\n} // comment.preproc //\n.highlight .c1 {\n color: #586e75;\n} // comment.single //\n.highlight .cs {\n color: #859900;\n} // comment.special //\n.highlight .gd {\n color: #2aa198;\n} // generic.deleted //\n.highlight .ge {\n font-style: italic;\n color: #93a1a1;\n} // generic.emph //\n.highlight .gr {\n color: #dc322f;\n} // generic.error //\n.highlight .gh {\n color: #cb4b16;\n} // generic.heading //\n.highlight .gi {\n color: #859900;\n} // generic.inserted //\n.highlight .go {\n color: #93a1a1;\n} // generic.output //\n.highlight .gp {\n color: #93a1a1;\n} // generic.prompt //\n.highlight .gs {\n font-weight: bold;\n color: #93a1a1;\n} // generic.strong //\n.highlight .gu {\n color: #cb4b16;\n} // generic.subheading //\n.highlight .gt {\n color: #93a1a1;\n} // generic.traceback //\n.highlight .kc {\n color: #cb4b16;\n} // keyword.constant //\n.highlight .kd {\n color: #268bd2;\n} // keyword.declaration //\n.highlight .kn {\n color: #859900;\n} // keyword.namespace //\n.highlight .kp {\n color: #859900;\n} // keyword.pseudo //\n.highlight .kr {\n color: #268bd2;\n} // keyword.reserved //\n.highlight .kt {\n color: #dc322f;\n} // keyword.type //\n.highlight .ld {\n color: #93a1a1;\n} // literal.date //\n.highlight .m {\n color: #2aa198;\n} // literal.number //\n.highlight .s {\n color: #2aa198;\n} // literal.string //\n.highlight .na {\n color: #555;\n} // name.attribute //\n.highlight .nb {\n color: #b58900;\n} // name.builtin //\n.highlight .nc {\n color: #268bd2;\n} // name.class //\n.highlight .no {\n color: #cb4b16;\n} // name.constant //\n.highlight .nd {\n color: #268bd2;\n} // name.decorator //\n.highlight .ni {\n color: #cb4b16;\n} // name.entity //\n.highlight .ne {\n color: #cb4b16;\n} // name.exception //\n.highlight .nf {\n color: #268bd2;\n} // name.function //\n.highlight .nl {\n color: #555;\n} // name.label //\n.highlight .nn {\n color: #93a1a1;\n} // name.namespace //\n.highlight .nx {\n color: #555;\n} // name.other //\n.highlight .py {\n color: #93a1a1;\n} // name.property //\n.highlight .nt {\n color: #268bd2;\n} // name.tag //\n.highlight .nv {\n color: #268bd2;\n} // name.variable //\n.highlight .ow {\n color: #859900;\n} // operator.word //\n.highlight .w {\n color: #93a1a1;\n} // text.whitespace //\n.highlight .mf {\n color: #2aa198;\n} // literal.number.float //\n.highlight .mh {\n color: #2aa198;\n} // literal.number.hex //\n.highlight .mi {\n color: #2aa198;\n} // literal.number.integer //\n.highlight .mo {\n color: #2aa198;\n} // literal.number.oct //\n.highlight .sb {\n color: #586e75;\n} // literal.string.backtick //\n.highlight .sc {\n color: #2aa198;\n} // literal.string.char //\n.highlight .sd {\n color: #93a1a1;\n} // literal.string.doc //\n.highlight .s2 {\n color: #2aa198;\n} // literal.string.double //\n.highlight .se {\n color: #cb4b16;\n} // literal.string.escape //\n.highlight .sh {\n color: #93a1a1;\n} // literal.string.heredoc //\n.highlight .si {\n color: #2aa198;\n} // literal.string.interpol //\n.highlight .sx {\n color: #2aa198;\n} // literal.string.other //\n.highlight .sr {\n color: #dc322f;\n} // literal.string.regex //\n.highlight .s1 {\n color: #2aa198;\n} // literal.string.single //\n.highlight .ss {\n color: #2aa198;\n} // literal.string.symbol //\n.highlight .bp {\n color: #268bd2;\n} // name.builtin.pseudo //\n.highlight .vc {\n color: #268bd2;\n} // name.variable.class //\n.highlight .vg {\n color: #268bd2;\n} // name.variable.global //\n.highlight .vi {\n color: #268bd2;\n} // name.variable.instance //\n.highlight .il {\n color: #2aa198;\n} // literal.number.integer.long //\n\n//\n// Code examples (rendered)\n//\n\n.code-example {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n", + "@import \"./colors\";\n@import \"./layout\";\n@import \"./typography\";\n@import \"./lists\";\n@import \"./spacing\";\n", + "//\n// Utility classes for colors\n//\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n", + "// stylelint-disable primer/selector-no-utility, primer/no-override\n//\n// Utility classes for layout\n//\n\n// Display\n\n.d-block {\n display: block !important;\n}\n.d-flex {\n display: flex !important;\n}\n.d-inline {\n display: inline !important;\n}\n.d-inline-block {\n display: inline-block !important;\n}\n.d-none {\n display: none !important;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n.v-align-middle {\n vertical-align: middle !important;\n}\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n.v-align-top {\n vertical-align: top !important;\n}\n", + "//\n// Utility classes for typography\n//\n\n// stylelint-disable primer/selector-no-utility, primer/no-override\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n// stylelint-enable primer/selector-no-utility\n", + "//\n// Utility classes for lists\n//\n\n// stylelint-disable primer/selector-no-utility, primer/no-override, selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n", + "//\n// Utility classes for margins and padding\n//\n\n// scss-lint:disable SpaceAfterPropertyName\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before, primer/selector-no-utility, primer/no-override\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n", + "// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type, primer/no-override,\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: $root-font-size !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n", + "$sidebar_width: 364px;\n\n.site-header {\n height: 90px;\n max-height: 90px;\n}\n\n@media (max-width: 90rem) and (min-width: 50rem) {\n .site-nav,\n .site-header,\n .site-footer {\n width: $sidebar_width;\n }\n\n $sidebar_width_offset: calc((100%) / 2 - #{$sidebar_width});\n\n .side-bar {\n width: $sidebar_width;\n }\n\n .main {\n margin-left: $sidebar_width;\n }\n}\n\n@media (min-width: 90rem) {\n .site-nav,\n .site-header,\n .site-footer {\n width: $sidebar_width;\n }\n\n $sidebar_width_offset: calc((100%) / 2 - #{$sidebar_width});\n\n .side-bar {\n width: $sidebar_width_offset;\n }\n\n .main {\n margin-left: $sidebar_width_offset;\n }\n\n .side-left {\n width: $sidebar_width;\n }\n}\n\n$margin: 6px;\n$margin-left: $margin;\n$margin-right: $margin;\n\n.main-fs {\n margin-left: $margin-left;\n margin-right: $margin-right;\n max-width: initial;\n height: calc(100% - 14rem);\n}\n\n.main-fs {\n padding-top: 2rem;\n}\n\n.main-fs {\n padding-top: 1rem;\n}\n\n@media (min-width: 50rem) and (max-width: 90rem) {\n $margin: 20px;\n $margin-left: $sidebar_width + $margin;\n $margin-right: $margin;\n\n .main-fs {\n margin-left: $margin-left;\n margin-right: $margin-right;\n width: calc(100% - #{$margin-left} - #{$margin-right});\n max-width: initial;\n height: calc(100% - 14rem);\n }\n\n .main-fs {\n padding-top: 2rem;\n }\n}\n\n@media (min-width: 90rem) {\n $margin: 80px;\n $margin-left: $sidebar_width + $margin;\n $margin-right: $margin;\n\n .main-fs {\n margin-left: $margin-left;\n margin-right: $margin-right;\n width: calc(100% - #{$margin-left} - #{$margin-right});\n max-width: initial;\n height: calc(100% - 14rem);\n }\n\n .main-fs {\n padding-top: 4rem;\n }\n}\n\n// body,\n// html {\n// height: 100%;\n// }\n\n.canvas-container-jtd {\n margin-top: 4px;\n border: 2px solid gray;\n border-radius: 4px;\n width: 100%;\n height: 600px;\n}\n\n.container-jtd-fs {\n border: 2px solid gray;\n border-radius: 4px;\n width: 100%;\n}\n\n.canvas-container-jtd:not(.container-jtd-fs):not(.pointer-events) {\n pointer-events: none;\n}\n\n.pure-button {\n border-radius: 4px !important;\n}\n\n.pure-label {\n padding-left: 4px !important;\n}\n\n.pure-checkbox {\n display: inline !important;\n margin-right: 4px !important;\n}\n\n.slider-container {\n padding-left: 16px;\n padding-right: 16px;\n}\n\nth,\ntd {\n min-width: auto;\n text-align: center;\n}\n" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/docs/assets/css/just-the-docs-light.css b/docs/assets/css/just-the-docs-light.css new file mode 100644 index 0000000..35da273 --- /dev/null +++ b/docs/assets/css/just-the-docs-light.css @@ -0,0 +1,1570 @@ +@charset "UTF-8"; +/*! normalize.scss v0.1.0 | MIT License | based on git.io/normalize */ +/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ +html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } + +/** Remove default margin. */ +body { margin: 0; } + +/* HTML5 display definitions ========================================================================== */ +/** Correct `block` display not defined for any HTML5 element in IE 8/9. Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. Correct `block` display not defined for `main` in IE 11. */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } + +/** 1. Correct `inline-block` display not defined in IE 8/9. 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ +audio, canvas, progress, video { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } + +/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ +audio:not([controls]) { display: none; height: 0; } + +/** Address `[hidden]` styling not present in IE 8/9/10. Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. */ +[hidden], template { display: none; } + +/* Links ========================================================================== */ +/** Remove the gray background color from active links in IE 10. */ +a { background-color: transparent; } + +/** Improve readability when focused and also mouse hovered in all browsers. */ +a:active, a:hover { outline: 0; } + +/* Text-level semantics ========================================================================== */ +/** Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ +abbr[title] { border-bottom: 1px dotted; } + +/** Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ +b, strong { font-weight: bold; } + +/** Address styling not present in Safari and Chrome. */ +dfn { font-style: italic; } + +/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari, and Chrome. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +/** Address styling not present in IE 8/9. */ +mark { background: #ff0; color: #000; } + +/** Address inconsistent and variable font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { top: -0.5em; } + +sub { bottom: -0.25em; } + +/* Embedded content ========================================================================== */ +/** Remove border when inside `a` element in IE 8/9/10. */ +img { border: 0; } + +/** Correct overflow not hidden in IE 9/10/11. */ +svg:not(:root) { overflow: hidden; } + +/* Grouping content ========================================================================== */ +/** Address margin not present in IE 8/9 and Safari. */ +figure { margin: 1em 40px; } + +/** Address differences between Firefox and other browsers. */ +hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } + +/** Contain overflow in all browsers. */ +pre { overflow: auto; } + +/** Address odd `em`-unit font size rendering in all browsers. */ +code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; } + +/* Forms ========================================================================== */ +/** Known limitation: by default, Chrome and Safari on OS X allow very limited styling of `select`, unless a `border` property is set. */ +/** 1. Correct color not being inherited. Known issue: affects color of disabled elements. 2. Correct font properties not being inherited. 3. Address margins set differently in Firefox 4+, Safari, and Chrome. */ +button, input, optgroup, select, textarea { color: inherit; /* 1 */ font: inherit; /* 2 */ margin: 0; /* 3 */ } + +/** Address `overflow` set to `hidden` in IE 8/9/10/11. */ +button { overflow: visible; } + +/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. Correct `select` style inheritance in Firefox. */ +button, select { text-transform: none; } + +/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ +button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } + +/** Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { cursor: default; } + +/** Remove inner padding and border in Firefox 4+. */ +button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } + +/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ +input { line-height: normal; } + +/** It's recommended that you don't attempt to style these elements. Firefox's implementation doesn't respect box-sizing, padding, or width. 1. Address box sizing set to `content-box` in IE 8/9/10. 2. Remove excess padding in IE 8/9/10. */ +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } + +/** Fix the cursor style for Chrome's increment/decrement buttons. For certain `font-size` values of the `input`, it causes the cursor style of the decrement button to change from `default` to `text`. */ +input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { height: auto; } + +/** 1. Address `appearance` set to `searchfield` in Safari and Chrome. 2. Address `box-sizing` set to `border-box` in Safari and Chrome (include `-moz` to future-proof). */ +input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } + +/** Remove inner padding and search cancel button in Safari and Chrome on OS X. Safari (but not Chrome) clips the cancel button when the search input has padding (and `textfield` appearance). */ +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** Define consistent border, margin, and padding. */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct `color` not being inherited in IE 8/9/10/11. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ +legend { border: 0; /* 1 */ padding: 0; /* 2 */ } + +/** Remove default vertical scrollbar in IE 8/9/10/11. */ +textarea { overflow: auto; } + +/** Don't inherit the `font-weight` (applied by a rule above). NOTE: the default cannot safely be changed in Chrome and Safari on OS X. */ +optgroup { font-weight: bold; } + +/* Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +td, th { padding: 0; } + +* { box-sizing: border-box; } + +::selection { color: #fff; background: #7253ed; } + +html { font-size: 15px !important; scroll-behavior: smooth; } + +@media (min-width: 31.25rem) { html { font-size: 16px !important; } } + +body { font-family: -apple-system, BlinkMacSystemFont, "helvetica neue", helvetica, roboto, noto, "segoe ui", arial, sans-serif; font-size: inherit; line-height: 1.4; color: #5c5962; background-color: #fff; } + +ol, ul, dl, pre, address, blockquote, table, div, hr, form, fieldset, noscript .table-wrapper { margin-top: 0; } + +h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: 1em; font-weight: 500; line-height: 1.25; color: #27262b; } + +p { margin-top: 1em; margin-bottom: 1em; } + +a { color: #7253ed; text-decoration: none; } + +a:not([class]) { text-decoration: none; background-image: linear-gradient(#eeebee 0%, #eeebee 100%); background-repeat: repeat-x; background-position: 0 100%; background-size: 1px 1px; } + +a:not([class]):hover { background-image: linear-gradient(rgba(114, 83, 237, 0.45) 0%, rgba(114, 83, 237, 0.45) 100%); background-size: 1px 1px; } + +code { font-family: "SFMono-Regular", Menlo, Consolas, Monospace; font-size: 0.75em; line-height: 1.4; } + +figure, pre { margin: 0; } + +li { margin: 0.25em 0; } + +img { max-width: 100%; height: auto; } + +hr { height: 1px; padding: 0; margin: 2rem 0; background-color: #eeebee; border: 0; } + +.side-bar { z-index: 0; display: flex; flex-wrap: wrap; background-color: #f5f6fa; } + +@media (min-width: 50rem) { .side-bar { flex-wrap: nowrap; position: fixed; width: 248px; height: 100%; flex-direction: column; border-right: 1px solid #eeebee; align-items: flex-end; } } + +@media (min-width: 66.5rem) { .side-bar { width: calc((100% - 1064px) / 2 + 264px); min-width: 264px; } } + +@media (min-width: 50rem) { .main { position: relative; max-width: 800px; margin-left: 248px; } } + +@media (min-width: 66.5rem) { .main { margin-left: calc( (100% - 1064px) / 2 + 264px); } } + +.main-content-wrap { padding-right: 1rem; padding-left: 1rem; padding-top: 1rem; padding-bottom: 1rem; } + +@media (min-width: 50rem) { .main-content-wrap { padding-right: 2rem; padding-left: 2rem; } } + +@media (min-width: 50rem) { .main-content-wrap { padding-top: 2rem; padding-bottom: 2rem; } } + +.main-header { z-index: 0; display: none; background-color: #f5f6fa; } + +@media (min-width: 50rem) { .main-header { display: flex; justify-content: space-between; height: 60px; background-color: #fff; border-bottom: 1px solid #eeebee; } } + +.main-header.nav-open { display: block; } + +@media (min-width: 50rem) { .main-header.nav-open { display: flex; } } + +.site-nav, .site-header, .site-footer { width: 100%; } + +@media (min-width: 66.5rem) { .site-nav, .site-header, .site-footer { width: 264px; } } + +.site-nav { display: none; } + +.site-nav.nav-open { display: block; } + +@media (min-width: 50rem) { .site-nav { display: block; padding-top: 3rem; padding-bottom: 1rem; overflow-y: auto; flex: 1 1 auto; } } + +.site-header { display: flex; min-height: 60px; align-items: center; } + +@media (min-width: 50rem) { .site-header { height: 60px; max-height: 60px; border-bottom: 1px solid #eeebee; } } + +.site-title { padding-right: 1rem; padding-left: 1rem; flex-grow: 1; display: flex; height: 100%; align-items: center; padding-top: 0.75rem; padding-bottom: 0.75rem; color: #27262b; font-size: 18px !important; } + +@media (min-width: 50rem) { .site-title { padding-right: 2rem; padding-left: 2rem; } } + +@media (min-width: 31.25rem) { .site-title { font-size: 24px !important; line-height: 1.25; } } + +@media (min-width: 50rem) { .site-title { padding-top: 0.5rem; padding-bottom: 0.5rem; } } + +.site-button { display: flex; height: 100%; padding: 1rem; align-items: center; } + +@media (min-width: 50rem) { .site-header .site-button { display: none; } } + +.site-title:hover { background-image: linear-gradient(-90deg, #ebedf5 0%, rgba(235, 237, 245, 0.8) 80%, rgba(235, 237, 245, 0) 100%); } + +.site-button:hover { background-image: linear-gradient(-90deg, #ebedf5 0%, rgba(235, 237, 245, 0.8) 100%); } + +body { position: relative; padding-bottom: 4rem; overflow-y: scroll; } + +@media (min-width: 50rem) { body { position: static; padding-bottom: 0; } } + +.site-footer { padding-right: 1rem; padding-left: 1rem; position: absolute; bottom: 0; left: 0; padding-top: 1rem; padding-bottom: 1rem; color: #959396; font-size: 11px !important; } + +@media (min-width: 50rem) { .site-footer { padding-right: 2rem; padding-left: 2rem; } } + +@media (min-width: 31.25rem) { .site-footer { font-size: 12px !important; } } + +@media (min-width: 50rem) { .site-footer { position: static; justify-self: end; } } + +.icon { width: 1.5rem; height: 1.5rem; color: #7253ed; } + +.main-content { line-height: 1.6; } + +.main-content ol, .main-content ul, .main-content dl, .main-content pre, .main-content address, .main-content blockquote, .main-content .table-wrapper { margin-top: 0.5em; } + +.main-content a { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + +.main-content ul, .main-content ol { padding-left: 1.5em; } + +.main-content li .highlight { margin-top: 0.25rem; } + +.main-content ol { list-style-type: none; counter-reset: step-counter; } + +.main-content ol > li { position: relative; } + +.main-content ol > li::before { position: absolute; top: 0.2em; left: -1.6em; color: #959396; content: counter(step-counter); counter-increment: step-counter; font-size: 12px !important; } + +@media (min-width: 31.25rem) { .main-content ol > li::before { font-size: 14px !important; } } + +@media (min-width: 31.25rem) { .main-content ol > li::before { top: 0.11em; } } + +.main-content ol > li ol { counter-reset: sub-counter; } + +.main-content ol > li ol li::before { content: counter(sub-counter, lower-alpha); counter-increment: sub-counter; } + +.main-content ul { list-style: none; } + +.main-content ul > li::before { position: absolute; margin-left: -1.4em; color: #959396; content: "•"; } + +.main-content .task-list { padding-left: 0; } + +.main-content .task-list-item { display: flex; align-items: center; } + +.main-content .task-list-item::before { content: ""; } + +.main-content .task-list-item-checkbox { margin-right: 0.6em; } + +.main-content hr + * { margin-top: 0; } + +.main-content h1:first-of-type { margin-top: 0.5em; } + +.main-content dl { display: grid; grid-template: auto / 10em 1fr; } + +.main-content dt, .main-content dd { margin: 0.25em 0; } + +.main-content dt { grid-column: 1; font-weight: 500; text-align: right; } + +.main-content dt::after { content: ":"; } + +.main-content dd { grid-column: 2; margin-bottom: 0; margin-left: 1em; } + +.main-content .anchor-heading { position: absolute; right: -1rem; width: 1.5rem; height: 100%; padding-right: 0.25rem; padding-left: 0.25rem; overflow: visible; } + +@media (min-width: 50rem) { .main-content .anchor-heading { right: auto; left: -1.5rem; } } + +.main-content .anchor-heading svg { display: inline-block; width: 100%; height: 100%; color: #7253ed; visibility: hidden; } + +.main-content .anchor-heading:hover svg, .main-content h1:hover > .anchor-heading svg, .main-content h2:hover > .anchor-heading svg, .main-content h3:hover > .anchor-heading svg, .main-content h4:hover > .anchor-heading svg, .main-content h5:hover > .anchor-heading svg, .main-content h6:hover > .anchor-heading svg { visibility: visible; } + +.main-content summary { cursor: pointer; } + +.main-content h1, .main-content h2, .main-content h3, .main-content h4, .main-content h5, .main-content h6 { position: relative; margin-top: 1.5em; margin-bottom: 0.25em; } + +.main-content h1:first-child, .main-content h2:first-child, .main-content h3:first-child, .main-content h4:first-child, .main-content h5:first-child, .main-content h6:first-child { margin-top: 0.5rem; } + +.main-content h1 + table, .main-content h1 + .table-wrapper, .main-content h1 + .code-example, .main-content h1 + .highlighter-rouge, .main-content h2 + table, .main-content h2 + .table-wrapper, .main-content h2 + .code-example, .main-content h2 + .highlighter-rouge, .main-content h3 + table, .main-content h3 + .table-wrapper, .main-content h3 + .code-example, .main-content h3 + .highlighter-rouge, .main-content h4 + table, .main-content h4 + .table-wrapper, .main-content h4 + .code-example, .main-content h4 + .highlighter-rouge, .main-content h5 + table, .main-content h5 + .table-wrapper, .main-content h5 + .code-example, .main-content h5 + .highlighter-rouge, .main-content h6 + table, .main-content h6 + .table-wrapper, .main-content h6 + .code-example, .main-content h6 + .highlighter-rouge { margin-top: 1em; } + +.main-content h1 + p, .main-content h2 + p, .main-content h3 + p, .main-content h4 + p, .main-content h5 + p, .main-content h6 + p { margin-top: 0; } + +.nav-list { padding: 0; margin-top: 0; margin-bottom: 0; list-style: none; } + +.nav-list .nav-list-item { font-size: 15px !important; position: relative; margin: 0; } + +@media (min-width: 31.25rem) { .nav-list .nav-list-item { font-size: 16px !important; } } + +@media (min-width: 50rem) { .nav-list .nav-list-item { font-size: 12px !important; } } + +@media (min-width: 50rem) and (min-width: 31.25rem) { .nav-list .nav-list-item { font-size: 14px !important; } } + +.nav-list .nav-list-item .nav-list-link { display: block; min-height: 3rem; padding-top: 0.25rem; padding-bottom: 0.25rem; line-height: 2.5rem; padding-right: 3rem; padding-left: 1rem; } + +@media (min-width: 50rem) { .nav-list .nav-list-item .nav-list-link { min-height: 2rem; line-height: 1.5rem; padding-right: 2rem; padding-left: 2rem; } } + +.nav-list .nav-list-item .nav-list-link.active { font-weight: 600; text-decoration: none; } + +.nav-list .nav-list-item .nav-list-link:hover, .nav-list .nav-list-item .nav-list-link.active { background-image: linear-gradient(-90deg, #ebedf5 0%, rgba(235, 237, 245, 0.8) 80%, rgba(235, 237, 245, 0) 100%); } + +.nav-list .nav-list-item .nav-list-expander { position: absolute; right: 0; width: 3rem; height: 3rem; padding-top: 0.75rem; padding-right: 0.75rem; padding-bottom: 0.75rem; padding-left: 0.75rem; color: #7253ed; } + +@media (min-width: 50rem) { .nav-list .nav-list-item .nav-list-expander { width: 2rem; height: 2rem; padding-top: 0.5rem; padding-right: 0.5rem; padding-bottom: 0.5rem; padding-left: 0.5rem; } } + +.nav-list .nav-list-item .nav-list-expander:hover { background-image: linear-gradient(-90deg, #ebedf5 0%, rgba(235, 237, 245, 0.8) 100%); } + +.nav-list .nav-list-item .nav-list-expander svg { transform: rotate(90deg); } + +.nav-list .nav-list-item > .nav-list { display: none; padding-left: 0.75rem; list-style: none; } + +.nav-list .nav-list-item > .nav-list .nav-list-item { position: relative; } + +.nav-list .nav-list-item > .nav-list .nav-list-item .nav-list-link { color: #5c5962; } + +.nav-list .nav-list-item > .nav-list .nav-list-item .nav-list-expander { color: #5c5962; } + +.nav-list .nav-list-item.active > .nav-list-expander svg { transform: rotate(-90deg); } + +.nav-list .nav-list-item.active > .nav-list { display: block; } + +.nav-category { padding-top: 0.5rem; padding-right: 1rem; padding-bottom: 0.5rem; padding-left: 1rem; font-weight: 600; text-align: end; text-transform: uppercase; border-bottom: 1px solid #eeebee; font-size: 11px !important; } + +@media (min-width: 31.25rem) { .nav-category { font-size: 12px !important; } } + +@media (min-width: 50rem) { .nav-category { padding-right: 2rem; padding-left: 2rem; margin-top: 1rem; text-align: start; } .nav-category:first-child { margin-top: 0; } } + +.aux-nav { height: 100%; overflow-x: auto; font-size: 11px !important; } + +@media (min-width: 31.25rem) { .aux-nav { font-size: 12px !important; } } + +.aux-nav .aux-nav-list { display: flex; height: 100%; padding: 0; margin: 0; list-style: none; } + +.aux-nav .aux-nav-list-item { display: inline-block; height: 100%; padding: 0; margin: 0; } + +@media (min-width: 50rem) { .aux-nav { padding-right: 1rem; } } + +@media (min-width: 50rem) { .breadcrumb-nav { margin-top: -1rem; } } + +.breadcrumb-nav-list { padding-left: 0; margin-bottom: 0.75rem; list-style: none; } + +.breadcrumb-nav-list-item { display: table-cell; font-size: 11px !important; } + +@media (min-width: 31.25rem) { .breadcrumb-nav-list-item { font-size: 12px !important; } } + +.breadcrumb-nav-list-item::before { display: none; } + +.breadcrumb-nav-list-item::after { display: inline-block; margin-right: 0.5rem; margin-left: 0.5rem; color: #959396; content: "/"; } + +.breadcrumb-nav-list-item:last-child::after { content: ""; } + +h1, .text-alpha { font-size: 32px !important; line-height: 1.25; font-weight: 300; } + +@media (min-width: 31.25rem) { h1, .text-alpha { font-size: 36px !important; } } + +h2, .text-beta { font-size: 18px !important; } + +@media (min-width: 31.25rem) { h2, .text-beta { font-size: 24px !important; line-height: 1.25; } } + +h3, .text-gamma { font-size: 16px !important; } + +@media (min-width: 31.25rem) { h3, .text-gamma { font-size: 18px !important; } } + +h4, .text-delta { font-size: 11px !important; font-weight: 400; text-transform: uppercase; letter-spacing: 0.1em; } + +@media (min-width: 31.25rem) { h4, .text-delta { font-size: 12px !important; } } + +h5, .text-epsilon { font-size: 12px !important; color: #44434d; } + +@media (min-width: 31.25rem) { h5, .text-epsilon { font-size: 14px !important; } } + +h6, .text-zeta { font-size: 11px !important; color: #44434d; } + +@media (min-width: 31.25rem) { h6, .text-zeta { font-size: 12px !important; } } + +.text-small { font-size: 11px !important; } + +@media (min-width: 31.25rem) { .text-small { font-size: 12px !important; } } + +.text-mono { font-family: "SFMono-Regular", Menlo, Consolas, Monospace !important; } + +.text-left { text-align: left !important; } + +.text-center { text-align: center !important; } + +.text-right { text-align: right !important; } + +.label, .label-blue { display: inline-block; padding-top: 0.16em; padding-right: 0.56em; padding-bottom: 0.16em; padding-left: 0.56em; margin-right: 0.5rem; margin-left: 0.5rem; color: #fff; text-transform: uppercase; vertical-align: middle; background-color: #2869e6; font-size: 11px !important; border-radius: 12px; } + +@media (min-width: 31.25rem) { .label, .label-blue { font-size: 12px !important; } } + +.label-green { background-color: #009c7b; } + +.label-purple { background-color: #5e41d0; } + +.label-red { background-color: #e94c4c; } + +.label-yellow { color: #44434d; background-color: #f7d12e; } + +.btn { display: inline-block; box-sizing: border-box; padding-top: 0.3em; padding-right: 1em; padding-bottom: 0.3em; padding-left: 1em; margin: 0; font-family: inherit; font-size: inherit; font-weight: 500; line-height: 1.5; color: #7253ed; text-decoration: none; vertical-align: baseline; cursor: pointer; background-color: #f7f7f7; border-width: 0; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); appearance: none; } + +.btn:focus { text-decoration: none; outline: none; box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.25); } + +.btn:focus:hover, .btn.selected:focus { box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.25); } + +.btn:hover, .btn.zeroclipboard-is-hover { color: #6a4aec; } + +.btn:hover, .btn:active, .btn.zeroclipboard-is-hover, .btn.zeroclipboard-is-active { text-decoration: none; background-color: #f4f4f4; } + +.btn:active, .btn.selected, .btn.zeroclipboard-is-active { background-color: #efefef; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn.selected:hover { background-color: #cfcfcf; } + +.btn:disabled, .btn:disabled:hover, .btn.disabled, .btn.disabled:hover { color: rgba(102, 102, 102, 0.5); cursor: default; background-color: rgba(229, 229, 229, 0.5); background-image: none; box-shadow: none; } + +.btn-outline { color: #7253ed; background: transparent; box-shadow: inset 0 0 0 2px #e6e1e8; } + +.btn-outline:hover, .btn-outline:active, .btn-outline.zeroclipboard-is-hover, .btn-outline.zeroclipboard-is-active { color: #6341eb; text-decoration: none; background-color: transparent; box-shadow: inset 0 0 0 3px #e6e1e8; } + +.btn-outline:focus { text-decoration: none; outline: none; box-shadow: inset 0 0 0 2px #5c5962, 0 0 0 3px rgba(0, 0, 255, 0.25); } + +.btn-outline:focus:hover, .btn-outline.selected:focus { box-shadow: inset 0 0 0 2px #5c5962; } + +.btn-primary { color: #fff; background-color: #5739ce; background-image: linear-gradient(#6f55d5, #5739ce); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); } + +.btn-primary:hover, .btn-primary.zeroclipboard-is-hover { color: #fff; background-color: #5132cb; background-image: linear-gradient(#6549d2, #5132cb); } + +.btn-primary:active, .btn-primary.selected, .btn-primary.zeroclipboard-is-active { background-color: #4f31c6; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn-primary.selected:hover { background-color: #472cb2; } + +.btn-purple { color: #fff; background-color: #5739ce; background-image: linear-gradient(#6f55d5, #5739ce); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); } + +.btn-purple:hover, .btn-purple.zeroclipboard-is-hover { color: #fff; background-color: #5132cb; background-image: linear-gradient(#6549d2, #5132cb); } + +.btn-purple:active, .btn-purple.selected, .btn-purple.zeroclipboard-is-active { background-color: #4f31c6; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn-purple.selected:hover { background-color: #472cb2; } + +.btn-blue { color: #fff; background-color: #227efa; background-image: linear-gradient(#4593fb, #227efa); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); } + +.btn-blue:hover, .btn-blue.zeroclipboard-is-hover { color: #fff; background-color: #1878fa; background-image: linear-gradient(#368afa, #1878fa); } + +.btn-blue:active, .btn-blue.selected, .btn-blue.zeroclipboard-is-active { background-color: #1375f9; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn-blue.selected:hover { background-color: #0669ed; } + +.btn-green { color: #fff; background-color: #10ac7d; background-image: linear-gradient(#13cc95, #10ac7d); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12); } + +.btn-green:hover, .btn-green.zeroclipboard-is-hover { color: #fff; background-color: #0fa276; background-image: linear-gradient(#12be8b, #0fa276); } + +.btn-green:active, .btn-green.selected, .btn-green.zeroclipboard-is-active { background-color: #0f9e73; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15); } + +.btn-green.selected:hover { background-color: #0d8662; } + +.search { position: relative; z-index: 2; flex-grow: 1; height: 4rem; padding: 0.5rem; transition: padding linear 200ms; } + +@media (min-width: 50rem) { .search { position: relative !important; width: auto !important; height: 100% !important; padding: 0; transition: none; } } + +.search-input-wrap { position: relative; z-index: 1; height: 3rem; overflow: hidden; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); transition: height linear 200ms; } + +@media (min-width: 50rem) { .search-input-wrap { position: absolute; width: 100%; max-width: 536px; height: 100% !important; border-radius: 0; box-shadow: none; transition: width ease 400ms; } } + +.search-input { position: absolute; width: 100%; height: 100%; padding-top: 0.5rem; padding-right: 1rem; padding-bottom: 0.5rem; padding-left: 2.5rem; font-size: 16px; background-color: #fff; border-top: 0; border-right: 0; border-bottom: 0; border-left: 0; border-radius: 0; } + +@media (min-width: 50rem) { .search-input { padding-top: 1rem; padding-bottom: 1rem; padding-left: 3.5rem; font-size: 14px; background-color: #fff; transition: padding-left linear 200ms; } } + +.search-input:focus { outline: 0; } + +.search-input:focus + .search-label .search-icon { color: #7253ed; } + +.search-label { position: absolute; display: flex; height: 100%; padding-left: 1rem; } + +@media (min-width: 50rem) { .search-label { padding-left: 2rem; transition: padding-left linear 200ms; } } + +.search-label .search-icon { width: 1.2rem; height: 1.2rem; align-self: center; color: #959396; } + +.search-results { position: absolute; left: 0; display: none; width: 100%; max-height: calc(100% - 4rem); overflow-y: auto; background-color: #fff; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); } + +@media (min-width: 50rem) { .search-results { top: 100%; width: 536px; max-height: calc(100vh - 200%) !important; } } + +.search-results-list { padding-left: 0; margin-bottom: 0.25rem; list-style: none; font-size: 15px !important; } + +@media (min-width: 31.25rem) { .search-results-list { font-size: 16px !important; } } + +@media (min-width: 50rem) { .search-results-list { font-size: 12px !important; } } + +@media (min-width: 50rem) and (min-width: 31.25rem) { .search-results-list { font-size: 14px !important; } } + +.search-results-list-item { padding: 0; margin: 0; } + +.search-result { display: block; padding-top: 0.25rem; padding-right: 0.75rem; padding-bottom: 0.25rem; padding-left: 0.75rem; } + +.search-result:hover, .search-result.active { background-color: #ebedf5; } + +.search-result-title { display: block; padding-top: 0.5rem; padding-bottom: 0.5rem; } + +@media (min-width: 31.25rem) { .search-result-title { display: inline-block; width: 40%; padding-right: 0.5rem; vertical-align: top; } } + +.search-result-doc { display: flex; align-items: center; word-wrap: break-word; } + +.search-result-doc.search-result-doc-parent { opacity: 0.5; font-size: 12px !important; } + +@media (min-width: 31.25rem) { .search-result-doc.search-result-doc-parent { font-size: 14px !important; } } + +@media (min-width: 50rem) { .search-result-doc.search-result-doc-parent { font-size: 11px !important; } } + +@media (min-width: 50rem) and (min-width: 31.25rem) { .search-result-doc.search-result-doc-parent { font-size: 12px !important; } } + +.search-result-doc .search-result-icon { width: 1rem; height: 1rem; margin-right: 0.5rem; color: #7253ed; flex-shrink: 0; } + +.search-result-doc .search-result-doc-title { overflow: auto; } + +.search-result-section { margin-left: 1.5rem; word-wrap: break-word; } + +.search-result-rel-url { display: block; margin-left: 1.5rem; overflow: hidden; color: #959396; text-overflow: ellipsis; white-space: nowrap; font-size: 9px !important; } + +@media (min-width: 31.25rem) { .search-result-rel-url { font-size: 10px !important; } } + +.search-result-previews { display: block; padding-top: 0.5rem; padding-bottom: 0.5rem; padding-left: 1rem; margin-left: 0.5rem; color: #959396; word-wrap: break-word; border-left: 1px solid; border-left-color: #eeebee; font-size: 11px !important; } + +@media (min-width: 31.25rem) { .search-result-previews { font-size: 12px !important; } } + +@media (min-width: 31.25rem) { .search-result-previews { display: inline-block; width: 60%; padding-left: 0.5rem; margin-left: 0; vertical-align: top; } } + +.search-result-preview + .search-result-preview { margin-top: 0.25rem; } + +.search-result-highlight { font-weight: bold; } + +.search-no-result { padding-top: 0.5rem; padding-right: 0.75rem; padding-bottom: 0.5rem; padding-left: 0.75rem; font-size: 12px !important; } + +@media (min-width: 31.25rem) { .search-no-result { font-size: 14px !important; } } + +.search-button { position: fixed; right: 1rem; bottom: 1rem; display: flex; width: 3.5rem; height: 3.5rem; background-color: #fff; border: 1px solid rgba(114, 83, 237, 0.3); border-radius: 1.75rem; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); align-items: center; justify-content: center; } + +.search-overlay { position: fixed; top: 0; left: 0; z-index: 1; width: 0; height: 0; background-color: rgba(0, 0, 0, 0.3); opacity: 0; transition: opacity ease 400ms, width 0s 400ms, height 0s 400ms; } + +.search-active .search { position: fixed; top: 0; left: 0; width: 100%; height: 100%; padding: 0; } + +.search-active .search-input-wrap { height: 4rem; border-radius: 0; } + +@media (min-width: 50rem) { .search-active .search-input-wrap { width: 536px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); } } + +.search-active .search-input { background-color: #fff; } + +@media (min-width: 50rem) { .search-active .search-input { padding-left: 2.75rem; } } + +@media (min-width: 50rem) { .search-active .search-label { padding-left: 1.25rem; } } + +.search-active .search-results { display: block; } + +.search-active .search-overlay { width: 100%; height: 100%; opacity: 1; transition: opacity ease 400ms, width 0s, height 0s; } + +@media (min-width: 50rem) { .search-active .main { position: fixed; right: 0; left: 0; } } + +.search-active .main-header { padding-top: 4rem; } + +@media (min-width: 50rem) { .search-active .main-header { padding-top: 0; } } + +.table-wrapper { display: block; width: 100%; max-width: 100%; margin-bottom: 1.5rem; overflow-x: auto; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); } + +table { display: table; min-width: 100%; border-collapse: separate; } + +th, td { font-size: 12px !important; min-width: 120px; padding-top: 0.5rem; padding-right: 0.75rem; padding-bottom: 0.5rem; padding-left: 0.75rem; background-color: #fff; border-bottom: 1px solid rgba(238, 235, 238, 0.5); border-left: 1px solid #eeebee; } + +@media (min-width: 31.25rem) { th, td { font-size: 14px !important; } } + +th:first-of-type, td:first-of-type { border-left: 0; } + +tbody tr:last-of-type th, tbody tr:last-of-type td { border-bottom: 0; } + +tbody tr:last-of-type td { padding-bottom: 0.75rem; } + +thead th { border-bottom: 1px solid #eeebee; } + +code { padding: 0.2em 0.15em; font-weight: 400; background-color: #f5f6fa; border: 1px solid #eeebee; border-radius: 4px; } + +pre.highlight, figure.highlight { padding: 0.75rem; margin-top: 0; margin-bottom: 0; background-color: #f5f6fa; border-radius: 4px; -webkit-overflow-scrolling: touch; } + +pre.highlight code, figure.highlight code { padding: 0; border: 0; } + +.highlighter-rouge { margin-bottom: 0.75rem; } + +.highlight .c { color: #586e75; } + +.highlight .err { color: #93a1a1; } + +.highlight .g { color: #93a1a1; } + +.highlight .k { color: #859900; } + +.highlight .l { color: #93a1a1; } + +.highlight .n { color: #93a1a1; } + +.highlight .o { color: #859900; } + +.highlight .x { color: #cb4b16; } + +.highlight .p { color: #93a1a1; } + +.highlight .cm { color: #586e75; } + +.highlight .cp { color: #859900; } + +.highlight .c1 { color: #586e75; } + +.highlight .cs { color: #859900; } + +.highlight .gd { color: #2aa198; } + +.highlight .ge { font-style: italic; color: #93a1a1; } + +.highlight .gr { color: #dc322f; } + +.highlight .gh { color: #cb4b16; } + +.highlight .gi { color: #859900; } + +.highlight .go { color: #93a1a1; } + +.highlight .gp { color: #93a1a1; } + +.highlight .gs { font-weight: bold; color: #93a1a1; } + +.highlight .gu { color: #cb4b16; } + +.highlight .gt { color: #93a1a1; } + +.highlight .kc { color: #cb4b16; } + +.highlight .kd { color: #268bd2; } + +.highlight .kn { color: #859900; } + +.highlight .kp { color: #859900; } + +.highlight .kr { color: #268bd2; } + +.highlight .kt { color: #dc322f; } + +.highlight .ld { color: #93a1a1; } + +.highlight .m { color: #2aa198; } + +.highlight .s { color: #2aa198; } + +.highlight .na { color: #555; } + +.highlight .nb { color: #b58900; } + +.highlight .nc { color: #268bd2; } + +.highlight .no { color: #cb4b16; } + +.highlight .nd { color: #268bd2; } + +.highlight .ni { color: #cb4b16; } + +.highlight .ne { color: #cb4b16; } + +.highlight .nf { color: #268bd2; } + +.highlight .nl { color: #555; } + +.highlight .nn { color: #93a1a1; } + +.highlight .nx { color: #555; } + +.highlight .py { color: #93a1a1; } + +.highlight .nt { color: #268bd2; } + +.highlight .nv { color: #268bd2; } + +.highlight .ow { color: #859900; } + +.highlight .w { color: #93a1a1; } + +.highlight .mf { color: #2aa198; } + +.highlight .mh { color: #2aa198; } + +.highlight .mi { color: #2aa198; } + +.highlight .mo { color: #2aa198; } + +.highlight .sb { color: #586e75; } + +.highlight .sc { color: #2aa198; } + +.highlight .sd { color: #93a1a1; } + +.highlight .s2 { color: #2aa198; } + +.highlight .se { color: #cb4b16; } + +.highlight .sh { color: #93a1a1; } + +.highlight .si { color: #2aa198; } + +.highlight .sx { color: #2aa198; } + +.highlight .sr { color: #dc322f; } + +.highlight .s1 { color: #2aa198; } + +.highlight .ss { color: #2aa198; } + +.highlight .bp { color: #268bd2; } + +.highlight .vc { color: #268bd2; } + +.highlight .vg { color: #268bd2; } + +.highlight .vi { color: #268bd2; } + +.highlight .il { color: #2aa198; } + +.code-example { padding: 0.75rem; margin-bottom: 0.75rem; overflow: auto; border: 1px solid #eeebee; border-radius: 4px; } + +.code-example + .highlighter-rouge, .code-example + figure.highlight { position: relative; margin-top: -1rem; border-right: 1px solid #eeebee; border-bottom: 1px solid #eeebee; border-left: 1px solid #eeebee; border-top-left-radius: 0; border-top-right-radius: 0; } + +.text-grey-dk-000 { color: #959396 !important; } + +.text-grey-dk-100 { color: #5c5962 !important; } + +.text-grey-dk-200 { color: #44434d !important; } + +.text-grey-dk-250 { color: #302d36 !important; } + +.text-grey-dk-300 { color: #27262b !important; } + +.text-grey-lt-000 { color: #f5f6fa !important; } + +.text-grey-lt-100 { color: #eeebee !important; } + +.text-grey-lt-200 { color: #ecebed !important; } + +.text-grey-lt-300 { color: #e6e1e8 !important; } + +.text-blue-000 { color: #2c84fa !important; } + +.text-blue-100 { color: #2869e6 !important; } + +.text-blue-200 { color: #264caf !important; } + +.text-blue-300 { color: #183385 !important; } + +.text-green-000 { color: #41d693 !important; } + +.text-green-100 { color: #11b584 !important; } + +.text-green-200 { color: #009c7b !important; } + +.text-green-300 { color: #026e57 !important; } + +.text-purple-000 { color: #7253ed !important; } + +.text-purple-100 { color: #5e41d0 !important; } + +.text-purple-200 { color: #4e26af !important; } + +.text-purple-300 { color: #381885 !important; } + +.text-yellow-000 { color: #ffeb82 !important; } + +.text-yellow-100 { color: #fadf50 !important; } + +.text-yellow-200 { color: #f7d12e !important; } + +.text-yellow-300 { color: #e7af06 !important; } + +.text-red-000 { color: #f77e7e !important; } + +.text-red-100 { color: #f96e65 !important; } + +.text-red-200 { color: #e94c4c !important; } + +.text-red-300 { color: #dd2e2e !important; } + +.bg-grey-dk-000 { background-color: #959396 !important; } + +.bg-grey-dk-100 { background-color: #5c5962 !important; } + +.bg-grey-dk-200 { background-color: #44434d !important; } + +.bg-grey-dk-250 { background-color: #302d36 !important; } + +.bg-grey-dk-300 { background-color: #27262b !important; } + +.bg-grey-lt-000 { background-color: #f5f6fa !important; } + +.bg-grey-lt-100 { background-color: #eeebee !important; } + +.bg-grey-lt-200 { background-color: #ecebed !important; } + +.bg-grey-lt-300 { background-color: #e6e1e8 !important; } + +.bg-blue-000 { background-color: #2c84fa !important; } + +.bg-blue-100 { background-color: #2869e6 !important; } + +.bg-blue-200 { background-color: #264caf !important; } + +.bg-blue-300 { background-color: #183385 !important; } + +.bg-green-000 { background-color: #41d693 !important; } + +.bg-green-100 { background-color: #11b584 !important; } + +.bg-green-200 { background-color: #009c7b !important; } + +.bg-green-300 { background-color: #026e57 !important; } + +.bg-purple-000 { background-color: #7253ed !important; } + +.bg-purple-100 { background-color: #5e41d0 !important; } + +.bg-purple-200 { background-color: #4e26af !important; } + +.bg-purple-300 { background-color: #381885 !important; } + +.bg-yellow-000 { background-color: #ffeb82 !important; } + +.bg-yellow-100 { background-color: #fadf50 !important; } + +.bg-yellow-200 { background-color: #f7d12e !important; } + +.bg-yellow-300 { background-color: #e7af06 !important; } + +.bg-red-000 { background-color: #f77e7e !important; } + +.bg-red-100 { background-color: #f96e65 !important; } + +.bg-red-200 { background-color: #e94c4c !important; } + +.bg-red-300 { background-color: #dd2e2e !important; } + +.d-block { display: block !important; } + +.d-flex { display: flex !important; } + +.d-inline { display: inline !important; } + +.d-inline-block { display: inline-block !important; } + +.d-none { display: none !important; } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 20rem) { .d-xs-block { display: block !important; } .d-xs-flex { display: flex !important; } .d-xs-inline { display: inline !important; } .d-xs-inline-block { display: inline-block !important; } .d-xs-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 31.25rem) { .d-sm-block { display: block !important; } .d-sm-flex { display: flex !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 50rem) { .d-md-block { display: block !important; } .d-md-flex { display: flex !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 66.5rem) { .d-lg-block { display: block !important; } .d-lg-flex { display: flex !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +@media (min-width: 87.5rem) { .d-xl-block { display: block !important; } .d-xl-flex { display: flex !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-none { display: none !important; } } + +.float-left { float: left !important; } + +.float-right { float: right !important; } + +.flex-justify-start { justify-content: flex-start !important; } + +.flex-justify-end { justify-content: flex-end !important; } + +.flex-justify-between { justify-content: space-between !important; } + +.flex-justify-around { justify-content: space-around !important; } + +.v-align-baseline { vertical-align: baseline !important; } + +.v-align-bottom { vertical-align: bottom !important; } + +.v-align-middle { vertical-align: middle !important; } + +.v-align-text-bottom { vertical-align: text-bottom !important; } + +.v-align-text-top { vertical-align: text-top !important; } + +.v-align-top { vertical-align: top !important; } + +.fs-1 { font-size: 9px !important; } + +@media (min-width: 31.25rem) { .fs-1 { font-size: 10px !important; } } + +.fs-2 { font-size: 11px !important; } + +@media (min-width: 31.25rem) { .fs-2 { font-size: 12px !important; } } + +.fs-3 { font-size: 12px !important; } + +@media (min-width: 31.25rem) { .fs-3 { font-size: 14px !important; } } + +.fs-4 { font-size: 15px !important; } + +@media (min-width: 31.25rem) { .fs-4 { font-size: 16px !important; } } + +.fs-5 { font-size: 16px !important; } + +@media (min-width: 31.25rem) { .fs-5 { font-size: 18px !important; } } + +.fs-6 { font-size: 18px !important; } + +@media (min-width: 31.25rem) { .fs-6 { font-size: 24px !important; line-height: 1.25; } } + +.fs-7 { font-size: 24px !important; line-height: 1.25; } + +@media (min-width: 31.25rem) { .fs-7 { font-size: 32px !important; } } + +.fs-8 { font-size: 32px !important; line-height: 1.25; } + +@media (min-width: 31.25rem) { .fs-8 { font-size: 36px !important; } } + +.fs-9 { font-size: 36px !important; line-height: 1.25; } + +@media (min-width: 31.25rem) { .fs-9 { font-size: 42px !important; } } + +.fs-10 { font-size: 42px !important; line-height: 1.25; } + +@media (min-width: 31.25rem) { .fs-10 { font-size: 48px !important; } } + +.fw-300 { font-weight: 300 !important; } + +.fw-400 { font-weight: 400 !important; } + +.fw-500 { font-weight: 500 !important; } + +.fw-700 { font-weight: 700 !important; } + +.lh-0 { line-height: 0 !important; } + +.lh-default { line-height: 1.4; } + +.lh-tight { line-height: 1.25; } + +.ls-5 { letter-spacing: 0.05em !important; } + +.ls-10 { letter-spacing: 0.1em !important; } + +.ls-0 { letter-spacing: 0 !important; } + +.text-uppercase { text-transform: uppercase !important; } + +.list-style-none { padding: 0 !important; margin: 0 !important; list-style: none !important; } + +.list-style-none li::before { display: none !important; } + +.mx-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-0 { margin: 0 !important; } + +.mt-0 { margin-top: 0 !important; } + +.mr-0 { margin-right: 0 !important; } + +.mb-0 { margin-bottom: 0 !important; } + +.ml-0 { margin-left: 0 !important; } + +.mx-0 { margin-right: 0 !important; margin-left: 0 !important; } + +.my-0 { margin-top: 0 !important; margin-bottom: 0 !important; } + +.mxn-0 { margin-right: -0 !important; margin-left: -0 !important; } + +.mx-0-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-1 { margin: 0.25rem !important; } + +.mt-1 { margin-top: 0.25rem !important; } + +.mr-1 { margin-right: 0.25rem !important; } + +.mb-1 { margin-bottom: 0.25rem !important; } + +.ml-1 { margin-left: 0.25rem !important; } + +.mx-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } + +.my-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } + +.mxn-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } + +.mx-1-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-2 { margin: 0.5rem !important; } + +.mt-2 { margin-top: 0.5rem !important; } + +.mr-2 { margin-right: 0.5rem !important; } + +.mb-2 { margin-bottom: 0.5rem !important; } + +.ml-2 { margin-left: 0.5rem !important; } + +.mx-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } + +.my-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } + +.mxn-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } + +.mx-2-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-3 { margin: 0.75rem !important; } + +.mt-3 { margin-top: 0.75rem !important; } + +.mr-3 { margin-right: 0.75rem !important; } + +.mb-3 { margin-bottom: 0.75rem !important; } + +.ml-3 { margin-left: 0.75rem !important; } + +.mx-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } + +.my-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } + +.mxn-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } + +.mx-3-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-4 { margin: 1rem !important; } + +.mt-4 { margin-top: 1rem !important; } + +.mr-4 { margin-right: 1rem !important; } + +.mb-4 { margin-bottom: 1rem !important; } + +.ml-4 { margin-left: 1rem !important; } + +.mx-4 { margin-right: 1rem !important; margin-left: 1rem !important; } + +.my-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } + +.mxn-4 { margin-right: -1rem !important; margin-left: -1rem !important; } + +.mx-4-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-5 { margin: 1.5rem !important; } + +.mt-5 { margin-top: 1.5rem !important; } + +.mr-5 { margin-right: 1.5rem !important; } + +.mb-5 { margin-bottom: 1.5rem !important; } + +.ml-5 { margin-left: 1.5rem !important; } + +.mx-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } + +.my-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } + +.mxn-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } + +.mx-5-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-6 { margin: 2rem !important; } + +.mt-6 { margin-top: 2rem !important; } + +.mr-6 { margin-right: 2rem !important; } + +.mb-6 { margin-bottom: 2rem !important; } + +.ml-6 { margin-left: 2rem !important; } + +.mx-6 { margin-right: 2rem !important; margin-left: 2rem !important; } + +.my-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } + +.mxn-6 { margin-right: -2rem !important; margin-left: -2rem !important; } + +.mx-6-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-7 { margin: 2.5rem !important; } + +.mt-7 { margin-top: 2.5rem !important; } + +.mr-7 { margin-right: 2.5rem !important; } + +.mb-7 { margin-bottom: 2.5rem !important; } + +.ml-7 { margin-left: 2.5rem !important; } + +.mx-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } + +.my-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } + +.mxn-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } + +.mx-7-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-8 { margin: 3rem !important; } + +.mt-8 { margin-top: 3rem !important; } + +.mr-8 { margin-right: 3rem !important; } + +.mb-8 { margin-bottom: 3rem !important; } + +.ml-8 { margin-left: 3rem !important; } + +.mx-8 { margin-right: 3rem !important; margin-left: 3rem !important; } + +.my-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } + +.mxn-8 { margin-right: -3rem !important; margin-left: -3rem !important; } + +.mx-8-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-9 { margin: 3.5rem !important; } + +.mt-9 { margin-top: 3.5rem !important; } + +.mr-9 { margin-right: 3.5rem !important; } + +.mb-9 { margin-bottom: 3.5rem !important; } + +.ml-9 { margin-left: 3.5rem !important; } + +.mx-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } + +.my-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } + +.mxn-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } + +.mx-9-auto { margin-right: auto !important; margin-left: auto !important; } + +.m-10 { margin: 4rem !important; } + +.mt-10 { margin-top: 4rem !important; } + +.mr-10 { margin-right: 4rem !important; } + +.mb-10 { margin-bottom: 4rem !important; } + +.ml-10 { margin-left: 4rem !important; } + +.mx-10 { margin-right: 4rem !important; margin-left: 4rem !important; } + +.my-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } + +.mxn-10 { margin-right: -4rem !important; margin-left: -4rem !important; } + +.mx-10-auto { margin-right: auto !important; margin-left: auto !important; } + +@media (min-width: 20rem) { .m-xs-0 { margin: 0 !important; } .mt-xs-0 { margin-top: 0 !important; } .mr-xs-0 { margin-right: 0 !important; } .mb-xs-0 { margin-bottom: 0 !important; } .ml-xs-0 { margin-left: 0 !important; } .mx-xs-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-xs-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-xs-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 20rem) { .m-xs-1 { margin: 0.25rem !important; } .mt-xs-1 { margin-top: 0.25rem !important; } .mr-xs-1 { margin-right: 0.25rem !important; } .mb-xs-1 { margin-bottom: 0.25rem !important; } .ml-xs-1 { margin-left: 0.25rem !important; } .mx-xs-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-xs-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-xs-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 20rem) { .m-xs-2 { margin: 0.5rem !important; } .mt-xs-2 { margin-top: 0.5rem !important; } .mr-xs-2 { margin-right: 0.5rem !important; } .mb-xs-2 { margin-bottom: 0.5rem !important; } .ml-xs-2 { margin-left: 0.5rem !important; } .mx-xs-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-xs-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-xs-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 20rem) { .m-xs-3 { margin: 0.75rem !important; } .mt-xs-3 { margin-top: 0.75rem !important; } .mr-xs-3 { margin-right: 0.75rem !important; } .mb-xs-3 { margin-bottom: 0.75rem !important; } .ml-xs-3 { margin-left: 0.75rem !important; } .mx-xs-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-xs-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-xs-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 20rem) { .m-xs-4 { margin: 1rem !important; } .mt-xs-4 { margin-top: 1rem !important; } .mr-xs-4 { margin-right: 1rem !important; } .mb-xs-4 { margin-bottom: 1rem !important; } .ml-xs-4 { margin-left: 1rem !important; } .mx-xs-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-xs-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-xs-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 20rem) { .m-xs-5 { margin: 1.5rem !important; } .mt-xs-5 { margin-top: 1.5rem !important; } .mr-xs-5 { margin-right: 1.5rem !important; } .mb-xs-5 { margin-bottom: 1.5rem !important; } .ml-xs-5 { margin-left: 1.5rem !important; } .mx-xs-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-xs-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-xs-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 20rem) { .m-xs-6 { margin: 2rem !important; } .mt-xs-6 { margin-top: 2rem !important; } .mr-xs-6 { margin-right: 2rem !important; } .mb-xs-6 { margin-bottom: 2rem !important; } .ml-xs-6 { margin-left: 2rem !important; } .mx-xs-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-xs-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-xs-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 20rem) { .m-xs-7 { margin: 2.5rem !important; } .mt-xs-7 { margin-top: 2.5rem !important; } .mr-xs-7 { margin-right: 2.5rem !important; } .mb-xs-7 { margin-bottom: 2.5rem !important; } .ml-xs-7 { margin-left: 2.5rem !important; } .mx-xs-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-xs-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-xs-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 20rem) { .m-xs-8 { margin: 3rem !important; } .mt-xs-8 { margin-top: 3rem !important; } .mr-xs-8 { margin-right: 3rem !important; } .mb-xs-8 { margin-bottom: 3rem !important; } .ml-xs-8 { margin-left: 3rem !important; } .mx-xs-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-xs-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-xs-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 20rem) { .m-xs-9 { margin: 3.5rem !important; } .mt-xs-9 { margin-top: 3.5rem !important; } .mr-xs-9 { margin-right: 3.5rem !important; } .mb-xs-9 { margin-bottom: 3.5rem !important; } .ml-xs-9 { margin-left: 3.5rem !important; } .mx-xs-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-xs-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-xs-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 20rem) { .m-xs-10 { margin: 4rem !important; } .mt-xs-10 { margin-top: 4rem !important; } .mr-xs-10 { margin-right: 4rem !important; } .mb-xs-10 { margin-bottom: 4rem !important; } .ml-xs-10 { margin-left: 4rem !important; } .mx-xs-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-xs-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-xs-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-0 { margin: 0 !important; } .mt-sm-0 { margin-top: 0 !important; } .mr-sm-0 { margin-right: 0 !important; } .mb-sm-0 { margin-bottom: 0 !important; } .ml-sm-0 { margin-left: 0 !important; } .mx-sm-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-sm-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-sm-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 31.25rem) { .m-sm-1 { margin: 0.25rem !important; } .mt-sm-1 { margin-top: 0.25rem !important; } .mr-sm-1 { margin-right: 0.25rem !important; } .mb-sm-1 { margin-bottom: 0.25rem !important; } .ml-sm-1 { margin-left: 0.25rem !important; } .mx-sm-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-sm-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-sm-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-2 { margin: 0.5rem !important; } .mt-sm-2 { margin-top: 0.5rem !important; } .mr-sm-2 { margin-right: 0.5rem !important; } .mb-sm-2 { margin-bottom: 0.5rem !important; } .ml-sm-2 { margin-left: 0.5rem !important; } .mx-sm-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-sm-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-sm-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-3 { margin: 0.75rem !important; } .mt-sm-3 { margin-top: 0.75rem !important; } .mr-sm-3 { margin-right: 0.75rem !important; } .mb-sm-3 { margin-bottom: 0.75rem !important; } .ml-sm-3 { margin-left: 0.75rem !important; } .mx-sm-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-sm-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-sm-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-4 { margin: 1rem !important; } .mt-sm-4 { margin-top: 1rem !important; } .mr-sm-4 { margin-right: 1rem !important; } .mb-sm-4 { margin-bottom: 1rem !important; } .ml-sm-4 { margin-left: 1rem !important; } .mx-sm-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-sm-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-sm-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-5 { margin: 1.5rem !important; } .mt-sm-5 { margin-top: 1.5rem !important; } .mr-sm-5 { margin-right: 1.5rem !important; } .mb-sm-5 { margin-bottom: 1.5rem !important; } .ml-sm-5 { margin-left: 1.5rem !important; } .mx-sm-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-sm-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-sm-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-6 { margin: 2rem !important; } .mt-sm-6 { margin-top: 2rem !important; } .mr-sm-6 { margin-right: 2rem !important; } .mb-sm-6 { margin-bottom: 2rem !important; } .ml-sm-6 { margin-left: 2rem !important; } .mx-sm-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-sm-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-sm-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-7 { margin: 2.5rem !important; } .mt-sm-7 { margin-top: 2.5rem !important; } .mr-sm-7 { margin-right: 2.5rem !important; } .mb-sm-7 { margin-bottom: 2.5rem !important; } .ml-sm-7 { margin-left: 2.5rem !important; } .mx-sm-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-sm-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-sm-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-8 { margin: 3rem !important; } .mt-sm-8 { margin-top: 3rem !important; } .mr-sm-8 { margin-right: 3rem !important; } .mb-sm-8 { margin-bottom: 3rem !important; } .ml-sm-8 { margin-left: 3rem !important; } .mx-sm-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-sm-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-sm-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-9 { margin: 3.5rem !important; } .mt-sm-9 { margin-top: 3.5rem !important; } .mr-sm-9 { margin-right: 3.5rem !important; } .mb-sm-9 { margin-bottom: 3.5rem !important; } .ml-sm-9 { margin-left: 3.5rem !important; } .mx-sm-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-sm-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-sm-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 31.25rem) { .m-sm-10 { margin: 4rem !important; } .mt-sm-10 { margin-top: 4rem !important; } .mr-sm-10 { margin-right: 4rem !important; } .mb-sm-10 { margin-bottom: 4rem !important; } .ml-sm-10 { margin-left: 4rem !important; } .mx-sm-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-sm-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-sm-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +@media (min-width: 50rem) { .m-md-0 { margin: 0 !important; } .mt-md-0 { margin-top: 0 !important; } .mr-md-0 { margin-right: 0 !important; } .mb-md-0 { margin-bottom: 0 !important; } .ml-md-0 { margin-left: 0 !important; } .mx-md-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-md-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-md-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 50rem) { .m-md-1 { margin: 0.25rem !important; } .mt-md-1 { margin-top: 0.25rem !important; } .mr-md-1 { margin-right: 0.25rem !important; } .mb-md-1 { margin-bottom: 0.25rem !important; } .ml-md-1 { margin-left: 0.25rem !important; } .mx-md-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-md-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-md-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 50rem) { .m-md-2 { margin: 0.5rem !important; } .mt-md-2 { margin-top: 0.5rem !important; } .mr-md-2 { margin-right: 0.5rem !important; } .mb-md-2 { margin-bottom: 0.5rem !important; } .ml-md-2 { margin-left: 0.5rem !important; } .mx-md-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-md-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-md-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 50rem) { .m-md-3 { margin: 0.75rem !important; } .mt-md-3 { margin-top: 0.75rem !important; } .mr-md-3 { margin-right: 0.75rem !important; } .mb-md-3 { margin-bottom: 0.75rem !important; } .ml-md-3 { margin-left: 0.75rem !important; } .mx-md-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-md-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-md-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 50rem) { .m-md-4 { margin: 1rem !important; } .mt-md-4 { margin-top: 1rem !important; } .mr-md-4 { margin-right: 1rem !important; } .mb-md-4 { margin-bottom: 1rem !important; } .ml-md-4 { margin-left: 1rem !important; } .mx-md-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-md-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-md-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 50rem) { .m-md-5 { margin: 1.5rem !important; } .mt-md-5 { margin-top: 1.5rem !important; } .mr-md-5 { margin-right: 1.5rem !important; } .mb-md-5 { margin-bottom: 1.5rem !important; } .ml-md-5 { margin-left: 1.5rem !important; } .mx-md-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-md-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-md-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 50rem) { .m-md-6 { margin: 2rem !important; } .mt-md-6 { margin-top: 2rem !important; } .mr-md-6 { margin-right: 2rem !important; } .mb-md-6 { margin-bottom: 2rem !important; } .ml-md-6 { margin-left: 2rem !important; } .mx-md-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-md-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-md-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 50rem) { .m-md-7 { margin: 2.5rem !important; } .mt-md-7 { margin-top: 2.5rem !important; } .mr-md-7 { margin-right: 2.5rem !important; } .mb-md-7 { margin-bottom: 2.5rem !important; } .ml-md-7 { margin-left: 2.5rem !important; } .mx-md-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-md-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-md-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 50rem) { .m-md-8 { margin: 3rem !important; } .mt-md-8 { margin-top: 3rem !important; } .mr-md-8 { margin-right: 3rem !important; } .mb-md-8 { margin-bottom: 3rem !important; } .ml-md-8 { margin-left: 3rem !important; } .mx-md-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-md-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-md-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 50rem) { .m-md-9 { margin: 3.5rem !important; } .mt-md-9 { margin-top: 3.5rem !important; } .mr-md-9 { margin-right: 3.5rem !important; } .mb-md-9 { margin-bottom: 3.5rem !important; } .ml-md-9 { margin-left: 3.5rem !important; } .mx-md-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-md-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-md-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 50rem) { .m-md-10 { margin: 4rem !important; } .mt-md-10 { margin-top: 4rem !important; } .mr-md-10 { margin-right: 4rem !important; } .mb-md-10 { margin-bottom: 4rem !important; } .ml-md-10 { margin-left: 4rem !important; } .mx-md-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-md-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-md-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-0 { margin: 0 !important; } .mt-lg-0 { margin-top: 0 !important; } .mr-lg-0 { margin-right: 0 !important; } .mb-lg-0 { margin-bottom: 0 !important; } .ml-lg-0 { margin-left: 0 !important; } .mx-lg-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-lg-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-lg-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 66.5rem) { .m-lg-1 { margin: 0.25rem !important; } .mt-lg-1 { margin-top: 0.25rem !important; } .mr-lg-1 { margin-right: 0.25rem !important; } .mb-lg-1 { margin-bottom: 0.25rem !important; } .ml-lg-1 { margin-left: 0.25rem !important; } .mx-lg-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-lg-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-lg-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-2 { margin: 0.5rem !important; } .mt-lg-2 { margin-top: 0.5rem !important; } .mr-lg-2 { margin-right: 0.5rem !important; } .mb-lg-2 { margin-bottom: 0.5rem !important; } .ml-lg-2 { margin-left: 0.5rem !important; } .mx-lg-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-lg-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-lg-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-3 { margin: 0.75rem !important; } .mt-lg-3 { margin-top: 0.75rem !important; } .mr-lg-3 { margin-right: 0.75rem !important; } .mb-lg-3 { margin-bottom: 0.75rem !important; } .ml-lg-3 { margin-left: 0.75rem !important; } .mx-lg-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-lg-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-lg-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-4 { margin: 1rem !important; } .mt-lg-4 { margin-top: 1rem !important; } .mr-lg-4 { margin-right: 1rem !important; } .mb-lg-4 { margin-bottom: 1rem !important; } .ml-lg-4 { margin-left: 1rem !important; } .mx-lg-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-lg-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-lg-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-5 { margin: 1.5rem !important; } .mt-lg-5 { margin-top: 1.5rem !important; } .mr-lg-5 { margin-right: 1.5rem !important; } .mb-lg-5 { margin-bottom: 1.5rem !important; } .ml-lg-5 { margin-left: 1.5rem !important; } .mx-lg-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-lg-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-lg-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-6 { margin: 2rem !important; } .mt-lg-6 { margin-top: 2rem !important; } .mr-lg-6 { margin-right: 2rem !important; } .mb-lg-6 { margin-bottom: 2rem !important; } .ml-lg-6 { margin-left: 2rem !important; } .mx-lg-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-lg-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-lg-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-7 { margin: 2.5rem !important; } .mt-lg-7 { margin-top: 2.5rem !important; } .mr-lg-7 { margin-right: 2.5rem !important; } .mb-lg-7 { margin-bottom: 2.5rem !important; } .ml-lg-7 { margin-left: 2.5rem !important; } .mx-lg-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-lg-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-lg-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-8 { margin: 3rem !important; } .mt-lg-8 { margin-top: 3rem !important; } .mr-lg-8 { margin-right: 3rem !important; } .mb-lg-8 { margin-bottom: 3rem !important; } .ml-lg-8 { margin-left: 3rem !important; } .mx-lg-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-lg-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-lg-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-9 { margin: 3.5rem !important; } .mt-lg-9 { margin-top: 3.5rem !important; } .mr-lg-9 { margin-right: 3.5rem !important; } .mb-lg-9 { margin-bottom: 3.5rem !important; } .ml-lg-9 { margin-left: 3.5rem !important; } .mx-lg-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-lg-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-lg-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 66.5rem) { .m-lg-10 { margin: 4rem !important; } .mt-lg-10 { margin-top: 4rem !important; } .mr-lg-10 { margin-right: 4rem !important; } .mb-lg-10 { margin-bottom: 4rem !important; } .ml-lg-10 { margin-left: 4rem !important; } .mx-lg-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-lg-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-lg-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-0 { margin: 0 !important; } .mt-xl-0 { margin-top: 0 !important; } .mr-xl-0 { margin-right: 0 !important; } .mb-xl-0 { margin-bottom: 0 !important; } .ml-xl-0 { margin-left: 0 !important; } .mx-xl-0 { margin-right: 0 !important; margin-left: 0 !important; } .my-xl-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .mxn-xl-0 { margin-right: -0 !important; margin-left: -0 !important; } } + +@media (min-width: 87.5rem) { .m-xl-1 { margin: 0.25rem !important; } .mt-xl-1 { margin-top: 0.25rem !important; } .mr-xl-1 { margin-right: 0.25rem !important; } .mb-xl-1 { margin-bottom: 0.25rem !important; } .ml-xl-1 { margin-left: 0.25rem !important; } .mx-xl-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .my-xl-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .mxn-xl-1 { margin-right: -0.25rem !important; margin-left: -0.25rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-2 { margin: 0.5rem !important; } .mt-xl-2 { margin-top: 0.5rem !important; } .mr-xl-2 { margin-right: 0.5rem !important; } .mb-xl-2 { margin-bottom: 0.5rem !important; } .ml-xl-2 { margin-left: 0.5rem !important; } .mx-xl-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .my-xl-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .mxn-xl-2 { margin-right: -0.5rem !important; margin-left: -0.5rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-3 { margin: 0.75rem !important; } .mt-xl-3 { margin-top: 0.75rem !important; } .mr-xl-3 { margin-right: 0.75rem !important; } .mb-xl-3 { margin-bottom: 0.75rem !important; } .ml-xl-3 { margin-left: 0.75rem !important; } .mx-xl-3 { margin-right: 0.75rem !important; margin-left: 0.75rem !important; } .my-xl-3 { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; } .mxn-xl-3 { margin-right: -0.75rem !important; margin-left: -0.75rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-4 { margin: 1rem !important; } .mt-xl-4 { margin-top: 1rem !important; } .mr-xl-4 { margin-right: 1rem !important; } .mb-xl-4 { margin-bottom: 1rem !important; } .ml-xl-4 { margin-left: 1rem !important; } .mx-xl-4 { margin-right: 1rem !important; margin-left: 1rem !important; } .my-xl-4 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .mxn-xl-4 { margin-right: -1rem !important; margin-left: -1rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-5 { margin: 1.5rem !important; } .mt-xl-5 { margin-top: 1.5rem !important; } .mr-xl-5 { margin-right: 1.5rem !important; } .mb-xl-5 { margin-bottom: 1.5rem !important; } .ml-xl-5 { margin-left: 1.5rem !important; } .mx-xl-5 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .my-xl-5 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .mxn-xl-5 { margin-right: -1.5rem !important; margin-left: -1.5rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-6 { margin: 2rem !important; } .mt-xl-6 { margin-top: 2rem !important; } .mr-xl-6 { margin-right: 2rem !important; } .mb-xl-6 { margin-bottom: 2rem !important; } .ml-xl-6 { margin-left: 2rem !important; } .mx-xl-6 { margin-right: 2rem !important; margin-left: 2rem !important; } .my-xl-6 { margin-top: 2rem !important; margin-bottom: 2rem !important; } .mxn-xl-6 { margin-right: -2rem !important; margin-left: -2rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-7 { margin: 2.5rem !important; } .mt-xl-7 { margin-top: 2.5rem !important; } .mr-xl-7 { margin-right: 2.5rem !important; } .mb-xl-7 { margin-bottom: 2.5rem !important; } .ml-xl-7 { margin-left: 2.5rem !important; } .mx-xl-7 { margin-right: 2.5rem !important; margin-left: 2.5rem !important; } .my-xl-7 { margin-top: 2.5rem !important; margin-bottom: 2.5rem !important; } .mxn-xl-7 { margin-right: -2.5rem !important; margin-left: -2.5rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-8 { margin: 3rem !important; } .mt-xl-8 { margin-top: 3rem !important; } .mr-xl-8 { margin-right: 3rem !important; } .mb-xl-8 { margin-bottom: 3rem !important; } .ml-xl-8 { margin-left: 3rem !important; } .mx-xl-8 { margin-right: 3rem !important; margin-left: 3rem !important; } .my-xl-8 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .mxn-xl-8 { margin-right: -3rem !important; margin-left: -3rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-9 { margin: 3.5rem !important; } .mt-xl-9 { margin-top: 3.5rem !important; } .mr-xl-9 { margin-right: 3.5rem !important; } .mb-xl-9 { margin-bottom: 3.5rem !important; } .ml-xl-9 { margin-left: 3.5rem !important; } .mx-xl-9 { margin-right: 3.5rem !important; margin-left: 3.5rem !important; } .my-xl-9 { margin-top: 3.5rem !important; margin-bottom: 3.5rem !important; } .mxn-xl-9 { margin-right: -3.5rem !important; margin-left: -3.5rem !important; } } + +@media (min-width: 87.5rem) { .m-xl-10 { margin: 4rem !important; } .mt-xl-10 { margin-top: 4rem !important; } .mr-xl-10 { margin-right: 4rem !important; } .mb-xl-10 { margin-bottom: 4rem !important; } .ml-xl-10 { margin-left: 4rem !important; } .mx-xl-10 { margin-right: 4rem !important; margin-left: 4rem !important; } .my-xl-10 { margin-top: 4rem !important; margin-bottom: 4rem !important; } .mxn-xl-10 { margin-right: -4rem !important; margin-left: -4rem !important; } } + +.p-0 { padding: 0 !important; } + +.pt-0 { padding-top: 0 !important; } + +.pr-0 { padding-right: 0 !important; } + +.pb-0 { padding-bottom: 0 !important; } + +.pl-0 { padding-left: 0 !important; } + +.px-0 { padding-right: 0 !important; padding-left: 0 !important; } + +.py-0 { padding-top: 0 !important; padding-bottom: 0 !important; } + +.p-1 { padding: 0.25rem !important; } + +.pt-1 { padding-top: 0.25rem !important; } + +.pr-1 { padding-right: 0.25rem !important; } + +.pb-1 { padding-bottom: 0.25rem !important; } + +.pl-1 { padding-left: 0.25rem !important; } + +.px-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } + +.py-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } + +.p-2 { padding: 0.5rem !important; } + +.pt-2 { padding-top: 0.5rem !important; } + +.pr-2 { padding-right: 0.5rem !important; } + +.pb-2 { padding-bottom: 0.5rem !important; } + +.pl-2 { padding-left: 0.5rem !important; } + +.px-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } + +.py-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } + +.p-3 { padding: 0.75rem !important; } + +.pt-3 { padding-top: 0.75rem !important; } + +.pr-3 { padding-right: 0.75rem !important; } + +.pb-3 { padding-bottom: 0.75rem !important; } + +.pl-3 { padding-left: 0.75rem !important; } + +.px-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } + +.py-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } + +.p-4 { padding: 1rem !important; } + +.pt-4 { padding-top: 1rem !important; } + +.pr-4 { padding-right: 1rem !important; } + +.pb-4 { padding-bottom: 1rem !important; } + +.pl-4 { padding-left: 1rem !important; } + +.px-4 { padding-right: 1rem !important; padding-left: 1rem !important; } + +.py-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } + +.p-5 { padding: 1.5rem !important; } + +.pt-5 { padding-top: 1.5rem !important; } + +.pr-5 { padding-right: 1.5rem !important; } + +.pb-5 { padding-bottom: 1.5rem !important; } + +.pl-5 { padding-left: 1.5rem !important; } + +.px-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } + +.py-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } + +.p-6 { padding: 2rem !important; } + +.pt-6 { padding-top: 2rem !important; } + +.pr-6 { padding-right: 2rem !important; } + +.pb-6 { padding-bottom: 2rem !important; } + +.pl-6 { padding-left: 2rem !important; } + +.px-6 { padding-right: 2rem !important; padding-left: 2rem !important; } + +.py-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } + +.p-7 { padding: 2.5rem !important; } + +.pt-7 { padding-top: 2.5rem !important; } + +.pr-7 { padding-right: 2.5rem !important; } + +.pb-7 { padding-bottom: 2.5rem !important; } + +.pl-7 { padding-left: 2.5rem !important; } + +.px-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } + +.py-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } + +.p-8 { padding: 3rem !important; } + +.pt-8 { padding-top: 3rem !important; } + +.pr-8 { padding-right: 3rem !important; } + +.pb-8 { padding-bottom: 3rem !important; } + +.pl-8 { padding-left: 3rem !important; } + +.px-8 { padding-right: 3rem !important; padding-left: 3rem !important; } + +.py-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } + +.p-9 { padding: 3.5rem !important; } + +.pt-9 { padding-top: 3.5rem !important; } + +.pr-9 { padding-right: 3.5rem !important; } + +.pb-9 { padding-bottom: 3.5rem !important; } + +.pl-9 { padding-left: 3.5rem !important; } + +.px-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } + +.py-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } + +.p-10 { padding: 4rem !important; } + +.pt-10 { padding-top: 4rem !important; } + +.pr-10 { padding-right: 4rem !important; } + +.pb-10 { padding-bottom: 4rem !important; } + +.pl-10 { padding-left: 4rem !important; } + +.px-10 { padding-right: 4rem !important; padding-left: 4rem !important; } + +.py-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } + +@media (min-width: 20rem) { .p-xs-0 { padding: 0 !important; } .pt-xs-0 { padding-top: 0 !important; } .pr-xs-0 { padding-right: 0 !important; } .pb-xs-0 { padding-bottom: 0 !important; } .pl-xs-0 { padding-left: 0 !important; } .px-xs-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-xs-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-xs-1 { padding: 0.25rem !important; } .pt-xs-1 { padding-top: 0.25rem !important; } .pr-xs-1 { padding-right: 0.25rem !important; } .pb-xs-1 { padding-bottom: 0.25rem !important; } .pl-xs-1 { padding-left: 0.25rem !important; } .px-xs-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-xs-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-xs-2 { padding: 0.5rem !important; } .pt-xs-2 { padding-top: 0.5rem !important; } .pr-xs-2 { padding-right: 0.5rem !important; } .pb-xs-2 { padding-bottom: 0.5rem !important; } .pl-xs-2 { padding-left: 0.5rem !important; } .px-xs-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-xs-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-xs-3 { padding: 0.75rem !important; } .pt-xs-3 { padding-top: 0.75rem !important; } .pr-xs-3 { padding-right: 0.75rem !important; } .pb-xs-3 { padding-bottom: 0.75rem !important; } .pl-xs-3 { padding-left: 0.75rem !important; } .px-xs-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-xs-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-xs-4 { padding: 1rem !important; } .pt-xs-4 { padding-top: 1rem !important; } .pr-xs-4 { padding-right: 1rem !important; } .pb-xs-4 { padding-bottom: 1rem !important; } .pl-xs-4 { padding-left: 1rem !important; } .px-xs-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-xs-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-xs-5 { padding: 1.5rem !important; } .pt-xs-5 { padding-top: 1.5rem !important; } .pr-xs-5 { padding-right: 1.5rem !important; } .pb-xs-5 { padding-bottom: 1.5rem !important; } .pl-xs-5 { padding-left: 1.5rem !important; } .px-xs-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-xs-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-xs-6 { padding: 2rem !important; } .pt-xs-6 { padding-top: 2rem !important; } .pr-xs-6 { padding-right: 2rem !important; } .pb-xs-6 { padding-bottom: 2rem !important; } .pl-xs-6 { padding-left: 2rem !important; } .px-xs-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-xs-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-xs-7 { padding: 2.5rem !important; } .pt-xs-7 { padding-top: 2.5rem !important; } .pr-xs-7 { padding-right: 2.5rem !important; } .pb-xs-7 { padding-bottom: 2.5rem !important; } .pl-xs-7 { padding-left: 2.5rem !important; } .px-xs-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-xs-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-xs-8 { padding: 3rem !important; } .pt-xs-8 { padding-top: 3rem !important; } .pr-xs-8 { padding-right: 3rem !important; } .pb-xs-8 { padding-bottom: 3rem !important; } .pl-xs-8 { padding-left: 3rem !important; } .px-xs-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xs-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-xs-9 { padding: 3.5rem !important; } .pt-xs-9 { padding-top: 3.5rem !important; } .pr-xs-9 { padding-right: 3.5rem !important; } .pb-xs-9 { padding-bottom: 3.5rem !important; } .pl-xs-9 { padding-left: 3.5rem !important; } .px-xs-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-xs-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-xs-10 { padding: 4rem !important; } .pt-xs-10 { padding-top: 4rem !important; } .pr-xs-10 { padding-right: 4rem !important; } .pb-xs-10 { padding-bottom: 4rem !important; } .pl-xs-10 { padding-left: 4rem !important; } .px-xs-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-xs-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media (min-width: 31.25rem) { .p-sm-0 { padding: 0 !important; } .pt-sm-0 { padding-top: 0 !important; } .pr-sm-0 { padding-right: 0 !important; } .pb-sm-0 { padding-bottom: 0 !important; } .pl-sm-0 { padding-left: 0 !important; } .px-sm-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-sm-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-sm-1 { padding: 0.25rem !important; } .pt-sm-1 { padding-top: 0.25rem !important; } .pr-sm-1 { padding-right: 0.25rem !important; } .pb-sm-1 { padding-bottom: 0.25rem !important; } .pl-sm-1 { padding-left: 0.25rem !important; } .px-sm-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-sm-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-sm-2 { padding: 0.5rem !important; } .pt-sm-2 { padding-top: 0.5rem !important; } .pr-sm-2 { padding-right: 0.5rem !important; } .pb-sm-2 { padding-bottom: 0.5rem !important; } .pl-sm-2 { padding-left: 0.5rem !important; } .px-sm-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-sm-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-sm-3 { padding: 0.75rem !important; } .pt-sm-3 { padding-top: 0.75rem !important; } .pr-sm-3 { padding-right: 0.75rem !important; } .pb-sm-3 { padding-bottom: 0.75rem !important; } .pl-sm-3 { padding-left: 0.75rem !important; } .px-sm-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-sm-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-sm-4 { padding: 1rem !important; } .pt-sm-4 { padding-top: 1rem !important; } .pr-sm-4 { padding-right: 1rem !important; } .pb-sm-4 { padding-bottom: 1rem !important; } .pl-sm-4 { padding-left: 1rem !important; } .px-sm-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-sm-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-sm-5 { padding: 1.5rem !important; } .pt-sm-5 { padding-top: 1.5rem !important; } .pr-sm-5 { padding-right: 1.5rem !important; } .pb-sm-5 { padding-bottom: 1.5rem !important; } .pl-sm-5 { padding-left: 1.5rem !important; } .px-sm-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-sm-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-sm-6 { padding: 2rem !important; } .pt-sm-6 { padding-top: 2rem !important; } .pr-sm-6 { padding-right: 2rem !important; } .pb-sm-6 { padding-bottom: 2rem !important; } .pl-sm-6 { padding-left: 2rem !important; } .px-sm-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-sm-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-sm-7 { padding: 2.5rem !important; } .pt-sm-7 { padding-top: 2.5rem !important; } .pr-sm-7 { padding-right: 2.5rem !important; } .pb-sm-7 { padding-bottom: 2.5rem !important; } .pl-sm-7 { padding-left: 2.5rem !important; } .px-sm-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-sm-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-sm-8 { padding: 3rem !important; } .pt-sm-8 { padding-top: 3rem !important; } .pr-sm-8 { padding-right: 3rem !important; } .pb-sm-8 { padding-bottom: 3rem !important; } .pl-sm-8 { padding-left: 3rem !important; } .px-sm-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-sm-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-sm-9 { padding: 3.5rem !important; } .pt-sm-9 { padding-top: 3.5rem !important; } .pr-sm-9 { padding-right: 3.5rem !important; } .pb-sm-9 { padding-bottom: 3.5rem !important; } .pl-sm-9 { padding-left: 3.5rem !important; } .px-sm-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-sm-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-sm-10 { padding: 4rem !important; } .pt-sm-10 { padding-top: 4rem !important; } .pr-sm-10 { padding-right: 4rem !important; } .pb-sm-10 { padding-bottom: 4rem !important; } .pl-sm-10 { padding-left: 4rem !important; } .px-sm-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-sm-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media (min-width: 50rem) { .p-md-0 { padding: 0 !important; } .pt-md-0 { padding-top: 0 !important; } .pr-md-0 { padding-right: 0 !important; } .pb-md-0 { padding-bottom: 0 !important; } .pl-md-0 { padding-left: 0 !important; } .px-md-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-md-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-md-1 { padding: 0.25rem !important; } .pt-md-1 { padding-top: 0.25rem !important; } .pr-md-1 { padding-right: 0.25rem !important; } .pb-md-1 { padding-bottom: 0.25rem !important; } .pl-md-1 { padding-left: 0.25rem !important; } .px-md-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-md-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-md-2 { padding: 0.5rem !important; } .pt-md-2 { padding-top: 0.5rem !important; } .pr-md-2 { padding-right: 0.5rem !important; } .pb-md-2 { padding-bottom: 0.5rem !important; } .pl-md-2 { padding-left: 0.5rem !important; } .px-md-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-md-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-md-3 { padding: 0.75rem !important; } .pt-md-3 { padding-top: 0.75rem !important; } .pr-md-3 { padding-right: 0.75rem !important; } .pb-md-3 { padding-bottom: 0.75rem !important; } .pl-md-3 { padding-left: 0.75rem !important; } .px-md-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-md-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-md-4 { padding: 1rem !important; } .pt-md-4 { padding-top: 1rem !important; } .pr-md-4 { padding-right: 1rem !important; } .pb-md-4 { padding-bottom: 1rem !important; } .pl-md-4 { padding-left: 1rem !important; } .px-md-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-md-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-md-5 { padding: 1.5rem !important; } .pt-md-5 { padding-top: 1.5rem !important; } .pr-md-5 { padding-right: 1.5rem !important; } .pb-md-5 { padding-bottom: 1.5rem !important; } .pl-md-5 { padding-left: 1.5rem !important; } .px-md-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-md-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-md-6 { padding: 2rem !important; } .pt-md-6 { padding-top: 2rem !important; } .pr-md-6 { padding-right: 2rem !important; } .pb-md-6 { padding-bottom: 2rem !important; } .pl-md-6 { padding-left: 2rem !important; } .px-md-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-md-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-md-7 { padding: 2.5rem !important; } .pt-md-7 { padding-top: 2.5rem !important; } .pr-md-7 { padding-right: 2.5rem !important; } .pb-md-7 { padding-bottom: 2.5rem !important; } .pl-md-7 { padding-left: 2.5rem !important; } .px-md-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-md-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-md-8 { padding: 3rem !important; } .pt-md-8 { padding-top: 3rem !important; } .pr-md-8 { padding-right: 3rem !important; } .pb-md-8 { padding-bottom: 3rem !important; } .pl-md-8 { padding-left: 3rem !important; } .px-md-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-md-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-md-9 { padding: 3.5rem !important; } .pt-md-9 { padding-top: 3.5rem !important; } .pr-md-9 { padding-right: 3.5rem !important; } .pb-md-9 { padding-bottom: 3.5rem !important; } .pl-md-9 { padding-left: 3.5rem !important; } .px-md-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-md-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-md-10 { padding: 4rem !important; } .pt-md-10 { padding-top: 4rem !important; } .pr-md-10 { padding-right: 4rem !important; } .pb-md-10 { padding-bottom: 4rem !important; } .pl-md-10 { padding-left: 4rem !important; } .px-md-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-md-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media (min-width: 66.5rem) { .p-lg-0 { padding: 0 !important; } .pt-lg-0 { padding-top: 0 !important; } .pr-lg-0 { padding-right: 0 !important; } .pb-lg-0 { padding-bottom: 0 !important; } .pl-lg-0 { padding-left: 0 !important; } .px-lg-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-lg-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-lg-1 { padding: 0.25rem !important; } .pt-lg-1 { padding-top: 0.25rem !important; } .pr-lg-1 { padding-right: 0.25rem !important; } .pb-lg-1 { padding-bottom: 0.25rem !important; } .pl-lg-1 { padding-left: 0.25rem !important; } .px-lg-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-lg-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-lg-2 { padding: 0.5rem !important; } .pt-lg-2 { padding-top: 0.5rem !important; } .pr-lg-2 { padding-right: 0.5rem !important; } .pb-lg-2 { padding-bottom: 0.5rem !important; } .pl-lg-2 { padding-left: 0.5rem !important; } .px-lg-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-lg-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-lg-3 { padding: 0.75rem !important; } .pt-lg-3 { padding-top: 0.75rem !important; } .pr-lg-3 { padding-right: 0.75rem !important; } .pb-lg-3 { padding-bottom: 0.75rem !important; } .pl-lg-3 { padding-left: 0.75rem !important; } .px-lg-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-lg-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-lg-4 { padding: 1rem !important; } .pt-lg-4 { padding-top: 1rem !important; } .pr-lg-4 { padding-right: 1rem !important; } .pb-lg-4 { padding-bottom: 1rem !important; } .pl-lg-4 { padding-left: 1rem !important; } .px-lg-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-lg-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-lg-5 { padding: 1.5rem !important; } .pt-lg-5 { padding-top: 1.5rem !important; } .pr-lg-5 { padding-right: 1.5rem !important; } .pb-lg-5 { padding-bottom: 1.5rem !important; } .pl-lg-5 { padding-left: 1.5rem !important; } .px-lg-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-lg-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-lg-6 { padding: 2rem !important; } .pt-lg-6 { padding-top: 2rem !important; } .pr-lg-6 { padding-right: 2rem !important; } .pb-lg-6 { padding-bottom: 2rem !important; } .pl-lg-6 { padding-left: 2rem !important; } .px-lg-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-lg-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-lg-7 { padding: 2.5rem !important; } .pt-lg-7 { padding-top: 2.5rem !important; } .pr-lg-7 { padding-right: 2.5rem !important; } .pb-lg-7 { padding-bottom: 2.5rem !important; } .pl-lg-7 { padding-left: 2.5rem !important; } .px-lg-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-lg-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-lg-8 { padding: 3rem !important; } .pt-lg-8 { padding-top: 3rem !important; } .pr-lg-8 { padding-right: 3rem !important; } .pb-lg-8 { padding-bottom: 3rem !important; } .pl-lg-8 { padding-left: 3rem !important; } .px-lg-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-lg-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-lg-9 { padding: 3.5rem !important; } .pt-lg-9 { padding-top: 3.5rem !important; } .pr-lg-9 { padding-right: 3.5rem !important; } .pb-lg-9 { padding-bottom: 3.5rem !important; } .pl-lg-9 { padding-left: 3.5rem !important; } .px-lg-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-lg-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-lg-10 { padding: 4rem !important; } .pt-lg-10 { padding-top: 4rem !important; } .pr-lg-10 { padding-right: 4rem !important; } .pb-lg-10 { padding-bottom: 4rem !important; } .pl-lg-10 { padding-left: 4rem !important; } .px-lg-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-lg-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media (min-width: 87.5rem) { .p-xl-0 { padding: 0 !important; } .pt-xl-0 { padding-top: 0 !important; } .pr-xl-0 { padding-right: 0 !important; } .pb-xl-0 { padding-bottom: 0 !important; } .pl-xl-0 { padding-left: 0 !important; } .px-xl-0 { padding-right: 0 !important; padding-left: 0 !important; } .py-xl-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .p-xl-1 { padding: 0.25rem !important; } .pt-xl-1 { padding-top: 0.25rem !important; } .pr-xl-1 { padding-right: 0.25rem !important; } .pb-xl-1 { padding-bottom: 0.25rem !important; } .pl-xl-1 { padding-left: 0.25rem !important; } .px-xl-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .py-xl-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .p-xl-2 { padding: 0.5rem !important; } .pt-xl-2 { padding-top: 0.5rem !important; } .pr-xl-2 { padding-right: 0.5rem !important; } .pb-xl-2 { padding-bottom: 0.5rem !important; } .pl-xl-2 { padding-left: 0.5rem !important; } .px-xl-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .py-xl-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .p-xl-3 { padding: 0.75rem !important; } .pt-xl-3 { padding-top: 0.75rem !important; } .pr-xl-3 { padding-right: 0.75rem !important; } .pb-xl-3 { padding-bottom: 0.75rem !important; } .pl-xl-3 { padding-left: 0.75rem !important; } .px-xl-3 { padding-right: 0.75rem !important; padding-left: 0.75rem !important; } .py-xl-3 { padding-top: 0.75rem !important; padding-bottom: 0.75rem !important; } .p-xl-4 { padding: 1rem !important; } .pt-xl-4 { padding-top: 1rem !important; } .pr-xl-4 { padding-right: 1rem !important; } .pb-xl-4 { padding-bottom: 1rem !important; } .pl-xl-4 { padding-left: 1rem !important; } .px-xl-4 { padding-right: 1rem !important; padding-left: 1rem !important; } .py-xl-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .p-xl-5 { padding: 1.5rem !important; } .pt-xl-5 { padding-top: 1.5rem !important; } .pr-xl-5 { padding-right: 1.5rem !important; } .pb-xl-5 { padding-bottom: 1.5rem !important; } .pl-xl-5 { padding-left: 1.5rem !important; } .px-xl-5 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-xl-5 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .p-xl-6 { padding: 2rem !important; } .pt-xl-6 { padding-top: 2rem !important; } .pr-xl-6 { padding-right: 2rem !important; } .pb-xl-6 { padding-bottom: 2rem !important; } .pl-xl-6 { padding-left: 2rem !important; } .px-xl-6 { padding-right: 2rem !important; padding-left: 2rem !important; } .py-xl-6 { padding-top: 2rem !important; padding-bottom: 2rem !important; } .p-xl-7 { padding: 2.5rem !important; } .pt-xl-7 { padding-top: 2.5rem !important; } .pr-xl-7 { padding-right: 2.5rem !important; } .pb-xl-7 { padding-bottom: 2.5rem !important; } .pl-xl-7 { padding-left: 2.5rem !important; } .px-xl-7 { padding-right: 2.5rem !important; padding-left: 2.5rem !important; } .py-xl-7 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; } .p-xl-8 { padding: 3rem !important; } .pt-xl-8 { padding-top: 3rem !important; } .pr-xl-8 { padding-right: 3rem !important; } .pb-xl-8 { padding-bottom: 3rem !important; } .pl-xl-8 { padding-left: 3rem !important; } .px-xl-8 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xl-8 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .p-xl-9 { padding: 3.5rem !important; } .pt-xl-9 { padding-top: 3.5rem !important; } .pr-xl-9 { padding-right: 3.5rem !important; } .pb-xl-9 { padding-bottom: 3.5rem !important; } .pl-xl-9 { padding-left: 3.5rem !important; } .px-xl-9 { padding-right: 3.5rem !important; padding-left: 3.5rem !important; } .py-xl-9 { padding-top: 3.5rem !important; padding-bottom: 3.5rem !important; } .p-xl-10 { padding: 4rem !important; } .pt-xl-10 { padding-top: 4rem !important; } .pr-xl-10 { padding-right: 4rem !important; } .pb-xl-10 { padding-bottom: 4rem !important; } .pl-xl-10 { padding-left: 4rem !important; } .px-xl-10 { padding-right: 4rem !important; padding-left: 4rem !important; } .py-xl-10 { padding-top: 4rem !important; padding-bottom: 4rem !important; } } + +@media print { .site-footer, .site-button, #edit-this-page, #back-to-top, .site-nav, .main-header { display: none !important; } .side-bar { width: 100%; height: auto; border-right: 0 !important; } .site-header { border-bottom: 1px solid #eeebee; } .site-title { font-size: 16px !important; font-weight: 700 !important; } .text-small { font-size: 8pt !important; } pre.highlight { border: 1px solid #eeebee; } .main { max-width: none; margin-left: 0; } } + +.site-header { height: 90px; max-height: 90px; } + +@media (max-width: 90rem) and (min-width: 50rem) { .site-nav, .site-header, .site-footer { width: 364px; } .side-bar { width: 364px; } .main { margin-left: 364px; } } + +@media (min-width: 90rem) { .site-nav, .site-header, .site-footer { width: 364px; } .side-bar { width: calc((100%) / 2 - 364px); } .main { margin-left: calc((100%) / 2 - 364px); } .side-left { width: 364px; } } + +.main-fs { margin-left: 6px; margin-right: 6px; max-width: initial; height: calc(100% - 14rem); } + +.main-fs { padding-top: 2rem; } + +.main-fs { padding-top: 1rem; } + +@media (min-width: 50rem) and (max-width: 90rem) { .main-fs { margin-left: 384px; margin-right: 20px; width: calc(100% - 384px - 20px); max-width: initial; height: calc(100% - 14rem); } .main-fs { padding-top: 2rem; } } + +@media (min-width: 90rem) { .main-fs { margin-left: 444px; margin-right: 80px; width: calc(100% - 444px - 80px); max-width: initial; height: calc(100% - 14rem); } .main-fs { padding-top: 4rem; } } + +.canvas-container-jtd { margin-top: 4px; border: 2px solid gray; border-radius: 4px; width: 100%; height: 600px; } + +.container-jtd-fs { border: 2px solid gray; border-radius: 4px; width: 100%; } + +.canvas-container-jtd:not(.container-jtd-fs):not(.pointer-events) { pointer-events: none; } + +.pure-button { border-radius: 4px !important; } + +.pure-label { padding-left: 4px !important; } + +.pure-checkbox { display: inline !important; margin-right: 4px !important; } + +.slider-container { padding-left: 16px; padding-right: 16px; } + +th, td { min-width: auto; text-align: center; } + +/*# sourceMappingURL=just-the-docs-light.css.map */ \ No newline at end of file diff --git a/docs/assets/css/just-the-docs-light.css.map b/docs/assets/css/just-the-docs-light.css.map new file mode 100644 index 0000000..6d81869 --- /dev/null +++ b/docs/assets/css/just-the-docs-light.css.map @@ -0,0 +1,68 @@ +{ + "version": 3, + "file": "just-the-docs-light.css", + "sources": [ + "just-the-docs-light.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/support.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/_variables.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/_functions.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/mixins/mixins.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/mixins/_layout.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/mixins/_buttons.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/support/mixins/_typography.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/color_schemes/light.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/modules.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/vendor/normalize.scss/normalize.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/base.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/layout.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/content.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/navigation.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/typography.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/labels.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/buttons.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/search.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/tables.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/code.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/utilities.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_colors.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_layout.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_typography.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_lists.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/utilities/_spacing.scss", + "vendor/bundle/ruby/2.7.0/bundler/gems/just-the-docs-cdfad69c5b0a/_sass/print.scss", + "site/_sass/custom/custom.scss" + ], + "sourcesContent": [ + "\n@import \"./support/support\";\n@import \"./color_schemes/light\";\n@import \"./modules\";\n@import \"./custom/custom\";\n\n\n", + "@import \"./variables\";\n@import \"./functions\";\n@import \"./mixins/mixins\";\n", + "//\n// Typography\n//\n\n$body-font-family: -apple-system, BlinkMacSystemFont, \"helvetica neue\",\n helvetica, roboto, noto, \"segoe ui\", arial, sans-serif !default;\n$mono-font-family: \"SFMono-Regular\", Menlo, Consolas, Monospace !default;\n$root-font-size: 16px !default; // Base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n//\n// Colors\n//\n\n$white: #fff !default;\n\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n$body-background-color: $white !default;\n$sidebar-color: $grey-lt-000 !default;\n$search-background-color: $white !default;\n$table-background-color: $white !default;\n$code-background-color: $grey-lt-000 !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n\n$body-text-color: $grey-dk-100 !default;\n$body-heading-color: $grey-dk-300 !default;\n$search-result-preview-color: $grey-dk-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$btn-primary-color: $purple-100 !default;\n$base-button-color: #f7f7f7 !default;\n\n//\n// Spacing\n//\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n//\n// Borders\n//\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n//\n// Grid system\n//\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 264px !default;\n$nav-width-md: 248px !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 800px !default;\n$header-height: 60px !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n//\n// Media queries in pixels\n//\n\n$media-queries: (\n xs: 320px,\n sm: 500px,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 1400px,\n) !default;\n", + "@function rem($size, $unit: \"\") {\n $remSize: $size / $root-font-size;\n\n @if ($unit == false) {\n @return #{$remSize};\n } @else {\n @return #{$remSize}rem;\n }\n}\n", + "@import \"./layout\";\n@import \"./buttons\";\n@import \"./typography\";\n", + "// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value != null {\n // Prints a media query based on the value\n @media (min-width: rem($value)) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. \"\n + \"Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n", + "// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n", + "// Font size\n\n@mixin fs-1 {\n font-size: 9px !important;\n\n @include mq(sm) {\n font-size: 10px !important;\n }\n}\n\n@mixin fs-2 {\n font-size: 11px !important;\n\n @include mq(sm) {\n font-size: 12px !important;\n }\n}\n\n@mixin fs-3 {\n font-size: 12px !important;\n\n @include mq(sm) {\n font-size: 14px !important;\n }\n}\n\n@mixin fs-4 {\n font-size: 15px !important;\n\n @include mq(sm) {\n font-size: 16px !important;\n }\n}\n\n@mixin fs-5 {\n font-size: 16px !important;\n\n @include mq(sm) {\n font-size: 18px !important;\n }\n}\n\n@mixin fs-6 {\n font-size: 18px !important;\n\n @include mq(sm) {\n font-size: 24px !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n font-size: 24px !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: 32px !important;\n }\n}\n\n@mixin fs-8 {\n font-size: 32px !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: 36px !important;\n }\n}\n\n@mixin fs-9 {\n font-size: 36px !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: 42px !important;\n }\n}\n\n@mixin fs-10 {\n font-size: 42px !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: 48px !important;\n }\n}\n", + "", + "//\n// Import external dependencies\n//\n@import \"./vendor/normalize.scss/normalize.scss\";\n\n//\n// Modules\n//\n@import \"./base\";\n@import \"./layout\";\n@import \"./content\";\n@import \"./navigation\";\n@import \"./typography\";\n@import \"./labels\";\n@import \"./buttons\";\n@import \"./search\";\n@import \"./tables\";\n@import \"./code\";\n@import \"./utilities/utilities\";\n@import \"./print\";\n", + "/*! normalize.scss v0.1.0 | MIT License | based on git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n * user zoom.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n * (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; /* 2 */\n box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n", + "//\n// Base element style overrides\n//\n// stylelint-disable selector-no-type, selector-max-type\n\n* {\n box-sizing: border-box;\n}\n\n::selection {\n color: $white;\n background: $link-color;\n}\n\nhtml {\n @include fs-4;\n scroll-behavior: smooth;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: none;\n background-image: linear-gradient($border-color 0%, $border-color 100%);\n background-repeat: repeat-x;\n background-position: 0 100%;\n background-size: 1px 1px;\n\n &:hover {\n background-image: linear-gradient(\n rgba($link-color, 0.45) 0%,\n rgba($link-color, 0.45) 100%\n );\n background-size: 1px 1px;\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n", + "//\n// The basic two column layout\n//\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-wrap: nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n flex-direction: column;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n}\n\n.main {\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n margin-left: calc(\n (100% - #{$nav-width + $content-width}) / 2 + #{$nav-width}\n );\n }\n}\n\n.main-content-wrap {\n @include container;\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n background-color: $body-background-color;\n border-bottom: $border $border-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n @include container;\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n// stylelint-disable selector-max-type\n\nbody {\n position: relative;\n padding-bottom: $sp-10;\n overflow-y: scroll;\n\n @include mq(md) {\n position: static;\n padding-bottom: 0;\n }\n}\n\n// stylelint-enable selector-max-type\n\n.site-footer {\n @include container;\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n color: $grey-dk-000;\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n", + "@charset \"UTF-8\";\n\n//\n// Styles for rendered markdown in the .main-content container\n//\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list {\n padding-left: 0;\n }\n\n .task-list-item {\n display: flex;\n align-items: center;\n\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n &:first-child {\n margin-top: $sp-2;\n }\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge {\n margin-top: 1em;\n }\n\n + p {\n margin-top: 0;\n }\n }\n}\n", + "//\n// Main nav, breadcrumb, etc...\n//\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n @include fs-4;\n position: relative;\n margin: 0;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding-top: #{$nav-list-item-height-sm / 4};\n padding-right: #{$nav-list-item-height-sm / 4};\n padding-bottom: #{$nav-list-item-height-sm / 4};\n padding-left: #{$nav-list-item-height-sm / 4};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding-top: #{$nav-list-item-height / 4};\n padding-right: #{$nav-list-item-height / 4};\n padding-bottom: #{$nav-list-item-height / 4};\n padding-left: #{$nav-list-item-height / 4};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding-top: $sp-2;\n padding-right: $gutter-spacing-sm;\n padding-bottom: $sp-2;\n padding-left: $gutter-spacing-sm;\n font-weight: 600;\n text-align: end;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n", + "//\n// Typography\n//\n// stylelint-disable primer/selector-no-utility, primer/no-override, selector-no-type, selector-max-type\n\nh1,\n.text-alpha {\n @include fs-8;\n font-weight: 300;\n}\n\nh2,\n.text-beta {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n @include fs-2;\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n color: $grey-dk-200;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n color: $grey-dk-200;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n", + "//\n// Labels (not the form kind)\n//\n\n.label,\n.label-blue {\n display: inline-block;\n padding-top: 0.16em;\n padding-right: 0.56em;\n padding-bottom: 0.16em;\n padding-left: 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n @include fs-2;\n border-radius: 12px;\n}\n\n.label-green {\n background-color: $green-200;\n}\n\n.label-purple {\n background-color: $purple-100;\n}\n\n.label-red {\n background-color: $red-200;\n}\n\n.label-yellow {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n", + "//\n// Buttons and things that look like buttons\n//\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding-top: 0.3em;\n padding-right: 1em;\n padding-bottom: 0.3em;\n padding-left: 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: inset 0 0 0 2px $grey-dk-100, 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-000);\n}\n\n.btn-green {\n @include btn-color($white, $green-100);\n}\n", + "//\n// Search input and autocomplete\n//\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration / 2};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration / 2};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding-top: $sp-2;\n padding-right: $gutter-spacing-sm;\n padding-bottom: $sp-2;\n padding-left: #{$gutter-spacing-sm + $sp-5};\n font-size: 16px;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n padding-left: #{$gutter-spacing + $sp-5};\n font-size: 14px;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration / 2};\n }\n\n &:focus {\n outline: 0;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration / 2};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding-top: $sp-1;\n padding-right: $sp-3;\n padding-bottom: $sp-1;\n padding-left: $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding-top: $sp-2;\n padding-right: $sp-3;\n padding-bottom: $sp-2;\n padding-left: $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 / 2};\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition: opacity ease $transition-duration, width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: #{$sp-4 * 1.25 + $sp-5};\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: #{$sp-4 * 1.25};\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition: opacity ease $transition-duration, width 0s, height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n", + "//\n// Tables\n//\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n @include fs-3;\n min-width: 120px;\n padding-top: $sp-2;\n padding-right: $sp-3;\n padding-bottom: $sp-2;\n padding-left: $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n", + "//\n// Code and syntax highlighting\n//\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type\n\ncode {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n}\n\npre.highlight,\nfigure.highlight {\n padding: $sp-3;\n margin-top: 0;\n margin-bottom: 0;\n background-color: $code-background-color;\n border-radius: $border-radius;\n -webkit-overflow-scrolling: touch;\n\n code {\n padding: 0;\n border: 0;\n }\n}\n\n.highlighter-rouge {\n margin-bottom: $sp-3;\n}\n\n.highlight .c {\n color: #586e75;\n} // comment //\n.highlight .err {\n color: #93a1a1;\n} // error //\n.highlight .g {\n color: #93a1a1;\n} // generic //\n.highlight .k {\n color: #859900;\n} // keyword //\n.highlight .l {\n color: #93a1a1;\n} // literal //\n.highlight .n {\n color: #93a1a1;\n} // name //\n.highlight .o {\n color: #859900;\n} // operator //\n.highlight .x {\n color: #cb4b16;\n} // other //\n.highlight .p {\n color: #93a1a1;\n} // punctuation //\n.highlight .cm {\n color: #586e75;\n} // comment.multiline //\n.highlight .cp {\n color: #859900;\n} // comment.preproc //\n.highlight .c1 {\n color: #586e75;\n} // comment.single //\n.highlight .cs {\n color: #859900;\n} // comment.special //\n.highlight .gd {\n color: #2aa198;\n} // generic.deleted //\n.highlight .ge {\n font-style: italic;\n color: #93a1a1;\n} // generic.emph //\n.highlight .gr {\n color: #dc322f;\n} // generic.error //\n.highlight .gh {\n color: #cb4b16;\n} // generic.heading //\n.highlight .gi {\n color: #859900;\n} // generic.inserted //\n.highlight .go {\n color: #93a1a1;\n} // generic.output //\n.highlight .gp {\n color: #93a1a1;\n} // generic.prompt //\n.highlight .gs {\n font-weight: bold;\n color: #93a1a1;\n} // generic.strong //\n.highlight .gu {\n color: #cb4b16;\n} // generic.subheading //\n.highlight .gt {\n color: #93a1a1;\n} // generic.traceback //\n.highlight .kc {\n color: #cb4b16;\n} // keyword.constant //\n.highlight .kd {\n color: #268bd2;\n} // keyword.declaration //\n.highlight .kn {\n color: #859900;\n} // keyword.namespace //\n.highlight .kp {\n color: #859900;\n} // keyword.pseudo //\n.highlight .kr {\n color: #268bd2;\n} // keyword.reserved //\n.highlight .kt {\n color: #dc322f;\n} // keyword.type //\n.highlight .ld {\n color: #93a1a1;\n} // literal.date //\n.highlight .m {\n color: #2aa198;\n} // literal.number //\n.highlight .s {\n color: #2aa198;\n} // literal.string //\n.highlight .na {\n color: #555;\n} // name.attribute //\n.highlight .nb {\n color: #b58900;\n} // name.builtin //\n.highlight .nc {\n color: #268bd2;\n} // name.class //\n.highlight .no {\n color: #cb4b16;\n} // name.constant //\n.highlight .nd {\n color: #268bd2;\n} // name.decorator //\n.highlight .ni {\n color: #cb4b16;\n} // name.entity //\n.highlight .ne {\n color: #cb4b16;\n} // name.exception //\n.highlight .nf {\n color: #268bd2;\n} // name.function //\n.highlight .nl {\n color: #555;\n} // name.label //\n.highlight .nn {\n color: #93a1a1;\n} // name.namespace //\n.highlight .nx {\n color: #555;\n} // name.other //\n.highlight .py {\n color: #93a1a1;\n} // name.property //\n.highlight .nt {\n color: #268bd2;\n} // name.tag //\n.highlight .nv {\n color: #268bd2;\n} // name.variable //\n.highlight .ow {\n color: #859900;\n} // operator.word //\n.highlight .w {\n color: #93a1a1;\n} // text.whitespace //\n.highlight .mf {\n color: #2aa198;\n} // literal.number.float //\n.highlight .mh {\n color: #2aa198;\n} // literal.number.hex //\n.highlight .mi {\n color: #2aa198;\n} // literal.number.integer //\n.highlight .mo {\n color: #2aa198;\n} // literal.number.oct //\n.highlight .sb {\n color: #586e75;\n} // literal.string.backtick //\n.highlight .sc {\n color: #2aa198;\n} // literal.string.char //\n.highlight .sd {\n color: #93a1a1;\n} // literal.string.doc //\n.highlight .s2 {\n color: #2aa198;\n} // literal.string.double //\n.highlight .se {\n color: #cb4b16;\n} // literal.string.escape //\n.highlight .sh {\n color: #93a1a1;\n} // literal.string.heredoc //\n.highlight .si {\n color: #2aa198;\n} // literal.string.interpol //\n.highlight .sx {\n color: #2aa198;\n} // literal.string.other //\n.highlight .sr {\n color: #dc322f;\n} // literal.string.regex //\n.highlight .s1 {\n color: #2aa198;\n} // literal.string.single //\n.highlight .ss {\n color: #2aa198;\n} // literal.string.symbol //\n.highlight .bp {\n color: #268bd2;\n} // name.builtin.pseudo //\n.highlight .vc {\n color: #268bd2;\n} // name.variable.class //\n.highlight .vg {\n color: #268bd2;\n} // name.variable.global //\n.highlight .vi {\n color: #268bd2;\n} // name.variable.instance //\n.highlight .il {\n color: #2aa198;\n} // literal.number.integer.long //\n\n//\n// Code examples (rendered)\n//\n\n.code-example {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n", + "@import \"./colors\";\n@import \"./layout\";\n@import \"./typography\";\n@import \"./lists\";\n@import \"./spacing\";\n", + "//\n// Utility classes for colors\n//\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n", + "// stylelint-disable primer/selector-no-utility, primer/no-override\n//\n// Utility classes for layout\n//\n\n// Display\n\n.d-block {\n display: block !important;\n}\n.d-flex {\n display: flex !important;\n}\n.d-inline {\n display: inline !important;\n}\n.d-inline-block {\n display: inline-block !important;\n}\n.d-none {\n display: none !important;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n.v-align-middle {\n vertical-align: middle !important;\n}\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n.v-align-top {\n vertical-align: top !important;\n}\n", + "//\n// Utility classes for typography\n//\n\n// stylelint-disable primer/selector-no-utility, primer/no-override\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n// stylelint-enable primer/selector-no-utility\n", + "//\n// Utility classes for lists\n//\n\n// stylelint-disable primer/selector-no-utility, primer/no-override, selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n", + "//\n// Utility classes for margins and padding\n//\n\n// scss-lint:disable SpaceAfterPropertyName\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before, primer/selector-no-utility, primer/no-override\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n", + "// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type, primer/no-override,\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: $root-font-size !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n", + "$sidebar_width: 364px;\n\n.site-header {\n height: 90px;\n max-height: 90px;\n}\n\n@media (max-width: 90rem) and (min-width: 50rem) {\n .site-nav,\n .site-header,\n .site-footer {\n width: $sidebar_width;\n }\n\n $sidebar_width_offset: calc((100%) / 2 - #{$sidebar_width});\n\n .side-bar {\n width: $sidebar_width;\n }\n\n .main {\n margin-left: $sidebar_width;\n }\n}\n\n@media (min-width: 90rem) {\n .site-nav,\n .site-header,\n .site-footer {\n width: $sidebar_width;\n }\n\n $sidebar_width_offset: calc((100%) / 2 - #{$sidebar_width});\n\n .side-bar {\n width: $sidebar_width_offset;\n }\n\n .main {\n margin-left: $sidebar_width_offset;\n }\n\n .side-left {\n width: $sidebar_width;\n }\n}\n\n$margin: 6px;\n$margin-left: $margin;\n$margin-right: $margin;\n\n.main-fs {\n margin-left: $margin-left;\n margin-right: $margin-right;\n max-width: initial;\n height: calc(100% - 14rem);\n}\n\n.main-fs {\n padding-top: 2rem;\n}\n\n.main-fs {\n padding-top: 1rem;\n}\n\n@media (min-width: 50rem) and (max-width: 90rem) {\n $margin: 20px;\n $margin-left: $sidebar_width + $margin;\n $margin-right: $margin;\n\n .main-fs {\n margin-left: $margin-left;\n margin-right: $margin-right;\n width: calc(100% - #{$margin-left} - #{$margin-right});\n max-width: initial;\n height: calc(100% - 14rem);\n }\n\n .main-fs {\n padding-top: 2rem;\n }\n}\n\n@media (min-width: 90rem) {\n $margin: 80px;\n $margin-left: $sidebar_width + $margin;\n $margin-right: $margin;\n\n .main-fs {\n margin-left: $margin-left;\n margin-right: $margin-right;\n width: calc(100% - #{$margin-left} - #{$margin-right});\n max-width: initial;\n height: calc(100% - 14rem);\n }\n\n .main-fs {\n padding-top: 4rem;\n }\n}\n\n// body,\n// html {\n// height: 100%;\n// }\n\n.canvas-container-jtd {\n margin-top: 4px;\n border: 2px solid gray;\n border-radius: 4px;\n width: 100%;\n height: 600px;\n}\n\n.container-jtd-fs {\n border: 2px solid gray;\n border-radius: 4px;\n width: 100%;\n}\n\n.canvas-container-jtd:not(.container-jtd-fs):not(.pointer-events) {\n pointer-events: none;\n}\n\n.pure-button {\n border-radius: 4px !important;\n}\n\n.pure-label {\n padding-left: 4px !important;\n}\n\n.pure-checkbox {\n display: inline !important;\n margin-right: 4px !important;\n}\n\n.slider-container {\n padding-left: 16px;\n padding-right: 16px;\n}\n\nth,\ntd {\n min-width: auto;\n text-align: center;\n}\n" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/docs/assets/css/nouislider.min.css b/docs/assets/css/nouislider.min.css new file mode 100644 index 0000000..a6b0ef8 --- /dev/null +++ b/docs/assets/css/nouislider.min.css @@ -0,0 +1,2 @@ +/*! nouislider - 14.6.1 - 8/17/2020 */ +.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-ms-touch-action:none;touch-action:none;-ms-user-select:none;-moz-user-select:none;user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-target{position:relative}.noUi-base,.noUi-connects{width:100%;height:100%;position:relative;z-index:1}.noUi-connects{overflow:hidden;z-index:0}.noUi-connect,.noUi-origin{will-change:transform;position:absolute;z-index:1;top:0;right:0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;-webkit-transform-style:preserve-3d;transform-origin:0 0;transform-style:flat}.noUi-connect{height:100%;width:100%}.noUi-origin{height:10%;width:10%}.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin{left:0;right:auto}.noUi-vertical .noUi-origin{width:0}.noUi-horizontal .noUi-origin{height:0}.noUi-handle{-webkit-backface-visibility:hidden;backface-visibility:hidden;position:absolute}.noUi-touch-area{height:100%;width:100%}.noUi-state-tap .noUi-connect,.noUi-state-tap .noUi-origin{-webkit-transition:transform .3s;transition:transform .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;right:-17px;top:-6px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;right:-6px;top:-17px}.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle{left:-17px;right:auto}.noUi-target{background:#FAFAFA;border-radius:4px;border:1px solid #D3D3D3;box-shadow:inset 0 1px 1px #F0F0F0,0 3px 6px -5px #BBB}.noUi-connects{border-radius:3px}.noUi-connect{background:#3FB8AF}.noUi-draggable{cursor:ew-resize}.noUi-vertical .noUi-draggable{cursor:ns-resize}.noUi-handle{border:1px solid #D9D9D9;border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #EBEBEB,0 3px 6px -3px #BBB}.noUi-active{box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #DDD,0 3px 6px -3px #BBB}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#E8E7E6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect{background:#B8B8B8}[disabled] .noUi-handle,[disabled].noUi-handle,[disabled].noUi-target{cursor:not-allowed}.noUi-pips,.noUi-pips *{-moz-box-sizing:border-box;box-sizing:border-box}.noUi-pips{position:absolute;color:#999}.noUi-value{position:absolute;white-space:nowrap;text-align:center}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{position:absolute;background:#CCC}.noUi-marker-sub{background:#AAA}.noUi-marker-large{background:#AAA}.noUi-pips-horizontal{padding:10px 0;height:80px;top:100%;left:0;width:100%}.noUi-value-horizontal{-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}.noUi-rtl .noUi-value-horizontal{-webkit-transform:translate(50%,50%);transform:translate(50%,50%)}.noUi-marker-horizontal.noUi-marker{margin-left:-1px;width:2px;height:5px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{padding:0 10px;height:100%;top:0;left:100%}.noUi-value-vertical{-webkit-transform:translate(0,-50%);transform:translate(0,-50%);padding-left:25px}.noUi-rtl .noUi-value-vertical{-webkit-transform:translate(0,50%);transform:translate(0,50%)}.noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}.noUi-tooltip{display:block;position:absolute;border:1px solid #D9D9D9;border-radius:3px;background:#fff;color:#000;padding:5px;text-align:center;white-space:nowrap}.noUi-horizontal .noUi-tooltip{-webkit-transform:translate(-50%,0);transform:translate(-50%,0);left:50%;bottom:120%}.noUi-vertical .noUi-tooltip{-webkit-transform:translate(0,-50%);transform:translate(0,-50%);top:50%;right:120%}.noUi-horizontal .noUi-origin>.noUi-tooltip{-webkit-transform:translate(50%,0);transform:translate(50%,0);left:auto;bottom:10px}.noUi-vertical .noUi-origin>.noUi-tooltip{-webkit-transform:translate(0,-18px);transform:translate(0,-18px);top:auto;right:28px} \ No newline at end of file diff --git a/docs/assets/css/pretty-checkbox.min.css b/docs/assets/css/pretty-checkbox.min.css new file mode 100644 index 0000000..394fa2c --- /dev/null +++ b/docs/assets/css/pretty-checkbox.min.css @@ -0,0 +1,12 @@ +/** + * pretty-checkbox.css + * + * A pure CSS library to beautify checkbox and radio buttons + * + * Source: https://github.com/lokesh-coder/pretty-checkbox + * Demo: https://lokesh-coder.github.io/pretty-checkbox + * + * Copyright (c) 2017 Lokesh rajendran + */ + +.pretty *{box-sizing:border-box}.pretty input:not([type=checkbox]):not([type=radio]){display:none}.pretty{position:relative;display:inline-block;margin-right:1em;white-space:nowrap;line-height:1}.pretty input{position:absolute;left:0;top:0;min-width:1em;width:100%;height:100%;z-index:2;opacity:0;margin:0;padding:0;cursor:pointer}.pretty .state label{position:initial;display:inline-block;font-weight:400;margin:0;text-indent:1.5em;min-width:calc(1em + 2px)}.pretty .state label:after,.pretty .state label:before{content:'';width:calc(1em + 2px);height:calc(1em + 2px);display:block;box-sizing:border-box;border-radius:0;border:1px solid transparent;z-index:0;position:absolute;left:0;top:calc((0% - (100% - 1em)) - 8%);background-color:transparent}.pretty .state label:before{border-color:#bdc3c7}.pretty .state.p-is-hover,.pretty .state.p-is-indeterminate{display:none}@-webkit-keyframes zoom{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}@keyframes zoom{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}@-webkit-keyframes tada{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:scale(7);transform:scale(7)}38%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;opacity:1;-webkit-transform:scale(1);transform:scale(1)}55%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.5);transform:scale(1.5)}72%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}81%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.24);transform:scale(1.24)}89%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}95%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.04);transform:scale(1.04)}100%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}}@keyframes tada{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:scale(7);transform:scale(7)}38%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;opacity:1;-webkit-transform:scale(1);transform:scale(1)}55%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.5);transform:scale(1.5)}72%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}81%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.24);transform:scale(1.24)}89%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}95%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.04);transform:scale(1.04)}100%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes jelly{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}40%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}50%{-webkit-transform:scale3d(.85,1.15,1);transform:scale3d(.85,1.15,1)}65%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}75%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes jelly{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}40%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}50%{-webkit-transform:scale3d(.85,1.15,1);transform:scale3d(.85,1.15,1)}65%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}75%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@-webkit-keyframes rotate{0%{opacity:0;-webkit-transform:translateZ(-200px) rotate(-45deg);transform:translateZ(-200px) rotate(-45deg)}100%{opacity:1;-webkit-transform:translateZ(0) rotate(0);transform:translateZ(0) rotate(0)}}@keyframes rotate{0%{opacity:0;-webkit-transform:translateZ(-200px) rotate(-45deg);transform:translateZ(-200px) rotate(-45deg)}100%{opacity:1;-webkit-transform:translateZ(0) rotate(0);transform:translateZ(0) rotate(0)}}@-webkit-keyframes pulse{0%{box-shadow:0 0 0 0 #bdc3c7}100%{box-shadow:0 0 0 1.5em rgba(189,195,199,0)}}@keyframes pulse{0%{box-shadow:0 0 0 0 #bdc3c7}100%{box-shadow:0 0 0 1.5em rgba(189,195,199,0)}}.pretty.p-default.p-fill .state label:after{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.pretty.p-default .state label:after{-webkit-transform:scale(.6);-ms-transform:scale(.6);transform:scale(.6)}.pretty.p-default input:checked~.state label:after{background-color:#bdc3c7!important}.pretty.p-default.p-thick .state label:after,.pretty.p-default.p-thick .state label:before{border-width:calc(1em / 7)}.pretty.p-default.p-thick .state label:after{-webkit-transform:scale(.4)!important;-ms-transform:scale(.4)!important;transform:scale(.4)!important}.pretty.p-icon .state .icon{position:absolute;font-size:1em;width:calc(1em + 2px);height:calc(1em + 2px);left:0;z-index:1;text-align:center;line-height:normal;top:calc((0% - (100% - 1em)) - 8%);border:1px solid transparent;opacity:0}.pretty.p-icon .state .icon:before{margin:0;width:100%;height:100%;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1}.pretty.p-icon input:checked~.state .icon{opacity:1}.pretty.p-icon input:checked~.state label:before{border-color:#5a656b}.pretty.p-svg .state .svg{position:absolute;font-size:1em;width:calc(1em + 2px);height:calc(1em + 2px);left:0;z-index:1;text-align:center;line-height:normal;top:calc((0% - (100% - 1em)) - 8%);border:1px solid transparent;opacity:0}.pretty.p-svg .state svg{margin:0;width:100%;height:100%;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1}.pretty.p-svg input:checked~.state .svg{opacity:1}.pretty.p-image .state img{opacity:0;position:absolute;width:calc(1em + 2px);height:calc(1em + 2px);top:0;top:calc((0% - (100% - 1em)) - 8%);left:0;z-index:0;text-align:center;line-height:normal;-webkit-transform:scale(.8);-ms-transform:scale(.8);transform:scale(.8)}.pretty.p-image input:checked~.state img{opacity:1}.pretty.p-switch input{min-width:2em}.pretty.p-switch .state{position:relative}.pretty.p-switch .state:before{content:'';border:1px solid #bdc3c7;border-radius:60px;width:2em;box-sizing:unset;height:calc(1em + 2px);position:absolute;top:0;top:calc((0% - (100% - 1em)) - 16%);z-index:0;transition:all .5s ease}.pretty.p-switch .state label{text-indent:2.5em}.pretty.p-switch .state label:after,.pretty.p-switch .state label:before{transition:all .5s ease;border-radius:100%;left:0;border-color:transparent;-webkit-transform:scale(.8);-ms-transform:scale(.8);transform:scale(.8)}.pretty.p-switch .state label:after{background-color:#bdc3c7!important}.pretty.p-switch input:checked~.state:before{border-color:#5a656b}.pretty.p-switch input:checked~.state label:before{opacity:0}.pretty.p-switch input:checked~.state label:after{background-color:#5a656b!important;left:1em}.pretty.p-switch.p-fill input:checked~.state:before{border-color:#5a656b;background-color:#5a656b!important}.pretty.p-switch.p-fill input:checked~.state label:before{opacity:0}.pretty.p-switch.p-fill input:checked~.state label:after{background-color:#fff!important;left:1em}.pretty.p-switch.p-slim .state:before{height:.1em;background:#bdc3c7!important;top:calc(50% - .1em)}.pretty.p-switch.p-slim input:checked~.state:before{border-color:#5a656b;background-color:#5a656b!important}.pretty.p-has-hover input:hover~.state:not(.p-is-hover){display:none}.pretty.p-has-hover input:hover~.state.p-is-hover{display:block}.pretty.p-has-hover input:hover~.state.p-is-hover .icon{display:block}.pretty.p-has-focus input:focus~.state label:before{box-shadow:0 0 3px 0 #bdc3c7}.pretty.p-has-indeterminate input[type=checkbox]:indeterminate~.state:not(.p-is-indeterminate){display:none}.pretty.p-has-indeterminate input[type=checkbox]:indeterminate~.state.p-is-indeterminate{display:block}.pretty.p-has-indeterminate input[type=checkbox]:indeterminate~.state.p-is-indeterminate .icon{display:block;opacity:1}.pretty.p-toggle .state.p-on{opacity:0;display:none}.pretty.p-toggle .state .icon,.pretty.p-toggle .state .svg,.pretty.p-toggle .state img,.pretty.p-toggle .state.p-off{opacity:1;display:inherit}.pretty.p-toggle .state.p-off .icon{color:#bdc3c7}.pretty.p-toggle input:checked~.state.p-on{opacity:1;display:inherit}.pretty.p-toggle input:checked~.state.p-off{opacity:0;display:none}.pretty.p-plain input:checked~.state label:before,.pretty.p-plain.p-toggle .state label:before{content:none}.pretty.p-plain.p-plain .icon{-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}.pretty.p-round .state label:after,.pretty.p-round .state label:before{border-radius:100%}.pretty.p-round.p-icon .state .icon{border-radius:100%;overflow:hidden}.pretty.p-round.p-icon .state .icon:before{-webkit-transform:scale(.8);-ms-transform:scale(.8);transform:scale(.8)}.pretty.p-curve .state label:after,.pretty.p-curve .state label:before{border-radius:20%}.pretty.p-smooth .icon,.pretty.p-smooth .svg,.pretty.p-smooth label:after,.pretty.p-smooth label:before{transition:all .5s ease}.pretty.p-smooth input:checked+.state label:after{transition:all .3s ease}.pretty.p-smooth input:checked+.state .icon,.pretty.p-smooth input:checked+.state .svg,.pretty.p-smooth input:checked+.state img{-webkit-animation:zoom .2s ease;animation:zoom .2s ease}.pretty.p-smooth.p-default input:checked+.state label:after{-webkit-animation:zoom .2s ease;animation:zoom .2s ease}.pretty.p-smooth.p-plain input:checked+.state label:before{content:'';-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);transition:all .5s ease}.pretty.p-tada:not(.p-default) input:checked+.state .icon,.pretty.p-tada:not(.p-default) input:checked+.state .svg,.pretty.p-tada:not(.p-default) input:checked+.state img,.pretty.p-tada:not(.p-default) input:checked+.state label:after,.pretty.p-tada:not(.p-default) input:checked+.state label:before{-webkit-animation:tada .7s cubic-bezier(.25,.46,.45,.94) 1 alternate;animation:tada .7s cubic-bezier(.25,.46,.45,.94) 1 alternate;opacity:1}.pretty.p-jelly:not(.p-default) input:checked+.state .icon,.pretty.p-jelly:not(.p-default) input:checked+.state .svg,.pretty.p-jelly:not(.p-default) input:checked+.state img,.pretty.p-jelly:not(.p-default) input:checked+.state label:after,.pretty.p-jelly:not(.p-default) input:checked+.state label:before{-webkit-animation:jelly .7s cubic-bezier(.25,.46,.45,.94);animation:jelly .7s cubic-bezier(.25,.46,.45,.94);opacity:1}.pretty.p-jelly:not(.p-default) input:checked+.state label:before{border-color:transparent}.pretty.p-rotate:not(.p-default) input:checked~.state .icon,.pretty.p-rotate:not(.p-default) input:checked~.state .svg,.pretty.p-rotate:not(.p-default) input:checked~.state img,.pretty.p-rotate:not(.p-default) input:checked~.state label:after,.pretty.p-rotate:not(.p-default) input:checked~.state label:before{-webkit-animation:rotate .7s cubic-bezier(.25,.46,.45,.94);animation:rotate .7s cubic-bezier(.25,.46,.45,.94);opacity:1}.pretty.p-rotate:not(.p-default) input:checked~.state label:before{border-color:transparent}.pretty.p-pulse:not(.p-switch) input:checked~.state label:before{-webkit-animation:pulse 1s;animation:pulse 1s}.pretty input[disabled]{cursor:not-allowed;display:none}.pretty input[disabled]~*{opacity:.5}.pretty.p-locked input{display:none;cursor:not-allowed}.pretty input:checked~.state.p-primary label:after,.pretty.p-toggle .state.p-primary label:after{background-color:#428bca!important}.pretty input:checked~.state.p-primary .icon,.pretty input:checked~.state.p-primary .svg,.pretty.p-toggle .state.p-primary .icon,.pretty.p-toggle .state.p-primary .svg{color:#fff;stroke:#fff}.pretty input:checked~.state.p-primary-o label:before,.pretty.p-toggle .state.p-primary-o label:before{border-color:#428bca}.pretty input:checked~.state.p-primary-o label:after,.pretty.p-toggle .state.p-primary-o label:after{background-color:transparent}.pretty input:checked~.state.p-primary-o .icon,.pretty input:checked~.state.p-primary-o .svg,.pretty input:checked~.state.p-primary-o svg,.pretty.p-toggle .state.p-primary-o .icon,.pretty.p-toggle .state.p-primary-o .svg,.pretty.p-toggle .state.p-primary-o svg{color:#428bca;stroke:#428bca}.pretty.p-default:not(.p-fill) input:checked~.state.p-primary-o label:after{background-color:#428bca!important}.pretty.p-switch input:checked~.state.p-primary:before{border-color:#428bca}.pretty.p-switch.p-fill input:checked~.state.p-primary:before{background-color:#428bca!important}.pretty.p-switch.p-slim input:checked~.state.p-primary:before{border-color:#245682;background-color:#245682!important}.pretty input:checked~.state.p-info label:after,.pretty.p-toggle .state.p-info label:after{background-color:#5bc0de!important}.pretty input:checked~.state.p-info .icon,.pretty input:checked~.state.p-info .svg,.pretty.p-toggle .state.p-info .icon,.pretty.p-toggle .state.p-info .svg{color:#fff;stroke:#fff}.pretty input:checked~.state.p-info-o label:before,.pretty.p-toggle .state.p-info-o label:before{border-color:#5bc0de}.pretty input:checked~.state.p-info-o label:after,.pretty.p-toggle .state.p-info-o label:after{background-color:transparent}.pretty input:checked~.state.p-info-o .icon,.pretty input:checked~.state.p-info-o .svg,.pretty input:checked~.state.p-info-o svg,.pretty.p-toggle .state.p-info-o .icon,.pretty.p-toggle .state.p-info-o .svg,.pretty.p-toggle .state.p-info-o svg{color:#5bc0de;stroke:#5bc0de}.pretty.p-default:not(.p-fill) input:checked~.state.p-info-o label:after{background-color:#5bc0de!important}.pretty.p-switch input:checked~.state.p-info:before{border-color:#5bc0de}.pretty.p-switch.p-fill input:checked~.state.p-info:before{background-color:#5bc0de!important}.pretty.p-switch.p-slim input:checked~.state.p-info:before{border-color:#2390b0;background-color:#2390b0!important}.pretty input:checked~.state.p-success label:after,.pretty.p-toggle .state.p-success label:after{background-color:#5cb85c!important}.pretty input:checked~.state.p-success .icon,.pretty input:checked~.state.p-success .svg,.pretty.p-toggle .state.p-success .icon,.pretty.p-toggle .state.p-success .svg{color:#fff;stroke:#fff}.pretty input:checked~.state.p-success-o label:before,.pretty.p-toggle .state.p-success-o label:before{border-color:#5cb85c}.pretty input:checked~.state.p-success-o label:after,.pretty.p-toggle .state.p-success-o label:after{background-color:transparent}.pretty input:checked~.state.p-success-o .icon,.pretty input:checked~.state.p-success-o .svg,.pretty input:checked~.state.p-success-o svg,.pretty.p-toggle .state.p-success-o .icon,.pretty.p-toggle .state.p-success-o .svg,.pretty.p-toggle .state.p-success-o svg{color:#5cb85c;stroke:#5cb85c}.pretty.p-default:not(.p-fill) input:checked~.state.p-success-o label:after{background-color:#5cb85c!important}.pretty.p-switch input:checked~.state.p-success:before{border-color:#5cb85c}.pretty.p-switch.p-fill input:checked~.state.p-success:before{background-color:#5cb85c!important}.pretty.p-switch.p-slim input:checked~.state.p-success:before{border-color:#357935;background-color:#357935!important}.pretty input:checked~.state.p-warning label:after,.pretty.p-toggle .state.p-warning label:after{background-color:#f0ad4e!important}.pretty input:checked~.state.p-warning .icon,.pretty input:checked~.state.p-warning .svg,.pretty.p-toggle .state.p-warning .icon,.pretty.p-toggle .state.p-warning .svg{color:#fff;stroke:#fff}.pretty input:checked~.state.p-warning-o label:before,.pretty.p-toggle .state.p-warning-o label:before{border-color:#f0ad4e}.pretty input:checked~.state.p-warning-o label:after,.pretty.p-toggle .state.p-warning-o label:after{background-color:transparent}.pretty input:checked~.state.p-warning-o .icon,.pretty input:checked~.state.p-warning-o .svg,.pretty input:checked~.state.p-warning-o svg,.pretty.p-toggle .state.p-warning-o .icon,.pretty.p-toggle .state.p-warning-o .svg,.pretty.p-toggle .state.p-warning-o svg{color:#f0ad4e;stroke:#f0ad4e}.pretty.p-default:not(.p-fill) input:checked~.state.p-warning-o label:after{background-color:#f0ad4e!important}.pretty.p-switch input:checked~.state.p-warning:before{border-color:#f0ad4e}.pretty.p-switch.p-fill input:checked~.state.p-warning:before{background-color:#f0ad4e!important}.pretty.p-switch.p-slim input:checked~.state.p-warning:before{border-color:#c77c11;background-color:#c77c11!important}.pretty input:checked~.state.p-danger label:after,.pretty.p-toggle .state.p-danger label:after{background-color:#d9534f!important}.pretty input:checked~.state.p-danger .icon,.pretty input:checked~.state.p-danger .svg,.pretty.p-toggle .state.p-danger .icon,.pretty.p-toggle .state.p-danger .svg{color:#fff;stroke:#fff}.pretty input:checked~.state.p-danger-o label:before,.pretty.p-toggle .state.p-danger-o label:before{border-color:#d9534f}.pretty input:checked~.state.p-danger-o label:after,.pretty.p-toggle .state.p-danger-o label:after{background-color:transparent}.pretty input:checked~.state.p-danger-o .icon,.pretty input:checked~.state.p-danger-o .svg,.pretty input:checked~.state.p-danger-o svg,.pretty.p-toggle .state.p-danger-o .icon,.pretty.p-toggle .state.p-danger-o .svg,.pretty.p-toggle .state.p-danger-o svg{color:#d9534f;stroke:#d9534f}.pretty.p-default:not(.p-fill) input:checked~.state.p-danger-o label:after{background-color:#d9534f!important}.pretty.p-switch input:checked~.state.p-danger:before{border-color:#d9534f}.pretty.p-switch.p-fill input:checked~.state.p-danger:before{background-color:#d9534f!important}.pretty.p-switch.p-slim input:checked~.state.p-danger:before{border-color:#a02622;background-color:#a02622!important}.pretty.p-bigger .icon,.pretty.p-bigger .img,.pretty.p-bigger .svg,.pretty.p-bigger label:after,.pretty.p-bigger label:before{font-size:1.2em!important;top:calc((0% - (100% - 1em)) - 35%)!important}.pretty.p-bigger label{text-indent:1.7em}@media print{.pretty .state .icon,.pretty .state label:after,.pretty .state label:before,.pretty .state:before{color-adjust:exact;-webkit-print-color-adjust:exact;print-color-adjust:exact}} diff --git a/docs/assets/images/just-the-docs.png b/docs/assets/images/just-the-docs.png new file mode 100644 index 0000000..81c3306 Binary files /dev/null and b/docs/assets/images/just-the-docs.png differ diff --git a/docs/assets/images/search.svg b/docs/assets/images/search.svg new file mode 100644 index 0000000..421ca4d --- /dev/null +++ b/docs/assets/images/search.svg @@ -0,0 +1 @@ +Search diff --git a/docs/assets/js/arithmetic/encode.js b/docs/assets/js/arithmetic/encode.js new file mode 100644 index 0000000..cfd9be8 --- /dev/null +++ b/docs/assets/js/arithmetic/encode.js @@ -0,0 +1,531 @@ + +class Arithmetic { + + delay = 500; + autostep = false; + autostepElement; + + resize = false; + + TopTextSize = 48; + TopTextColor = "#132743" + + TopTextHighlight = "#407088" + + BarPadding = 80; + BarColor = "#407088" + BarBorderColor = "#70adb5" + + BarSelectedColor = "#ffcbcb" + + RangeText = 16; + RangeColor = "#70adb5" + + CharText = 24; + CharColor = "#132743" + + RectPadding = 24; + + wasmReady = false; + + constructor({ ns = "encode-", fs = false }) { + this.idNamespace = ns; + this.fullscreen = fs; + + var _this = this; + window.addEventListener("load", function () { _this.load(); }); + if (document.readyState === "complete") { this.load(); } + } + + load() { + var _this = this; + document.getElementById(this.idNamespace + "form").onsubmit = function () { + _this.process(); + return false; + }; + + this.canvas = new fabric.Canvas(this.idNamespace + "canvas", { + selection: false, + evented: false, + enableRetinaScaling: true, + allowTouchScrolling: true + }) + + this.setupPanning(); + + this.canvas.setDimensions({ + width: document.getElementById(this.idNamespace + "canvas-container-jtd").offsetWidth - 2, + height: document.getElementById(this.idNamespace + "canvas-container-jtd").offsetHeight - 2, + }); + + this.stepBtn = document.getElementById(this.idNamespace + "step"); + + this.stepBtn.addEventListener("click", function () { + _this.stepThrough(); + }); + + var slider = document.getElementById(this.idNamespace + 'speed-slider'); + + noUiSlider.create(slider, { + start: [150], + range: { + 'min': [0], + 'max': [2500] + }, + step: 50, + connect: true, + }); + + var sliderValueElement = document.getElementById(this.idNamespace + 'slider-range-value'); + + slider.noUiSlider.on('update', function (values, handle) { + _this.delay = values[handle]; + sliderValueElement.innerHTML = values[handle]; + }); + + this.autostepElement = document.getElementById(this.idNamespace + "autostep"); + this.autostepElement.addEventListener('change', function () { _this.checkAutostep(); }); + + this.resizeElement = document.getElementById(this.idNamespace + "resize"); + this.resizeElement.addEventListener('change', function () { _this.checkResize(); }); + this.checkResize(); + + + if (WebAssembly) { + // WebAssembly.instantiateStreaming is not currently available in Safari + if (WebAssembly && !WebAssembly.instantiateStreaming) { // polyfill + WebAssembly.instantiateStreaming = async (resp, importObject) => { + const source = await (await resp).arrayBuffer(); + return await WebAssembly.instantiate(source, importObject); + }; + } + + const go = new Go(); + WebAssembly.instantiateStreaming(fetch("/assets/wasm/arithmetic.wasm"), go.importObject).then((result) => { + go.run(result.instance); + _this.wasmReady = true; + }); + } else { + console.log("WebAssembly is not supported in this browser") + } + + this.process(); + } + + checkAutostep() { + if (this.autostepElement.checked) { + this.autostep = true; + if (!this.stepBtn.disabled) { + this.stepThrough(); + } + } else { + this.autostep = false; + } + } + + checkResize() { + if (this.resizeElement.checked) { + this.resize = true; + } else { + this.resize = false; + this.displayBase = 0; + this.displayModifier = 1; + } + } + + process() { + this.canvas.clear(); + + var input = document.getElementById(this.idNamespace + "input-text").value; + + this.topText = new fabric.Text(input, { + top: 5, + fill: this.TopTextColor, + fontSize: this.TopTextSize, + fontFamily: "Roboto Mono", + selectable: false + }) + + this.canvas.add(this.topText) + + this.topText.centerH(); + + this.step = 0; + this.input = input; + + var rect = new fabric.Rect({ + width: this.canvas.width - this.BarPadding, + height: 20, + left: this.BarPadding / 2, + top: 120, + visible: false, + selectable: false + }) + + this.canvas.add(rect) + this.lastRect = rect; + + this.modifier = 1; + this.base = 0; + + this.displayModifier = 1; + this.displayBase = 0; + + var freqs = this.freqTable(input) + + var last = 0; + freqs.forEach((value, key, map) => { + this.createRange(rect, key, last, last + value, 1); + this.canvas.renderAll(); + last += value; + }); + + this.freqs = freqs; + + this.stepBtn.disabled = false; + + var _this = this; + + this.checkAutostep(); + + // var output = arithmeticEncode(input); + + // document.getElementById(this.idNamespace + "output-text").innerHTML = output; + } + + async stepThrough() { + this.highlight(this.topText, this.step, this.TopTextHighlight); + + var char = this.input.charAt(this.step); + + await this.sleep(this.delay); + + var start = 0; + var end = 0; + for (const [key, value] of this.freqs.entries()) { + if (key === char) { + this.selectRange(this.lastRect, key, start, start + value, this.modifier, this.base) + end = start + value; + break; + } + start += value; + } + + this.step++; + var rect; + + this.base = start * this.modifier + this.base; + this.modifier *= (end - start); + if (!this.resize) { + this.displayBase = start * this.displayModifier + this.displayBase; + this.displayModifier *= (end - start); + } + + if (this.resize) { + rect = new fabric.Rect({ + width: this.canvas.width - this.BarPadding, + height: 20, + left: this.BarPadding / 2, + top: this.lastRect.top + this.lastRect.height + this.CharText + this.RectPadding, + visible: false, + selectable: false + }) + } else { + rect = new fabric.Rect({ + width: (this.canvas.width - this.BarPadding) * this.displayModifier, + height: 20, + left: (this.BarPadding / 2) + (this.canvas.width - this.BarPadding) * this.displayBase, + top: this.lastRect.top + this.lastRect.height + this.CharText + this.RectPadding, + visible: false, + selectable: false + }) + } + + this.canvas.add(rect) + + this.drawLine(start, 0, rect) + this.drawLine(end, 1, rect) + + this.lastRect = rect; + + var last = 0; + this.freqs.forEach((value, key, map) => { + this.createRange(this.lastRect, key, last, last + value, this.modifier, this.base); + this.canvas.renderAll(); + last += value; + }); + + if (this.step >= this.input.length) { + this.stepBtn.disabled = true; + var output = "" + if (WebAssembly) { + var _this = this; + function outputEncoded() { + var r = arithmeticEncode(_this.topText.text) + var bot = r[0] + var top = r[1] + var output = bot + " - " + top + document.getElementById(_this.idNamespace + "output-text").innerHTML = output; + } + var i = 0; + function checkWasmReady() { + i++; + console.log(i); + if (i > 600) { + output = "WebAssembly is not loading"; + document.getElementById(_this.idNamespace + "output-text").innerHTML = output; + return + } + if (_this.wasmReady) { + outputEncoded(); + } else { + setTimeout(checkWasmReady, 50); + } + } + checkWasmReady(); + } else { + output = "WebAssembly unsupported"; + document.getElementById(this.idNamespace + "output-text").innerHTML = output; + } + } + + if (this.autostep && !this.stepBtn.disabled) { + this.stepThrough(); + } + } + + drawLine(from, to, targetRect) { + var fromX = this.lastRect.left + (this.lastRect.width * from); + var fromY = this.lastRect.top + this.lastRect.height; + + var toX = targetRect.left + (targetRect.width * to); + var toY = targetRect.top; + + var coords = [fromX, fromY, toX, toY] + + this.canvas.add(new fabric.Line(coords, { + fill: this.BarSelectedColor, + stroke: this.BarSelectedColor, + strokeWidth: this.resize ? 2 : 2 * this.displayModifier, + selectable: false + })); + } + + createRange(rect, char, start, end, modifier, base) { + this.drawRangeWithColors({ rect: rect, char: char, start: start, end: end, modifier: modifier, base: base }) + } + + selectRange(rect, char, start, end, modifier, base) { + var _this = this; + this.drawRangeWithColors({ rect: rect, char: char, start: start, end: end, BarColor: _this.BarSelectedColor, modifier: modifier, base: base, select: true }) + } + + drawRangeWithColors({ rect, char, start, end, BarColor = false, BarBorderColor = false, CharText = false, CharColor = false, RangeText = false, RangeColor = false, modifier = 1, base = 0, select = false }) { + var rangeLeft = rect.left + (start * rect.width); + var rangeWidth = (end - start) * rect.width; + + var range = new fabric.Rect({ + width: rangeWidth, + height: rect.height, + left: rangeLeft, + top: rect.top, + fill: BarColor ? BarColor : this.BarColor, + stroke: BarBorderColor ? BarBorderColor : this.BarBorderColor, + strokeWidth: 1 * this.displayModifier, + selectable: false + }) + + this.canvas.add(range) + + if (select) { return } + + var charFontSize = (modifier == 1 || this.resize) ? this.CharText : this.CharText * this.displayModifier * 2 + var char = new fabric.Text(char, { + left: rangeLeft + (0.5 * rangeWidth), + top: range.top - (CharText ? CharText : charFontSize), + fontSize: CharText ? CharText : charFontSize, + fill: CharColor ? CharColor : this.CharColor, + fontFamily: "Roboto Mono", + selectable: false + }) + + this.canvas.add(char) + + var rangeFontSize = (modifier == 1 || this.resize) ? this.RangeText : this.RangeText * this.displayModifier * 2 + var leftRangeText = new fabric.Text(this.roundDisplay(base + (start * modifier)).toString(), { + left: rangeLeft, + top: range.top - (RangeText ? RangeText : rangeFontSize) - 1, + fontSize: RangeText ? RangeText : rangeFontSize, + fill: RangeColor ? RangeColor : this.RangeColor, + fontFamily: "Roboto Mono", + selectable: false + }) + + leftRangeText.left -= leftRangeText.width / 2 + + this.canvas.add(leftRangeText) + + if (end === 1) { + var rightRangeText = new fabric.Text(this.roundDisplay(base + (end * modifier)).toString(), { + left: rangeLeft + rangeWidth - (this.RangeText / 2), + top: range.top - (RangeText ? RangeText : rangeFontSize) + 1, + fontSize: RangeText ? RangeText : rangeFontSize, + fill: RangeColor ? RangeColor : this.RangeColor, + fontFamily: "Roboto Mono", + selectable: false + }) + + this.canvas.add(rightRangeText) + } + } + + roundDisplay(num) { + return +(Math.round(num + "e+3") + "e-3"); + } + + freqTable(str) { + var chars = new Map(); + for (var i = 0; i < str.length; i++) { + var char = str.charAt(i); + if (!chars.get(char)) { + chars.set(char, 1) + } else { + chars.set(char, chars.get(char) + 1) + } + } + + chars.forEach((value, key, map) => { + map.set(key, value / str.length) + }) + + return chars + } + + setupPanning() { + this.canvas.defaultCursor = "all-scroll"; + this.canvas.hoverCursor = "all-scroll"; + this.canvas.on('mouse:down', function (opt) { + var evt = opt.e; + this.isDragging = true; + this.selection = false; + this.lastPosX = evt.clientX; + this.lastPosY = evt.clientY; + }); + this.canvas.on('mouse:move', function (opt) { + if (this.isDragging) { + var e = opt.e; + var vpt = this.viewportTransform; + vpt[4] += e.clientX - this.lastPosX; + vpt[5] += e.clientY - this.lastPosY; + this.requestRenderAll(); + this.lastPosX = e.clientX; + this.lastPosY = e.clientY; + } + }); + this.canvas.on('mouse:up', function (opt) { + // on mouse up we want to recalculate new interaction + // for all objects, so we call setViewportTransform + this.setViewportTransform(this.viewportTransform); + this.isDragging = false; + this.selection = true; + }); + + var isChrome = !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime); + var zoomRatio = 0.980; + if (isChrome) { zoomRatio = 0.999; } + + var _this = this; + this.canvas.on('mouse:wheel', function (opt) { + var delta = opt.e.deltaY; + var zoom = _this.canvas.getZoom(); + zoom *= zoomRatio ** delta; + if (zoom > 20) zoom = 20; + if (zoom < 0.01) zoom = 0.01; + _this.canvas.zoomToPoint({ x: opt.e.offsetX, y: opt.e.offsetY }, zoom); + opt.e.preventDefault(); + opt.e.stopPropagation(); + // this.texts.forEach(function (textObj) { + // console.log(textObj); + // this.canvas.remove(textObj); + // this.canvas.add(textObj); + // }); + }) + } + + getCharacterOfText(text, characterIndex) { + var x = text.left; + var y = text.top; + + y = y + text.fontSize; + + var characterWidth = text.width / text.text.length; + x = x + characterWidth * characterIndex; + + return [x, y]; + } + + clearHightlights(textObj) { + if (textObj.highlights) { + for (var i = 0; i < textObj.highlights.length; i++) { + this.canvas.remove(textObj.highlights[i]) + } + } + textObj.highlights = []; + + if (textObj.chars) { + for (var i = 0; i < textObj.chars.length; i++) { + this.canvas.remove(textObj.chars[i]) + } + } + textObj.chars = []; + } + + highlightRange(textObj, start, end, chars, color) { + this.clearHightlights(textObj); + + this.highlightRangeNoClear(textObj, start, end, chars, color) + } + + highlightRangeNoClear(textObj, start, end, chars, color) { + for (var i = start; i < end; i++) { + var positions = this.getCharacterOfText(textObj, i); + var rect = new fabric.Rect({ + width: textObj.fontSize / 2, + height: 6, + fill: color, + left: positions[0], + top: positions[1], + }); + this.canvas.add(rect); + textObj.highlights.push(rect); + + if (chars.length > (i - start)) { + var char = new fabric.Text(chars[i - start], { + fontFamily: "Roboto Mono", + fontSize: textObj.fontSize / 2, + left: positions[0], + top: positions[1] + textObj.fontSize / 2, + }) + char.left += char.width / 2 - 3; + char.setCoords() + this.canvas.add(char) + textObj.chars.push(char) + this.canvas.renderAll(); + } + } + } + + highlightNoClear(textObj, index, color) { + var upper = index + 1; + return this.highlightRangeNoClear(textObj, index, upper, "", color); + } + + highlight(textObj, index, color) { + var upper = index + 1; + return this.highlightRange(textObj, index, upper, "", color); + } + + sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } +} \ No newline at end of file diff --git a/docs/assets/js/fabric.min.js b/docs/assets/js/fabric.min.js new file mode 100644 index 0000000..be3012f --- /dev/null +++ b/docs/assets/js/fabric.min.js @@ -0,0 +1 @@ +var fabric=fabric||{version:"3.6.6"};if("undefined"!=typeof exports?exports.fabric=fabric:"function"==typeof define&&define.amd&&define([],function(){return fabric}),"undefined"!=typeof document&&"undefined"!=typeof window)fabric.document=document instanceof("undefined"!=typeof HTMLDocument?HTMLDocument:Document)?document:document.implementation.createHTMLDocument(""),fabric.window=window;else{var jsdom=require("jsdom"),virtualWindow=new jsdom.JSDOM(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;fabric.document=virtualWindow.document,fabric.jsdomImplForWrapper=require("jsdom/lib/jsdom/living/generated/utils").implForWrapper,fabric.nodeCanvas=require("jsdom/lib/jsdom/utils").Canvas,fabric.window=virtualWindow,DOMParser=fabric.window.DOMParser}fabric.isTouchSupported="ontouchstart"in fabric.window||"ontouchstart"in fabric.document||fabric.window&&fabric.window.navigator&&fabric.window.navigator.maxTouchPoints>0,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",fabric.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/gi,fabric.reNonWord=/[ \n\.,;!\?\-]/,fabric.fontPaths={},fabric.iMatrix=[1,0,0,1,0,0],fabric.svgNS="http://www.w3.org/2000/svg",fabric.perfLimitSizeTotal=2097152,fabric.maxCacheSideLimit=4096,fabric.minCacheSideLimit=256,fabric.charWidthsCache={},fabric.textureSize=2048,fabric.disableStyleCopyPaste=!1,fabric.enableGLFiltering=!0,fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,fabric.browserShadowBlurConstant=1,fabric.arcToSegmentsCache={},fabric.boundsOfCurveCache={},fabric.cachesBoundsOfCurve=!0,fabric.forceGLPutImageData=!1,fabric.initFilterBackend=function(){return fabric.enableGLFiltering&&fabric.isWebglSupported&&fabric.isWebglSupported(fabric.textureSize)?(console.log("max texture size: "+fabric.maxTextureSize),new fabric.WebglFilterBackend({tileSize:fabric.textureSize})):fabric.Canvas2dFilterBackend?new fabric.Canvas2dFilterBackend:void 0};"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=fabric);!function(){function e(e,i){if(this.__eventListeners[e]){var t=this.__eventListeners[e];i?t[t.indexOf(i)]=!1:fabric.util.array.fill(t,!1)}}function i(e,i){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var t in e)this.on(t,e[t]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(i);return this}function t(i,t){if(!this.__eventListeners)return this;if(0===arguments.length)for(i in this.__eventListeners)e.call(this,i);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in i)e.call(this,r,i[r]);else e.call(this,i,t);return this}function r(e,i){if(!this.__eventListeners)return this;var t=this.__eventListeners[e];if(!t)return this;for(var r=0,n=t.length;n>r;r++)t[r]&&t[r].call(this,i||{});return this.__eventListeners[e]=t.filter(function(e){return e!==!1}),this}fabric.Observable={observe:i,stopObserving:t,fire:r,on:i,off:t,trigger:r}}();fabric.Collection={_objects:[],add:function(){if(this._objects.push.apply(this._objects,arguments),this._onObjectAdded)for(var e=0,t=arguments.length;t>e;e++)this._onObjectAdded(arguments[e]);return this.renderOnAddRemove&&this.requestRenderAll(),this},insertAt:function(e,t,i){var r=this._objects;return i?r[t]=e:r.splice(t,0,e),this._onObjectAdded&&this._onObjectAdded(e),this.renderOnAddRemove&&this.requestRenderAll(),this},remove:function(){for(var e,t=this._objects,i=!1,r=0,n=arguments.length;n>r;r++)e=t.indexOf(arguments[r]),-1!==e&&(i=!0,t.splice(e,1),this._onObjectRemoved&&this._onObjectRemoved(arguments[r]));return this.renderOnAddRemove&&i&&this.requestRenderAll(),this},forEachObject:function(e,t){for(var i=this.getObjects(),r=0,n=i.length;n>r;r++)e.call(t,i[r],r,i);return this},getObjects:function(e){return"undefined"==typeof e?this._objects.concat():this._objects.filter(function(t){return t.type===e})},item:function(e){return this._objects[e]},isEmpty:function(){return 0===this._objects.length},size:function(){return this._objects.length},contains:function(e){return this._objects.indexOf(e)>-1},complexity:function(){return this._objects.reduce(function(e,t){return e+=t.complexity?t.complexity():0},0)}};fabric.CommonMethods={_setOptions:function(e){for(var t in e)this.set(t,e[t])},_initGradient:function(e,t){!e||!e.colorStops||e instanceof fabric.Gradient||this.set(t,new fabric.Gradient(e))},_initPattern:function(e,t,i){!e||!e.source||e instanceof fabric.Pattern?i&&i():this.set(t,new fabric.Pattern(e,i))},_initClipping:function(e){if(e.clipTo&&"string"==typeof e.clipTo){var t=fabric.util.getFunctionBody(e.clipTo);"undefined"!=typeof t&&(this.clipTo=new Function("ctx",t))}},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return"object"==typeof e?this._setObject(e):"function"==typeof t&&"clipTo"!==e?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,t){this[e]=t},toggle:function(e){var t=this.get(e);return"boolean"==typeof t&&this.set(e,!t),this},get:function(e){return this[e]}};!function(e){var t=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.PI/180,a=Math.PI/2;fabric.util={cos:function(e){if(0===e)return 1;0>e&&(e=-e);var t=e/a;switch(t){case 1:case 3:return 0;case 2:return-1}return Math.cos(e)},sin:function(e){if(0===e)return 0;var t=e/a,i=1;switch(0>e&&(i=-1),t){case 1:return i;case 2:return 0;case 3:return-i}return Math.sin(e)},removeFromArray:function(e,t){var i=e.indexOf(t);return-1!==i&&e.splice(i,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*n},radiansToDegrees:function(e){return e/n},rotatePoint:function(e,t,i){e.subtractEquals(t);var r=fabric.util.rotateVector(e,i);return new fabric.Point(r.x,r.y).addEquals(t)},rotateVector:function(e,t){var i=fabric.util.sin(t),r=fabric.util.cos(t),n=e.x*r-e.y*i,a=e.x*i+e.y*r;return{x:n,y:a}},transformPoint:function(e,t,i){return i?new fabric.Point(t[0]*e.x+t[2]*e.y,t[1]*e.x+t[3]*e.y):new fabric.Point(t[0]*e.x+t[2]*e.y+t[4],t[1]*e.x+t[3]*e.y+t[5])},makeBoundingBoxFromPoints:function(e,t){if(t)for(var i=0;ii;++i)a=a[r[i]];return a},loadImage:function(e,t,i,r){if(!e)return void(t&&t.call(i,e));var n=fabric.util.createImage(),a=function(){t&&t.call(i,n),n=n.onload=n.onerror=null};n.onload=a,n.onerror=function(){fabric.log("Error loading "+n.src),t&&t.call(i,null,!0),n=n.onload=n.onerror=null},0!==e.indexOf("data")&&r&&(n.crossOrigin=r),"data:image/svg"===e.substring(0,14)&&(n.onload=null,fabric.util.loadImageInDom(n,a)),n.src=e},loadImageInDom:function(e,t){var i=fabric.document.createElement("div");i.style.width=i.style.height="1px",i.style.left=i.style.top="-100%",i.style.position="absolute",i.appendChild(e),fabric.document.querySelector("body").appendChild(i),e.onload=function(){t(),i.parentNode.removeChild(i),i=null}},enlivenObjects:function(e,t,i,r){function n(){++o===c&&t&&t(a.filter(function(e){return e}))}e=e||[];var a=[],o=0,c=e.length;return c?void e.forEach(function(e,t){if(!e||!e.type)return void n();var o=fabric.util.getKlass(e.type,i);o.fromObject(e,function(i,o){o||(a[t]=i),r&&r(e,i,o),n()})}):void(t&&t(a))},enlivenPatterns:function(e,t){function i(){++n===a&&t&&t(r)}e=e||[];var r=[],n=0,a=e.length;return a?void e.forEach(function(e,t){e&&e.source?new fabric.Pattern(e,function(e){r[t]=e,i()}):(r[t]=e,i())}):void(t&&t(r))},groupSVGElements:function(e,t,i){var r;return e&&1===e.length?e[0]:(t&&(t.width&&t.height?t.centerPoint={x:t.width/2,y:t.height/2}:(delete t.width,delete t.height)),r=new fabric.Group(e,t),"undefined"!=typeof i&&(r.sourcePath=i),r)},populateWithProperties:function(e,t,i){if(i&&"[object Array]"===Object.prototype.toString.call(i))for(var r=0,n=i.length;n>r;r++)i[r]in e&&(t[i[r]]=e[i[r]])},drawDashedLine:function(e,r,n,a,o,c){var s=a-r,f=o-n,u=t(s*s+f*f),l=i(f,s),d=c.length,h=0,b=!0;for(e.save(),e.translate(r,n),e.moveTo(0,0),e.rotate(l),r=0;u>r;)r+=c[h++%d],r>u&&(r=u),e[b?"lineTo":"moveTo"](r,0),b=!b;e.restore()},createCanvasElement:function(){return fabric.document.createElement("canvas")},copyCanvasElement:function(e){var t=fabric.util.createCanvasElement();return t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),t},toDataURL:function(e,t,i){return e.toDataURL("image/"+t,i)},createImage:function(){return fabric.document.createElement("img")},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t,i){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],i?0:e[0]*t[4]+e[2]*t[5]+e[4],i?0:e[1]*t[4]+e[3]*t[5]+e[5]]},qrDecompose:function(e){var a=i(e[1],e[0]),o=r(e[0],2)+r(e[1],2),c=t(o),s=(e[0]*e[3]-e[2]*e[1])/c,f=i(e[0]*e[2]+e[1]*e[3],o);return{angle:a/n,scaleX:c,scaleY:s,skewX:f/n,skewY:0,translateX:e[4],translateY:e[5]}},calcRotateMatrix:function(e){if(!e.angle)return fabric.iMatrix.concat();var t=fabric.util.degreesToRadians(e.angle),i=fabric.util.cos(t),r=fabric.util.sin(t);return[i,r,-r,i,0,0]},calcDimensionsMatrix:function(e){var t="undefined"==typeof e.scaleX?1:e.scaleX,i="undefined"==typeof e.scaleY?1:e.scaleY,r=[e.flipX?-t:t,0,0,e.flipY?-i:i,0,0],n=fabric.util.multiplyTransformMatrices,a=fabric.util.degreesToRadians;return e.skewX&&(r=n(r,[1,0,Math.tan(a(e.skewX)),1],!0)),e.skewY&&(r=n(r,[1,Math.tan(a(e.skewY)),0,1],!0)),r},composeMatrix:function(e){var t=[1,0,0,1,e.translateX||0,e.translateY||0],i=fabric.util.multiplyTransformMatrices;return e.angle&&(t=i(t,fabric.util.calcRotateMatrix(e))),(e.scaleX||e.scaleY||e.skewX||e.skewY||e.flipX||e.flipY)&&(t=i(t,fabric.util.calcDimensionsMatrix(e))),t},customTransformMatrix:function(e,t,i){return fabric.util.composeMatrix({scaleX:e,scaleY:t,skewX:i})},resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.skewX=0,e.skewY=0,e.flipX=!1,e.flipY=!1,e.rotate(0)},saveObjectTransform:function(e){return{scaleX:e.scaleX,scaleY:e.scaleY,skewX:e.skewX,skewY:e.skewY,angle:e.angle,left:e.left,flipX:e.flipX,flipY:e.flipY,top:e.top}},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(e,t,i,r){r>0&&(t>r?t-=r:t=0,i>r?i-=r:i=0);var n,a,o=!0,c=e.getImageData(t,i,2*r||1,2*r||1),s=c.data.length;for(n=3;s>n&&(a=c.data[n],o=0>=a,o!==!1);n+=4);return c=null,o},parsePreserveAspectRatioAttribute:function(e){var t,i="meet",r="Mid",n="Mid",a=e.split(" ");return a&&a.length&&(i=a.pop(),"meet"!==i&&"slice"!==i?(t=i,i="meet"):a.length&&(t=a.pop())),r="none"!==t?t.slice(1,4):"none",n="none"!==t?t.slice(5,8):"none",{meetOrSlice:i,alignX:r,alignY:n}},clearFabricFontCache:function(e){e=(e||"").toLowerCase(),e?fabric.charWidthsCache[e]&&delete fabric.charWidthsCache[e]:fabric.charWidthsCache={}},limitDimsByArea:function(e,t){var i=Math.sqrt(t*e),r=Math.floor(t/i);return{x:Math.floor(i),y:r}},capValue:function(e,t,i){return Math.max(e,Math.min(t,i))},findScaleToFit:function(e,t){return Math.min(t.width/e.width,t.height/e.height)},findScaleToCover:function(e,t){return Math.max(t.width/e.width,t.height/e.height)},matrixToSVG:function(e){return"matrix("+e.map(function(e){return fabric.util.toFixed(e,fabric.Object.NUM_FRACTION_DIGITS)}).join(" ")+")"}}}("undefined"!=typeof exports?exports:this);!function(){function e(e,t,r,n,i,a,c,o,s,f,u){var l=fabric.util.cos(e),h=fabric.util.sin(e),d=fabric.util.cos(t),b=fabric.util.sin(t),m=r*i*d-n*a*b+c,p=n*i*d+r*a*b+o,v=f+s*(-r*i*h-n*a*l),g=u+s*(-n*i*h+r*a*l),y=m+s*(r*i*b+n*a*d),w=p+s*(n*i*b-r*a*d);return["C",v,g,y,w,m,p]}function t(t,n,i,a,c,o,s){var f=Math.PI,u=s*f/180,l=fabric.util.sin(u),h=fabric.util.cos(u),d=0,b=0;i=Math.abs(i),a=Math.abs(a);var m=-h*t*.5-l*n*.5,p=-h*n*.5+l*t*.5,v=i*i,g=a*a,y=p*p,w=m*m,x=v*g-v*y-g*w,_=0;if(0>x){var M=Math.sqrt(1-x/(v*g));i*=M,a*=M}else _=(c===o?-1:1)*Math.sqrt(x/(v*y+g*w));var C=_*i*p/a,P=-_*a*m/i,T=h*C-l*P+.5*t,O=l*C+h*P+.5*n,k=r(1,0,(m-C)/i,(p-P)/a),j=r((m-C)/i,(p-P)/a,(-m-C)/i,(-p-P)/a);0===o&&j>0?j-=2*f:1===o&&0>j&&(j+=2*f);for(var S=Math.ceil(Math.abs(j/f*2)),L=[],D=j/S,E=8/3*Math.sin(D/4)*Math.sin(D/4)/Math.sin(D/2),F=k+D,I=0;S>I;I++)L[I]=e(k,F,h,l,i,a,T,O,E,d,b),d=L[I][5],b=L[I][6],k=F,F+=D;return L}function r(e,t,r,n){var i=Math.atan2(t,e),a=Math.atan2(n,r);return a>=i?a-i:2*Math.PI-(i-a)}function n(e,t,r,n,i,a,c,o){var s;if(fabric.cachesBoundsOfCurve&&(s=_.call(arguments),fabric.boundsOfCurveCache[s]))return fabric.boundsOfCurveCache[s];var f,u,l,h,d,b,m,p,v=Math.sqrt,g=Math.min,y=Math.max,w=Math.abs,x=[],M=[[],[]];u=6*e-12*r+6*i,f=-3*e+9*r-9*i+3*c,l=3*r-3*e;for(var C=0;2>C;++C)if(C>0&&(u=6*t-12*n+6*a,f=-3*t+9*n-9*a+3*o,l=3*n-3*t),w(f)<1e-12){if(w(u)<1e-12)continue;h=-l/u,h>0&&1>h&&x.push(h)}else m=u*u-4*l*f,0>m||(p=v(m),d=(-u+p)/(2*f),d>0&&1>d&&x.push(d),b=(-u-p)/(2*f),b>0&&1>b&&x.push(b));for(var P,T,O,k=x.length,j=k;k--;)h=x[k],O=1-h,P=O*O*O*e+3*O*O*h*r+3*O*h*h*i+h*h*h*c,M[0][k]=P,T=O*O*O*t+3*O*O*h*n+3*O*h*h*a+h*h*h*o,M[1][k]=T;M[0][j]=e,M[1][j]=t,M[0][j+1]=c,M[1][j+1]=o;var S=[{x:g.apply(null,M[0]),y:g.apply(null,M[1])},{x:y.apply(null,M[0]),y:y.apply(null,M[1])}];return fabric.cachesBoundsOfCurve&&(fabric.boundsOfCurveCache[s]=S),S}function i(e,r,n){for(var i=n[1],a=n[2],c=n[3],o=n[4],s=n[5],f=n[6],u=n[7],l=t(f-e,u-r,i,a,o,s,c),h=0,d=l.length;d>h;h++)l[h][1]+=e,l[h][2]+=r,l[h][3]+=e,l[h][4]+=r,l[h][5]+=e,l[h][6]+=r;return l}function a(e){var t,r,n,a,c,o,s=0,f=0,u=e.length,l=0,h=0,d=[];for(r=0;u>r;++r){switch(n=!1,t=e[r].slice(0),t[0]){case"l":t[0]="L",t[1]+=s,t[2]+=f;case"L":s=t[1],f=t[2];break;case"h":t[1]+=s;case"H":t[0]="L",t[2]=f,s=t[1];break;case"v":t[1]+=f;case"V":t[0]="L",f=t[1],t[1]=s,t[2]=f;break;case"m":t[0]="M",t[1]+=s,t[2]+=f;case"M":s=t[1],f=t[2],l=t[1],h=t[2];break;case"c":t[0]="C",t[1]+=s,t[2]+=f,t[3]+=s,t[4]+=f,t[5]+=s,t[6]+=f;case"C":c=t[3],o=t[4],s=t[5],f=t[6];break;case"s":t[0]="S",t[1]+=s,t[2]+=f,t[3]+=s,t[4]+=f;case"S":"C"===a?(c=2*s-c,o=2*f-o):(c=s,o=f),s=t[3],f=t[4],t[0]="C",t[5]=t[3],t[6]=t[4],t[3]=t[1],t[4]=t[2],t[1]=c,t[2]=o,c=t[3],o=t[4];break;case"q":t[0]="Q",t[1]+=s,t[2]+=f,t[3]+=s,t[4]+=f;case"Q":c=t[1],o=t[2],s=t[3],f=t[4];break;case"t":t[0]="T",t[1]+=s,t[2]+=f;case"T":"Q"===a?(c=2*s-c,o=2*f-o):(c=s,o=f),t[0]="Q",s=t[1],f=t[2],t[1]=c,t[2]=o,t[3]=s,t[4]=f;break;case"a":t[0]="A",t[6]+=s,t[7]+=f;case"A":n=!0,d=d.concat(i(s,f,t)),s=t[6],f=t[7];break;case"z":case"Z":s=l,f=h}n||d.push(t),a=t[0]}return d}function c(e,t,r,n){return Math.sqrt((r-e)*(r-e)+(n-t)*(n-t))}function o(e){return e*e*e}function s(e){return 3*e*e*(1-e)}function f(e){return 3*e*(1-e)*(1-e)}function u(e){return(1-e)*(1-e)*(1-e)}function l(e,t,r,n,i,a,c,l){return function(h){var d=o(h),b=s(h),m=f(h),p=u(h);return{x:c*d+i*b+r*m+e*p,y:l*d+a*b+n*m+t*p}}}function h(e){return e*e}function d(e){return 2*e*(1-e)}function b(e){return(1-e)*(1-e)}function m(e,t,r,n,i,a){return function(c){var o=h(c),s=d(c),f=b(c);return{x:i*o+r*s+e*f,y:a*o+n*s+t*f}}}function p(e,t,r){var n,i,a={x:t,y:r},o=0;for(i=.01;1>=i;i+=.01)n=e(i),o+=c(a.x,a.y,n.x,n.y),a=n;return o}function v(e){for(var t,r,n,i=0,a=e.length,o=0,s=0,f=0,u=0,h=[],d=0;a>d;d++){switch(t=e[d],n={x:o,y:s,command:t[0]},t[0]){case"M":n.length=0,f=o=t[1],u=s=t[2];break;case"L":n.length=c(o,s,t[1],t[2]),o=t[1],s=t[2];break;case"C":r=l(o,s,t[1],t[2],t[3],t[4],t[5],t[6]),n.length=p(r,o,s),o=t[5],s=t[6];break;case"Q":r=m(o,s,t[1],t[2],t[3],t[4]),n.length=p(r,o,s),o=t[3],s=t[4];break;case"Z":case"z":n.destX=f,n.destY=u,n.length=c(o,s,f,u),o=f,s=u}i+=n.length,h.push(n)}return h.push({length:i,x:o,y:s}),h}function g(e,t,r){r||(r=v(e));for(var n=r[r.length-1]*t,i=0;n-r[i]>0&&iu;u++){for(t=a[u],i=t.slice(1).trim(),o.length=0;n=s.exec(i);)o.push(n[0]);f=[t.charAt(0)];for(var h=0,d=o.length;d>h;h++)r=parseFloat(o[h]),isNaN(r)||f.push(r);var b=f[0],m=M[b.toLowerCase()],p=C[b]||b;if(f.length-1>m)for(var v=1,g=f.length;g>v;v+=m)c.push([b].concat(f.slice(v,v+m))),b=p;else c.push(f)}return c}function w(e,r,i,a,c,o,s,f,u){for(var l,h=0,d=0,b=[],m=t(f-e,u-r,i,a,o,s,c),p=0,v=m.length;v>p;p++)l=n(h,d,m[p][1],m[p][2],m[p][3],m[p][4],m[p][5],m[p][6]),b.push({x:l[0].x+e,y:l[0].y+r}),b.push({x:l[1].x+e,y:l[1].y+r}),h=m[p][5],d=m[p][6];return b}function x(e,t,r,n){n=n.slice(0).unshift("X");var a=i(t,r,n);a.forEach(function(t){e.bezierCurveTo.apply(e,t.slice(1))})}var _=Array.prototype.join,M={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},C={m:"l",M:"L"};fabric.util.parsePath=y,fabric.util.makePathSimpler=a,fabric.util.getPathSegmentsInfo=v,fabric.util.fromArcToBeizers=i,fabric.util.getBoundsOfCurve=n,fabric.util.getPointOnPath=g,fabric.util.getBoundsOfArc=w,fabric.util.drawArc=x}();!function(){function t(t,e){for(var r=a.call(arguments,2),n=[],i=0,c=t.length;c>i;i++)n[i]=r.length?t[i][e].apply(t[i],r):t[i][e].call(t[i]);return n}function e(t,e){return i(t,e,function(t,e){return t>=e})}function r(t,e){return i(t,e,function(t,e){return e>t})}function n(t,e){for(var r=t.length;r--;)t[r]=e;return t}function i(t,e,r){if(t&&0!==t.length){var n=t.length-1,i=e?t[n][e]:t[n];if(e)for(;n--;)r(t[n][e],i)&&(i=t[n][e]);else for(;n--;)r(t[n],i)&&(i=t[n]);return i}}var a=Array.prototype.slice;fabric.util.array={fill:n,invoke:t,min:r,max:e}}();!function(){function e(t,r,n){if(n)if(!fabric.isLikelyNode&&r instanceof Element)t=r;else if(r instanceof Array){t=[];for(var i=0,a=r.length;a>i;i++)t[i]=e({},r[i],n)}else if(r&&"object"==typeof r)for(var c in r)"canvas"===c?t[c]=e({},r[c]):r.hasOwnProperty(c)&&(t[c]=e({},r[c],n));else t=r;else for(var c in r)t[c]=r[c];return t}function t(t,r){return e({},t,r)}fabric.util.object={extend:e,clone:t},fabric.util.object.extend(fabric.util,fabric.Observable)}();!function(){function e(e){return e.replace(/-+(.)?/g,function(e,t){return t?t.toUpperCase():""})}function t(e,t){return e.charAt(0).toUpperCase()+(t?e.slice(1):e.slice(1).toLowerCase())}function r(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function n(e){var t,r=0,n=[];for(r=0,t;rr||r>57343)return e.charAt(t);if(r>=55296&&56319>=r){if(e.length<=t+1)throw"High surrogate without following low surrogate";var n=e.charCodeAt(t+1);if(56320>n||n>57343)throw"High surrogate without following low surrogate";return e.charAt(t)+e.charAt(t+1)}if(0===t)throw"Low surrogate without preceding high surrogate";var i=e.charCodeAt(t-1);if(55296>i||i>56319)throw"Low surrogate without preceding high surrogate";return!1}fabric.util.string={camelize:e,capitalize:t,escapeXml:r,graphemeSplit:n}}();!function(){function t(){}function e(t){for(var e=null,r=this;r.constructor.superclass;){var i=r.constructor.superclass.prototype[t];if(r[t]!==i){e=i;break}r=r.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,n.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}function r(){function r(){this.initialize.apply(this,arguments)}var a=null,c=n.call(arguments,0);"function"==typeof c[0]&&(a=c.shift()),r.superclass=a,r.subclasses=[],a&&(t.prototype=a.prototype,r.prototype=new t,a.subclasses.push(r));for(var s=0,u=c.length;u>s;s++)o(r,c[s],a);return r.prototype.initialize||(r.prototype.initialize=i),r.prototype.constructor=r,r.prototype.callSuper=e,r}var n=Array.prototype.slice,i=function(){},a=function(){for(var t in{toString:1})if("toString"===t)return!1;return!0}(),o=function(t,e,r){for(var n in e)t.prototype[n]=n in t.prototype&&"function"==typeof t.prototype[n]&&(e[n]+"").indexOf("callSuper")>-1?function(t){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=e[t].apply(this,arguments);return this.constructor.superclass=n,"initialize"!==t?i:void 0}}(n):e[n],a&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=r}();!function(){function t(t){var e=t.changedTouches;return e&&e[0]?e[0]:t}var e=!!fabric.document.createElement("div").attachEvent;fabric.util.addListener=function(t,i,r,n){t&&t.addEventListener(i,r,e?!1:n)},fabric.util.removeListener=function(t,i,r,n){t&&t.removeEventListener(i,r,e?!1:n)},fabric.util.getPointer=function(e){var i=e.target,r=fabric.util.getScrollLeftTop(i),n=t(e);return{x:n.clientX+r.left,y:n.clientY+r.top}}}();!function(){function t(t,e){var r=t.style;if(!r)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?a(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var n in e)if("opacity"===n)a(t,e[n]);else{var i="float"===n||"cssFloat"===n?"undefined"==typeof r.styleFloat?"cssFloat":"styleFloat":n;r[i]=e[n]}return t}var e=fabric.document.createElement("div"),r="string"==typeof e.style.opacity,n="string"==typeof e.style.filter,i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,a=function(t){return t};r?a=function(t,e){return t.style.opacity=e,t}:n&&(a=function(t,e){var r=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(r.zoom=1),i.test(r.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",r.filter=r.filter.replace(i,e)):r.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}();!function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var r=fabric.document.createElement(t);for(var n in e)"class"===n?r.className=e[n]:"for"===n?r.htmlFor=e[n]:r.setAttribute(n,e[n]);return r}function r(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)}function n(t,r,n){return"string"==typeof r&&(r=e(r,n)),t.parentNode&&t.parentNode.replaceChild(r,t),r.appendChild(t),r}function i(t){for(var e=0,r=0,n=fabric.document.documentElement,i=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=i.scrollLeft||n.scrollLeft||0,r=i.scrollTop||n.scrollTop||0):(e+=t.scrollLeft||0,r+=t.scrollTop||0),1!==t.nodeType||"fixed"!==t.style.position););return{left:e,top:r}}function a(t){var e,r,n=t&&t.ownerDocument,a={left:0,top:0},o={left:0,top:0},c={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return o;for(var s in c)o[c[s]]+=parseInt(h(t,s),10)||0;return e=n.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(a=t.getBoundingClientRect()),r=i(t),{left:a.left+r.left-(e.clientLeft||0)+o.left,top:a.top+r.top-(e.clientTop||0)+o.top}}function o(t){var e=fabric.jsdomImplForWrapper(t);return e._canvas||e._image}function c(t){if(fabric.isLikelyNode){var e=fabric.jsdomImplForWrapper(t);e&&(e._image=null,e._canvas=null,e._currentSrc=null,e._attributes=null,e._classList=null)}}var s,u=Array.prototype.slice,f=function(t){return u.call(t,0)};try{s=f(fabric.document.childNodes)instanceof Array}catch(l){}s||(f=function(t){for(var e=new Array(t.length),r=t.length;r--;)e[r]=t[r];return e});var h;h=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var r=fabric.document.defaultView.getComputedStyle(t,null);return r?r[e]:void 0}:function(t,e){var r=t.style[e];return!r&&t.currentStyle&&(r=t.currentStyle[e]),r},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),n?t.style[n]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),n?t.style[n]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var r=fabric.document.documentElement.style,n="userSelect"in r?"userSelect":"MozUserSelect"in r?"MozUserSelect":"WebkitUserSelect"in r?"WebkitUserSelect":"KhtmlUserSelect"in r?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var r=fabric.document.getElementsByTagName("head")[0],n=fabric.document.createElement("script"),i=!0;n.onload=n.onreadystatechange=function(t){if(i){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;i=!1,e(t||fabric.window.event),n=n.onload=n.onreadystatechange=null}},n.src=t,r.appendChild(n)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=f,fabric.util.makeElement=e,fabric.util.addClass=r,fabric.util.wrapElement=n,fabric.util.getScrollLeftTop=i,fabric.util.getElementOffset=a,fabric.util.getElementStyle=h,fabric.util.getNodeCanvas=o,fabric.util.cleanUpJsdomNode=c}();!function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function r(r,n){n||(n={});var i=n.method?n.method.toUpperCase():"GET",a=n.onComplete||function(){},o=new fabric.window.XMLHttpRequest,c=n.body||n.parameters;return o.onreadystatechange=function(){4===o.readyState&&(a(o),o.onreadystatechange=e)},"GET"===i&&(c=null,"string"==typeof n.parameters&&(r=t(r,n.parameters))),o.open(i,r,!0),("POST"===i||"PUT"===i)&&o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.send(c),o}fabric.util.request=r}();fabric.log=console.log,fabric.warn=console.warn;!function(){function t(){return!1}function e(t,e,r,n){return-r*Math.cos(t/n*(Math.PI/2))+r+e}function r(r){n(function(i){r||(r={});var a,o=i||+new Date,c=r.duration||500,s=o+c,u=r.onChange||t,f=r.abort||t,l=r.onComplete||t,d=r.easing||e,h="startValue"in r?r.startValue:0,p="endValue"in r?r.endValue:100,b=r.byValue||p-h;r.onStart&&r.onStart(),function m(t){a=t||+new Date;var e=a>s?c:a-o,r=e/c,i=d(e,h,b,c),g=Math.abs((i-h)/b);return f()?void l(p,1,1):a>s?(u(p,1,1),void l(p,1,1)):(u(i,g,r),void n(m))}(o)})}function n(){return a.apply(fabric.window,arguments)}function i(){return o.apply(fabric.window,arguments)}var a=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){return fabric.window.setTimeout(t,1e3/60)},o=fabric.window.cancelAnimationFrame||fabric.window.clearTimeout;fabric.util.animate=r,fabric.util.requestAnimFrame=n,fabric.util.cancelAnimFrame=i}();!function(){function t(t,e,r){var n="rgba("+parseInt(t[0]+r*(e[0]-t[0]),10)+","+parseInt(t[1]+r*(e[1]-t[1]),10)+","+parseInt(t[2]+r*(e[2]-t[2]),10);return n+=","+(t&&e?parseFloat(t[3]+r*(e[3]-t[3])):1),n+=")"}function e(e,r,n,i){var a=new fabric.Color(e).getSource(),o=new fabric.Color(r).getSource();i=i||{},fabric.util.animate(fabric.util.object.extend(i,{duration:n||500,startValue:a,endValue:o,byValue:o,easing:function(e,r,n,a){var o=i.colorEasing?i.colorEasing(e,a):1-Math.cos(e/a*(Math.PI/2));return t(r,n,o)}}))}fabric.util.animateColor=e}();!function(){function t(t,e,r,n){return tt?r/2*t*t*t+e:r/2*((t-=2)*t*t+2)+e}function i(t,e,r,n){return r*(t/=n)*t*t*t+e}function a(t,e,r,n){return-r*((t=t/n-1)*t*t*t-1)+e}function o(t,e,r,n){return t/=n/2,1>t?r/2*t*t*t*t+e:-r/2*((t-=2)*t*t*t-2)+e}function c(t,e,r,n){return r*(t/=n)*t*t*t*t+e}function u(t,e,r,n){return r*((t=t/n-1)*t*t*t*t+1)+e}function s(t,e,r,n){return t/=n/2,1>t?r/2*t*t*t*t*t+e:r/2*((t-=2)*t*t*t*t+2)+e}function f(t,e,r,n){return-r*Math.cos(t/n*(Math.PI/2))+r+e}function l(t,e,r,n){return r*Math.sin(t/n*(Math.PI/2))+e}function h(t,e,r,n){return-r/2*(Math.cos(Math.PI*t/n)-1)+e}function d(t,e,r,n){return 0===t?e:r*Math.pow(2,10*(t/n-1))+e}function p(t,e,r,n){return t===n?e+r:r*(-Math.pow(2,-10*t/n)+1)+e}function b(t,e,r,n){return 0===t?e:t===n?e+r:(t/=n/2,1>t?r/2*Math.pow(2,10*(t-1))+e:r/2*(-Math.pow(2,-10*--t)+2)+e)}function m(t,e,r,n){return-r*(Math.sqrt(1-(t/=n)*t)-1)+e}function g(t,e,r,n){return r*Math.sqrt(1-(t=t/n-1)*t)+e}function v(t,e,r,n){return t/=n/2,1>t?-r/2*(Math.sqrt(1-t*t)-1)+e:r/2*(Math.sqrt(1-(t-=2)*t)+1)+e}function y(r,n,i,a){var o=1.70158,c=0,u=i;if(0===r)return n;if(r/=a,1===r)return n+i;c||(c=.3*a);var s=t(u,i,c,o);return-e(s,r,a)+n}function w(e,r,n,i){var a=1.70158,o=0,c=n;if(0===e)return r;if(e/=i,1===e)return r+n;o||(o=.3*i);var u=t(c,n,o,a);return u.a*Math.pow(2,-10*e)*Math.sin(2*(e*i-u.s)*Math.PI/u.p)+u.c+r}function x(r,n,i,a){var o=1.70158,c=0,u=i;if(0===r)return n;if(r/=a/2,2===r)return n+i;c||(c=.3*a*1.5);var s=t(u,i,c,o);return 1>r?-.5*e(s,r,a)+n:s.a*Math.pow(2,-10*(r-=1))*Math.sin(2*(r*a-s.s)*Math.PI/s.p)*.5+s.c+n}function M(t,e,r,n,i){return void 0===i&&(i=1.70158),r*(t/=n)*t*((i+1)*t-i)+e}function C(t,e,r,n,i){return void 0===i&&(i=1.70158),r*((t=t/n-1)*t*((i+1)*t+i)+1)+e}function O(t,e,r,n,i){return void 0===i&&(i=1.70158),t/=n/2,1>t?r/2*t*t*(((i*=1.525)+1)*t-i)+e:r/2*((t-=2)*t*(((i*=1.525)+1)*t+i)+2)+e}function S(t,e,r,n){return r-_(n-t,0,r,n)+e}function _(t,e,r,n){return(t/=n)<1/2.75?7.5625*r*t*t+e:2/2.75>t?r*(7.5625*(t-=1.5/2.75)*t+.75)+e:2.5/2.75>t?r*(7.5625*(t-=2.25/2.75)*t+.9375)+e:r*(7.5625*(t-=2.625/2.75)*t+.984375)+e}function I(t,e,r,n){return n/2>t?.5*S(2*t,0,r,n)+e:.5*_(2*t-n,0,r,n)+.5*r+e}fabric.util.ease={easeInQuad:function(t,e,r,n){return r*(t/=n)*t+e},easeOutQuad:function(t,e,r,n){return-r*(t/=n)*(t-2)+e},easeInOutQuad:function(t,e,r,n){return t/=n/2,1>t?r/2*t*t+e:-r/2*(--t*(t-2)-1)+e},easeInCubic:function(t,e,r,n){return r*(t/=n)*t*t+e},easeOutCubic:r,easeInOutCubic:n,easeInQuart:i,easeOutQuart:a,easeInOutQuart:o,easeInQuint:c,easeOutQuint:u,easeInOutQuint:s,easeInSine:f,easeOutSine:l,easeInOutSine:h,easeInExpo:d,easeOutExpo:p,easeInOutExpo:b,easeInCirc:m,easeOutCirc:g,easeInOutCirc:v,easeInElastic:y,easeOutElastic:w,easeInOutElastic:x,easeInBack:M,easeOutBack:C,easeInOutBack:O,easeInBounce:S,easeOutBounce:_,easeInOutBounce:I}}();!function(t){"use strict";function e(t){return t in E?E[t]:t}function r(t,e,r,n){var i,a="[object Array]"===Object.prototype.toString.call(e);if("fill"!==t&&"stroke"!==t||"none"!==e)if("vector-effect"===t)e="non-scaling-stroke"===e;else if("strokeDashArray"===t)e="none"===e?null:e.replace(/,/g," ").split(/\s+/).map(parseFloat);else if("transformMatrix"===t)e=r&&r.transformMatrix?M(r.transformMatrix,b.parseTransformAttribute(e)):b.parseTransformAttribute(e);else if("visible"===t)e="none"!==e&&"hidden"!==e,r&&r.visible===!1&&(e=!1);else if("opacity"===t)e=parseFloat(e),r&&"undefined"!=typeof r.opacity&&(e*=r.opacity);else if("textAnchor"===t)e="start"===e?"left":"end"===e?"right":"center";else if("charSpacing"===t)i=x(e,n)/n*1e3;else if("paintFirst"===t){var o=e.indexOf("fill"),s=e.indexOf("stroke"),e="fill";o>-1&&s>-1&&o>s?e="stroke":-1===o&&s>-1&&(e="stroke")}else{if("href"===t||"xlink:href"===t)return e;i=a?e.map(x):x(e,n)}else e="";return!a&&isNaN(i)?e:i}function n(t){return new RegExp("^("+t.join("|")+")\\b","i")}function i(t){for(var e in k)if("undefined"!=typeof t[k[e]]&&""!==t[e]){if("undefined"==typeof t[e]){if(!b.Object.prototype[e])continue;t[e]=b.Object.prototype[e]}if(0!==t[e].indexOf("url(")){var r=new b.Color(t[e]);t[e]=r.setAlpha(w(r.getAlpha()*t[k[e]],2)).toRgba()}}return t}function a(t,e){var r,n,i,a,o=[];for(i=0,a=e.length;a>i;i++)r=e[i],n=t.getElementsByTagName(r),o=o.concat(Array.prototype.slice.call(n));return o}function o(t,e){var r,n;t.replace(/;\s*$/,"").split(";").forEach(function(t){var i=t.split(":");r=i[0].trim().toLowerCase(),n=i[1].trim(),e[r]=n})}function s(t,e){var r,n;for(var i in t)"undefined"!=typeof t[i]&&(r=i.toLowerCase(),n=t[i],e[r]=n)}function c(t,e){var r={};for(var n in b.cssRules[e])if(u(t,n.split(" ")))for(var i in b.cssRules[e][n])r[i]=b.cssRules[e][n][i];return r}function u(t,e){var r,n=!0;return r=f(t,e.pop()),r&&e.length&&(n=l(t,e)),r&&n&&0===e.length}function l(t,e){for(var r,n=!0;t.parentNode&&1===t.parentNode.nodeType&&e.length;)n&&(r=e.pop()),t=t.parentNode,n=f(t,r);return 0===e.length}function f(t,e){var r,n,i=t.nodeName,a=t.getAttribute("class"),o=t.getAttribute("id");if(r=new RegExp("^"+i,"i"),e=e.replace(r,""),o&&e.length&&(r=new RegExp("#"+o+"(?![a-zA-Z\\-]+)","i"),e=e.replace(r,"")),a&&e.length)for(a=a.split(" "),n=a.length;n--;)r=new RegExp("\\."+a[n]+"(?![a-zA-Z\\-]+)","i"),e=e.replace(r,"");return 0===e.length}function d(t,e){var r;if(t.getElementById&&(r=t.getElementById(e)),r)return r;var n,i,a,o=t.getElementsByTagName("*");for(i=0,a=o.length;a>i;i++)if(n=o[i],e===n.getAttribute("id"))return n}function p(t){for(var e=a(t,["use","svg:use"]),r=0;e.length&&ro;o++)i=s.item(o),w.setAttributeNS(y,i.nodeName,i.nodeValue);for(;m.firstChild;)w.appendChild(m.firstChild);m=w}for(o=0,s=u.attributes,c=s.length;c>o;o++)i=s.item(o),"x"!==i.nodeName&&"y"!==i.nodeName&&"xlink:href"!==i.nodeName&&"href"!==i.nodeName&&("transform"===i.nodeName?g=i.nodeValue+" "+g:m.setAttribute(i.nodeName,i.nodeValue));m.setAttribute("transform",g),m.setAttribute("instantiated_by_use","1"),m.removeAttribute("id"),n=u.parentNode,n.replaceChild(m,u),e.length===v&&r++}}function h(t){var e,r,n,i,a=t.getAttribute("viewBox"),o=1,s=1,c=0,u=0,l=t.getAttribute("width"),f=t.getAttribute("height"),d=t.getAttribute("x")||0,p=t.getAttribute("y")||0,h=t.getAttribute("preserveAspectRatio")||"",m=!a||!b.svgViewBoxElementsRegEx.test(t.nodeName)||!(a=a.match(P)),g=!l||!f||"100%"===l||"100%"===f,v=m&&g,y={},w="",M=0,A=0;if(y.width=0,y.height=0,y.toBeParsed=v,v)return y;if(m)return y.width=x(l),y.height=x(f),y;if(c=-parseFloat(a[1]),u=-parseFloat(a[2]),e=parseFloat(a[3]),r=parseFloat(a[4]),y.minX=c,y.minY=u,y.viewBoxWidth=e,y.viewBoxHeight=r,g?(y.width=e,y.height=r):(y.width=x(l),y.height=x(f),o=y.width/e,s=y.height/r),h=b.util.parsePreserveAspectRatioAttribute(h),"none"!==h.alignX&&("meet"===h.meetOrSlice&&(s=o=o>s?s:o),"slice"===h.meetOrSlice&&(s=o=o>s?o:s),M=y.width-e*o,A=y.height-r*o,"Mid"===h.alignX&&(M/=2),"Mid"===h.alignY&&(A/=2),"Min"===h.alignX&&(M=0),"Min"===h.alignY&&(A=0)),1===o&&1===s&&0===c&&0===u&&0===d&&0===p)return y;if((d||p)&&(w=" translate("+x(d)+" "+x(p)+") "),n=w+" matrix("+o+" 0 0 "+s+" "+(c*o+M)+" "+(u*s+A)+") ",y.viewboxTransform=b.parseTransformAttribute(n),"svg"===t.nodeName){for(i=t.ownerDocument.createElementNS(b.svgNS,"g");t.firstChild;)i.appendChild(t.firstChild);t.appendChild(i)}else i=t,n=i.getAttribute("transform")+n;return i.setAttribute("transform",n),y}function m(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}function g(t,e){var r=["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"],n="xlink:href",i=e.getAttribute(n).substr(1),a=d(t,i);if(a&&a.getAttribute(n)&&g(t,a),r.forEach(function(t){a&&!e.hasAttribute(t)&&a.hasAttribute(t)&&e.setAttribute(t,a.getAttribute(t))}),!e.children.length)for(var o=a.cloneNode(!0);o.firstChild;)e.appendChild(o.firstChild);e.removeAttribute(n)}var b=t.fabric||(t.fabric={}),v=b.util.object.extend,y=b.util.object.clone,w=b.util.toFixed,x=b.util.parseUnit,M=b.util.multiplyTransformMatrices,A=["path","circle","polygon","polyline","ellipse","rect","line","image","text"],S=["symbol","image","marker","pattern","view","svg"],C=["pattern","defs","symbol","metadata","clipPath","mask","desc"],O=["symbol","g","a","svg","clipPath","defs"],E={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","letter-spacing":"charSpacing","paint-order":"paintFirst","stroke-dasharray":"strokeDashArray","stroke-dashoffset":"strokeDashOffset","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"textAnchor",opacity:"opacity","clip-path":"clipPath","clip-rule":"clipRule","vector-effect":"strokeUniform"},k={stroke:"strokeOpacity",fill:"fillOpacity"},T="font-size",N="clip-path";b.svgValidTagNamesRegEx=n(A),b.svgViewBoxElementsRegEx=n(S),b.svgInvalidAncestorsRegEx=n(C),b.svgValidParentsRegEx=n(O),b.cssRules={},b.gradientDefs={},b.clipPaths={},b.parseTransformAttribute=function(){function t(t,e){var r=b.util.cos(e[0]),n=b.util.sin(e[0]),i=0,a=0;3===e.length&&(i=e[1],a=e[2]),t[0]=r,t[1]=n,t[2]=-n,t[3]=r,t[4]=i-(r*i-n*a),t[5]=a-(n*i+r*a)}function e(t,e){var r=e[0],n=2===e.length?e[1]:e[0];t[0]=r,t[3]=n}function r(t,e,r){t[r]=Math.tan(b.util.degreesToRadians(e[0]))}function n(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var i=b.iMatrix,a=b.reNum,o="(?:\\s+,?\\s*|,\\s*)",s="(?:(skewX)\\s*\\(\\s*("+a+")\\s*\\))",c="(?:(skewY)\\s*\\(\\s*("+a+")\\s*\\))",u="(?:(rotate)\\s*\\(\\s*("+a+")(?:"+o+"("+a+")"+o+"("+a+"))?\\s*\\))",l="(?:(scale)\\s*\\(\\s*("+a+")(?:"+o+"("+a+"))?\\s*\\))",f="(?:(translate)\\s*\\(\\s*("+a+")(?:"+o+"("+a+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+a+")"+o+"("+a+")"+o+"("+a+")"+o+"("+a+")"+o+"("+a+")"+o+"("+a+")\\s*\\))",p="(?:"+d+"|"+f+"|"+l+"|"+u+"|"+s+"|"+c+")",h="(?:"+p+"(?:"+o+"*"+p+")*)",m="^\\s*(?:"+h+"?)\\s*$",g=new RegExp(m),v=new RegExp(p,"g");return function(a){var o=i.concat(),s=[];if(!a||a&&!g.test(a))return o;a.replace(v,function(a){var c=new RegExp(p).exec(a).filter(function(t){return!!t}),u=c[1],l=c.slice(2).map(parseFloat);switch(u){case"translate":n(o,l);break;case"rotate":l[0]=b.util.degreesToRadians(l[0]),t(o,l);break;case"scale":e(o,l);break;case"skewX":r(o,l,2);break;case"skewY":r(o,l,1);break;case"matrix":o=l}s.push(o.concat()),o=i.concat()});for(var c=s[0];s.length>1;)s.shift(),c=b.util.multiplyTransformMatrices(c,s[0]);return c}}();var P=new RegExp("^\\s*("+b.reNum+"+)\\s*,?\\s*("+b.reNum+"+)\\s*,?\\s*("+b.reNum+"+)\\s*,?\\s*("+b.reNum+"+)\\s*$");b.parseSVGDocument=function(t,e,r,n){if(t){p(t);var i,a,o=b.Object.__uid++,s=h(t),c=b.util.toArray(t.getElementsByTagName("*"));if(s.crossOrigin=n&&n.crossOrigin,s.svgUid=o,0===c.length&&b.isLikelyNode){c=t.selectNodes('//*[name(.)!="svg"]');var u=[];for(i=0,a=c.length;a>i;i++)u[i]=c[i];c=u}var l=c.filter(function(t){return h(t),b.svgValidTagNamesRegEx.test(t.nodeName.replace("svg:",""))&&!m(t,b.svgInvalidAncestorsRegEx)});if(!l||l&&!l.length)return void(e&&e([],{}));var f={};c.filter(function(t){return"clipPath"===t.nodeName.replace("svg:","")}).forEach(function(t){var e=t.getAttribute("id");f[e]=b.util.toArray(t.getElementsByTagName("*")).filter(function(t){return b.svgValidTagNamesRegEx.test(t.nodeName.replace("svg:",""))})}),b.gradientDefs[o]=b.getGradientDefs(t),b.cssRules[o]=b.getCSSRules(t),b.clipPaths[o]=f,b.parseElements(l,function(t,r){e&&(e(t,s,r,c),delete b.gradientDefs[o],delete b.cssRules[o],delete b.clipPaths[o])},y(s),r,n)}};var _=new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+b.reNum+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+b.reNum+"))?\\s+(.*)");v(b,{parseFontDeclaration:function(t,e){var r=t.match(_);if(r){var n=r[1],i=r[3],a=r[4],o=r[5],s=r[6];n&&(e.fontStyle=n),i&&(e.fontWeight=isNaN(parseFloat(i))?i:parseFloat(i)),a&&(e.fontSize=x(a)),s&&(e.fontFamily=s),o&&(e.lineHeight="normal"===o?1:o)}},getGradientDefs:function(t){var e,r=["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"],n=a(t,r),i=0,o={};for(i=n.length;i--;)e=n[i],e.getAttribute("xlink:href")&&g(t,e),o[e.getAttribute("id")]=e;return o},parseAttributes:function(t,n,a){if(t){var o,s,u,l={};"undefined"==typeof a&&(a=t.getAttribute("svgUid")),t.parentNode&&b.svgValidParentsRegEx.test(t.parentNode.nodeName)&&(l=b.parseAttributes(t.parentNode,n,a));var f=n.reduce(function(e,r){return o=t.getAttribute(r),o&&(e[r]=o),e},{}),d=v(c(t,a),b.parseStyleAttribute(t));f=v(f,d),d[N]&&t.setAttribute(N,d[N]),s=u=l.fontSize||b.Text.DEFAULT_SVG_FONT_SIZE,f[T]&&(f[T]=s=x(f[T],u));var p,h,m={};for(var g in f)p=e(g),h=r(p,f[g],l,s),m[p]=h;m&&m.font&&b.parseFontDeclaration(m.font,m);var y=v(l,m);return b.svgValidParentsRegEx.test(t.nodeName)?y:i(y)}},parseElements:function(t,e,r,n,i){new b.ElementsParser(t,e,r,n,i).parse()},parseStyleAttribute:function(t){var e={},r=t.getAttribute("style");return r?("string"==typeof r?o(r,e):s(r,e),e):e},parsePointsAttribute:function(t){if(!t)return null;t=t.replace(/,/g," ").trim(),t=t.split(/\s+/);var e,r,n=[];for(e=0,r=t.length;r>e;e+=2)n.push({x:parseFloat(t[e]),y:parseFloat(t[e+1])});return n},getCSSRules:function(t){var e,r,n,i=t.getElementsByTagName("style"),a={};for(e=0,r=i.length;r>e;e++){var o=i[e].textContent||"";o=o.replace(/\/\*[\s\S]*?\*\//g,""),""!==o.trim()&&(n=o.match(/[^{]*\{[\s\S]*?\}/g),n=n.map(function(t){return t.trim()}),n.forEach(function(t){var n=t.match(/([\s\S]*?)\s*\{([^}]*)\}/),i={},o=n[2].trim(),s=o.replace(/;$/,"").split(/\s*;\s*/);for(e=0,r=s.length;r>e;e++){var c=s[e].split(/\s*:\s*/),u=c[0],l=c[1];i[u]=l}t=n[1],t.split(",").forEach(function(t){t=t.replace(/^svg/i,"").trim(),""!==t&&(a[t]?b.util.object.extend(a[t],i):a[t]=b.util.object.clone(i))})}))}return a},loadSVGFromURL:function(t,e,r,n){function i(t){var i=t.responseXML;return i&&!i.documentElement&&b.window.ActiveXObject&&t.responseText&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(t.responseText.replace(//i,""))),i&&i.documentElement?void b.parseSVGDocument(i.documentElement,function(t,r,n,i){e&&e(t,r,n,i)},r,n):(e&&e(null),!1)}t=t.replace(/^\n\s*/,"").trim(),new b.util.request(t,{method:"get",onComplete:i})},loadSVGFromString:function(t,e,r,n){t=t.trim();var i;if("undefined"!=typeof b.window.DOMParser){var a=new b.window.DOMParser;a&&a.parseFromString&&(i=a.parseFromString(t,"text/xml"))}else b.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(t.replace(//i,"")));b.parseSVGDocument(i.documentElement,function(t,r,n,i){e(t,r,n,i)},r,n)}})}("undefined"!=typeof exports?exports:this);fabric.ElementsParser=function(t,e,r,n,i,a){this.elements=t,this.callback=e,this.options=r,this.reviver=n,this.svgUid=r&&r.svgUid||0,this.parsingOptions=i,this.regexUrl=/^url\(['"]?#([^'"]+)['"]?\)/g,this.doc=a},function(t){t.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},t.createObjects=function(){var t=this;this.elements.forEach(function(e,r){e.setAttribute("svgUid",t.svgUid),t.createObject(e,r)})},t.findTag=function(t){return fabric[fabric.util.string.capitalize(t.tagName.replace("svg:",""))]},t.createObject=function(t,e){var r=this.findTag(t);if(r&&r.fromElement)try{r.fromElement(t,this.createCallback(e,t),this.options)}catch(n){fabric.log(n)}else this.checkIfDone()},t.createCallback=function(t,e){var r=this;return function(n){var i;r.resolveGradient(n,e,"fill"),r.resolveGradient(n,e,"stroke"),n instanceof fabric.Image&&n._originalElement&&(i=n.parsePreserveAspectRatioAttribute(e)),n._removeTransformMatrix(i),r.resolveClipPath(n,e),r.reviver&&r.reviver(e,n),r.instances[t]=n,r.checkIfDone()}},t.extractPropertyDefinition=function(t,e,r){var n=t[e],i=this.regexUrl;if(i.test(n)){i.lastIndex=0;var a=i.exec(n)[1];return i.lastIndex=0,fabric[r][this.svgUid][a]}},t.resolveGradient=function(t,e,r){var n=this.extractPropertyDefinition(t,r,"gradientDefs");if(n){var i=e.getAttribute(r+"-opacity"),a=fabric.Gradient.fromElement(n,t,i,this.options);t.set(r,a)}},t.createClipPathCallback=function(t,e){return function(t){t._removeTransformMatrix(),t.fillRule=t.clipRule,e.push(t)}},t.resolveClipPath=function(t,e){var r,n,i,a,o,s,c=this.extractPropertyDefinition(t,"clipPath","clipPaths");if(c){a=[],i=fabric.util.invertTransform(t.calcTransformMatrix());for(var u=c[0].parentNode,l=e;l.parentNode&&l.getAttribute("clip-path")!==t.clipPath;)l=l.parentNode;l.parentNode.appendChild(u);for(var f=0;ft.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,r){return"undefined"==typeof r&&(r=.5),r=Math.max(Math.min(1,r),0),new e(this.x+(t.x-this.x)*r,this.y+(t.y-this.y)*r)},distanceFrom:function(t){var e=this.x-t.x,r=this.y-t.y;return Math.sqrt(e*e+r*r)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,r=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=r},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";function e(t){this.status=t,this.points=[]}var n=t.fabric||(t.fabric={});return n.Intersection?void n.warn("fabric.Intersection is already defined"):(n.Intersection=e,n.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},n.Intersection.intersectLineLine=function(t,r,i,a){var o,s=(a.x-i.x)*(t.y-i.y)-(a.y-i.y)*(t.x-i.x),c=(r.x-t.x)*(t.y-i.y)-(r.y-t.y)*(t.x-i.x),u=(a.y-i.y)*(r.x-t.x)-(a.x-i.x)*(r.y-t.y);if(0!==u){var l=s/u,f=c/u;l>=0&&1>=l&&f>=0&&1>=f?(o=new e("Intersection"),o.appendPoint(new n.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===s||0===c?"Coincident":"Parallel");return o},n.Intersection.intersectLinePolygon=function(t,n,r){var i,a,o,s,c=new e,u=r.length;for(s=0;u>s;s++)i=r[s],a=r[(s+1)%u],o=e.intersectLineLine(t,n,i,a),c.appendPoints(o.points);return c.points.length>0&&(c.status="Intersection"),c},n.Intersection.intersectPolygonPolygon=function(t,n){var r,i=new e,a=t.length;for(r=0;a>r;r++){var o=t[r],s=t[(r+1)%a],c=e.intersectLinePolygon(o,s,n);i.appendPoints(c.points)}return i.points.length>0&&(i.status="Intersection"),i},void(n.Intersection.intersectPolygonRectangle=function(t,r,i){var a=r.min(i),o=r.max(i),s=new n.Point(o.x,a.y),c=new n.Point(a.x,o.y),u=e.intersectLinePolygon(a,s,t),l=e.intersectLinePolygon(s,o,t),f=e.intersectLinePolygon(o,c,t),h=e.intersectLinePolygon(c,a,t),p=new e;return p.appendPoints(u.points),p.appendPoints(l.points),p.appendPoints(f.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function r(t,e,r){return 0>r&&(r+=1),r>1&&(r-=1),1/6>r?t+6*(e-t)*r:.5>r?e:2/3>r?t+(e-t)*(2/3-r)*6:t}var n=t.fabric||(t.fabric={});return n.Color?void n.warn("fabric.Color is already defined."):(n.Color=e,n.Color.prototype={_tryParsingColor:function(t){var r;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(r=[255,255,255,0]),r||(r=e.sourceFromHex(t)),r||(r=e.sourceFromRgb(t)),r||(r=e.sourceFromHsl(t)),r||(r=[0,0,0,1]),r&&this.setSource(r)},_rgbToHsl:function(t,e,r){t/=255,e/=255,r/=255;var i,a,o,s=n.util.array.max([t,e,r]),c=n.util.array.min([t,e,r]);if(o=(s+c)/2,s===c)i=a=0;else{var u=s-c;switch(a=o>.5?u/(2-s-c):u/(s+c),s){case t:i=(e-r)/u+(r>e?6:0);break;case e:i=(r-t)/u+2;break;case r:i=(t-e)/u+4}i/=6}return[Math.round(360*i),Math.round(100*a),Math.round(100*o)]},getSource:function(){return this._source},setSource:function(t){this._source=t},toRgb:function(){var t=this.getSource();return"rgb("+t[0]+","+t[1]+","+t[2]+")"},toRgba:function(){var t=this.getSource();return"rgba("+t[0]+","+t[1]+","+t[2]+","+t[3]+")"},toHsl:function(){var t=this.getSource(),e=this._rgbToHsl(t[0],t[1],t[2]);return"hsl("+e[0]+","+e[1]+"%,"+e[2]+"%)"},toHsla:function(){var t=this.getSource(),e=this._rgbToHsl(t[0],t[1],t[2]);return"hsla("+e[0]+","+e[1]+"%,"+e[2]+"%,"+t[3]+")"},toHex:function(){var t,e,r,n=this.getSource();return t=n[0].toString(16),t=1===t.length?"0"+t:t,e=n[1].toString(16),e=1===e.length?"0"+e:e,r=n[2].toString(16),r=1===r.length?"0"+r:r,t.toUpperCase()+e.toUpperCase()+r.toUpperCase()},toHexa:function(){var t,e=this.getSource();return t=Math.round(255*e[3]),t=t.toString(16),t=1===t.length?"0"+t:t,this.toHex()+t.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(t){var e=this.getSource();return e[3]=t,this.setSource(e),this},toGrayscale:function(){var t=this.getSource(),e=parseInt((.3*t[0]+.59*t[1]+.11*t[2]).toFixed(0),10),r=t[3];return this.setSource([e,e,e,r]),this},toBlackWhite:function(t){var e=this.getSource(),r=(.3*e[0]+.59*e[1]+.11*e[2]).toFixed(0),n=e[3];return t=t||127,r=Number(r)r;r++)n.push(Math.round(o[r]*(1-a)+s[r]*a));return n[3]=i,this.setSource(n),this}},n.Color.reRGBa=/^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*((?:\d*\.?\d+)?)\s*)?\)$/i,n.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/i,n.Color.reHex=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,n.Color.colorNameMap={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",darkgreen:"#006400",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",lightgreen:"#90EE90",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"},n.Color.fromRgb=function(t){return e.fromSource(e.sourceFromRgb(t))},n.Color.sourceFromRgb=function(t){var r=t.match(e.reRGBa);if(r){var n=parseInt(r[1],10)/(/%$/.test(r[1])?100:1)*(/%$/.test(r[1])?255:1),i=parseInt(r[2],10)/(/%$/.test(r[2])?100:1)*(/%$/.test(r[2])?255:1),a=parseInt(r[3],10)/(/%$/.test(r[3])?100:1)*(/%$/.test(r[3])?255:1);return[parseInt(n,10),parseInt(i,10),parseInt(a,10),r[4]?parseFloat(r[4]):1]}},n.Color.fromRgba=e.fromRgb,n.Color.fromHsl=function(t){return e.fromSource(e.sourceFromHsl(t))},n.Color.sourceFromHsl=function(t){var n=t.match(e.reHSLa);if(n){var i,a,o,s=(parseFloat(n[1])%360+360)%360/360,c=parseFloat(n[2])/(/%$/.test(n[2])?100:1),u=parseFloat(n[3])/(/%$/.test(n[3])?100:1);if(0===c)i=a=o=u;else{var l=.5>=u?u*(c+1):u+c-u*c,f=2*u-l;i=r(f,l,s+1/3),a=r(f,l,s),o=r(f,l,s-1/3)}return[Math.round(255*i),Math.round(255*a),Math.round(255*o),n[4]?parseFloat(n[4]):1]}},n.Color.fromHsla=e.fromHsl,n.Color.fromHex=function(t){return e.fromSource(e.sourceFromHex(t))},n.Color.sourceFromHex=function(t){if(t.match(e.reHex)){var r=t.slice(t.indexOf("#")+1),n=3===r.length||4===r.length,i=8===r.length||4===r.length,a=n?r.charAt(0)+r.charAt(0):r.substring(0,2),o=n?r.charAt(1)+r.charAt(1):r.substring(2,4),s=n?r.charAt(2)+r.charAt(2):r.substring(4,6),c=i?n?r.charAt(3)+r.charAt(3):r.substring(6,8):"FF";return[parseInt(a,16),parseInt(o,16),parseInt(s,16),parseFloat((parseInt(c,16)/255).toFixed(2))]}},void(n.Color.fromSource=function(t){var r=new e;return r.setSource(t),r}))}("undefined"!=typeof exports?exports:this);!function(){function t(t,e){var i,r,n,s,a=t.getAttribute("style"),o=t.getAttribute("offset")||0;if(o=parseFloat(o)/(/%$/.test(o)?100:1),o=0>o?0:o>1?1:o,a){var c=a.split(/\s*;\s*/);for(""===c[c.length-1]&&c.pop(),s=c.length;s--;){var h=c[s].split(/\s*:\s*/),l=h[0].trim(),u=h[1].trim();"stop-color"===l?i=u:"stop-opacity"===l&&(n=u)}}return i||(i=t.getAttribute("stop-color")||"rgb(0,0,0)"),n||(n=t.getAttribute("stop-opacity")),i=new fabric.Color(i),r=i.getAlpha(),n=isNaN(parseFloat(n))?1:parseFloat(n),n*=r*e,{offset:o,color:i.toRgb(),opacity:n}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i,r){var n,s;Object.keys(e).forEach(function(t){n=e[t],"Infinity"===n?s=1:"-Infinity"===n?s=0:(s=parseFloat(e[t],10),"string"==typeof n&&/^(\d+\.\d+)%|(\d+)%$/.test(n)&&(s*=.01,"pixels"===r&&(("x1"===t||"x2"===t||"r2"===t)&&(s*=i.viewBoxWidth||i.width),("y1"===t||"y2"===t)&&(s*=i.viewBoxHeight||i.height)))),e[t]=s})}var n=fabric.util.object.clone;fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(t){t||(t={}),t.coords||(t.coords={});var e,i=this;Object.keys(t).forEach(function(e){i[e]=t[e]}),this.id?this.id+="_"+fabric.Object.__uid++:this.id=fabric.Object.__uid++,e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice()},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t,e){var i,r,s,a,o=n(this.coords,!0),e=e||{},c=n(this.colorStops,!0),h=o.r1>o.r2,l=this.gradientTransform?this.gradientTransform.concat():fabric.iMatrix.concat(),u=-this.offsetX,f=-this.offsetY,d=!!e.additionalTransform,p="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox";if(c.sort(function(t,e){return t.offset-e.offset}),"objectBoundingBox"===p?(u/=t.width,f/=t.height):(u+=t.width/2,f+=t.height/2),"path"===t.type&&(u-=t.pathOffset.x,f-=t.pathOffset.y),l[4]-=u,l[5]-=f,a='id="SVGID_'+this.id+'" gradientUnits="'+p+'"',a+=' gradientTransform="'+(d?e.additionalTransform+" ":"")+fabric.util.matrixToSVG(l)+'" ',"linear"===this.type?s=["\n']:"radial"===this.type&&(s=["\n']),"radial"===this.type){if(h)for(c=c.concat(),c.reverse(),i=0,r=c.length;r>i;i++)c[i].offset=1-c[i].offset;var g=Math.min(o.r1,o.r2);if(g>0){var b=Math.max(o.r1,o.r2),v=g/b;for(i=0,r=c.length;r>i;i++)c[i].offset+=v*(1-c[i].offset)}}for(i=0,r=c.length;r>i;i++){var m=c[i];s.push("\n')}return s.push("linear"===this.type?"\n":"\n"),s.join("")},toLive:function(t,e){var i,r,n,s=fabric.util.object.clone(this.coords),a=s.x1,o=s.y1,c=s.x2,h=s.y2,l=this.colorStops;if(this.type){for(e instanceof fabric.Text&&"percentage"===this.gradientUnits&&(a*=e.width,o*=e.height,c*=e.width,h*=e.height),"linear"===this.type?i=t.createLinearGradient(a,o,c,h):"radial"===this.type&&(i=t.createRadialGradient(a,o,s.r1,c,h,s.r2)),r=0,n=l.length;n>r;r++){var u=l[r].color,f=l[r].opacity,d=l[r].offset;"undefined"!=typeof f&&(u=new fabric.Color(u).setAlpha(f).toRgba()),i.addColorStop(d,u)}return i}}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(n,s,a,o){var c=parseFloat(a)/(/%$/.test(a)?100:1);c=0>c?0:c>1?1:c,isNaN(c)&&(c=1);var h,l,u,f,d=n.getElementsByTagName("stop"),p="userSpaceOnUse"===n.getAttribute("gradientUnits")?"pixels":"percentage",g=n.getAttribute("gradientTransform")||"",b=[],v=0,m=0;for("linearGradient"===n.nodeName||"LINEARGRADIENT"===n.nodeName?(h="linear",l=e(n)):(h="radial",l=i(n)),u=d.length;u--;)b.push(t(d[u],c));f=fabric.parseTransformAttribute(g),r(s,l,o,p),"pixels"===p&&(v=-s.left,m=-s.top);var y=new fabric.Gradient({id:n.getAttribute("id"),type:h,coords:l,colorStops:b,gradientUnits:p,gradientTransform:f,offsetX:v,offsetY:m});return y},forObject:function(t,e){return e||(e={}),r(t,e.coords,e.gradientUnits,{viewBoxWidth:100,viewBoxHeight:100}),new fabric.Gradient(e)}})}();!function(){"use strict";var t=fabric.util.toFixed;fabric.Pattern=fabric.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(t,e){if(t||(t={}),this.id=fabric.Object.__uid++,this.setOptions(t),!t.source||t.source&&"string"!=typeof t.source)return void(e&&e(this));if("undefined"!=typeof fabric.util.getFunctionBody(t.source))this.source=new Function(fabric.util.getFunctionBody(t.source)),e&&e(this);else{var i=this;this.source=fabric.util.createImage(),fabric.util.loadImage(t.source,function(t){i.source=t,e&&e(i)},null,this.crossOrigin)}},toObject:function(e){var i,r,n=fabric.Object.NUM_FRACTION_DIGITS;return"function"==typeof this.source?i=String(this.source):"string"==typeof this.source.src?i=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(i=this.source.toDataURL()),r={type:"pattern",source:i,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:t(this.offsetX,n),offsetY:t(this.offsetY,n),patternTransform:this.patternTransform?this.patternTransform.concat():null},fabric.util.populateWithProperties(this,r,e),r},toSVG:function(t){var e="function"==typeof this.source?this.source():this.source,i=e.width/t.width,r=e.height/t.height,n=this.offsetX/t.width,s=this.offsetY/t.height,a="";return("repeat-x"===this.repeat||"no-repeat"===this.repeat)&&(r=1,s&&(r+=Math.abs(s))),("repeat-y"===this.repeat||"no-repeat"===this.repeat)&&(i=1,n&&(i+=Math.abs(n))),e.src?a=e.src:e.toDataURL&&(a=e.toDataURL()),'\n\n\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}})}();!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,a=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),o=20,c=new e.Color(this.color);return t.width&&t.height&&(r=100*i((Math.abs(a.x)+this.blur)/t.width,s)+o,n=100*i((Math.abs(a.y)+this.blur)/t.height,s)+o),t.flipX&&(a.x*=-1),t.flipY&&(a.y*=-1),'\n \n \n \n \n \n \n \n \n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this);!function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,r=fabric.util.removeFromArray,n=fabric.util.toFixed,i=fabric.util.transformPoint,a=fabric.util.invertTransform,o=fabric.util.getNodeCanvas,s=fabric.util.createCanvasElement,c=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(t,e){var r=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,r),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,r),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,r),e.overlayColor&&this.setOverlayColor(e.overlayColor,r),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var t=fabric.devicePixelRatio;this.__initRetinaScaling(t,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(t,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(t,e,r){e.setAttribute("width",this.width*t),e.setAttribute("height",this.height*t),r.scale(t,t)},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,r){return this.__setBgOverlayImage("overlayImage",t,e,r)},setBackgroundImage:function(t,e,r){return this.__setBgOverlayImage("backgroundImage",t,e,r)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,r,n){return"string"==typeof e?fabric.util.loadImage(e,function(e){if(e){var i=new fabric.Image(e,n);this[t]=i,i.canvas=this}r&&r(e)},this,n&&n.crossOrigin):(n&&e.setOptions(n),this[t]=e,e&&(e.canvas=this),r&&r(e)),this},__setBgOverlayColor:function(t,e,r){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,r),this},_createCanvasElement:function(){var t=s();if(!t)throw c;if(t.style||(t.style={}),"undefined"==typeof t.getContext)throw c;return t},_initOptions:function(t){var e=this.lowerCanvasEl;this._setOptions(t),this.width=this.width||parseInt(e.width,10)||0,this.height=this.height||parseInt(e.height,10)||0,this.lowerCanvasEl.style&&(e.width=this.width,e.height=this.height,e.style.width=this.width+"px",e.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=t&&t.getContext?t:fabric.util.getById(t)||this._createCanvasElement(),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var r;e=e||{};for(var n in t)r=t[n],e.cssOnly||(this._setBackstoreDimension(n,t[n]),r+="px",this.hasLostContext=!0),e.backstoreOnly||this._setCssDimension(n,r);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(),this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,r,n,i=this._activeObject,a=!1,o=!0;for(this.viewportTransform=t,r=0,n=this._objects.length;n>r;r++)e=this._objects[r],e.group||e.setCoords(a,o);return i&&"activeSelection"===i.type&&i.setCoords(a,o),this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll(),this},zoomToPoint:function(t,e){var r=t,n=this.viewportTransform.slice(0);t=i(t,a(this.viewportTransform)),n[0]=e,n[3]=e;var o=i(t,n);return n[4]+=r.x-o.x,n[5]+=r.y-o.y,this.setViewportTransform(n)},setZoom:function(t){return this.zoomToPoint(new fabric.Point(0,0),t),this},absolutePan:function(t){var e=this.viewportTransform.slice(0);return e[4]=-t.x,e[5]=-t.y,this.setViewportTransform(e)},relativePan:function(t){return this.absolutePan(new fabric.Point(-t.x-this.viewportTransform[4],-t.y-this.viewportTransform[5]))},getElement:function(){return this.lowerCanvasEl},_onObjectAdded:function(t){this.stateful&&t.setupState(),t._set("canvas",this),t.setCoords(),this.fire("object:added",{target:t}),t.fire("added")},_onObjectRemoved:function(t){this.fire("object:removed",{target:t}),t.fire("removed"),delete t.canvas},clearContext:function(t){return t.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.backgroundImage=null,this.overlayImage=null,this.backgroundColor="",this.overlayColor="",this._hasITextHandlers&&(this.off("mouse:up",this._mouseUpITextHandler),this._iTextInstances=null,this._hasITextHandlers=!1),this.clearContext(this.contextContainer),this.fire("canvas:cleared"),this.renderOnAddRemove&&this.requestRenderAll(),this},renderAll:function(){var t=this.contextContainer;return this.renderCanvas(t,this._objects),this},renderAndReset:function(){this.isRendering=0,this.renderAll()},requestRenderAll:function(){return this.isRendering||(this.isRendering=fabric.util.requestAnimFrame(this.renderAndResetBound)),this},calcViewportBoundaries:function(){var t={},e=this.width,r=this.height,n=a(this.viewportTransform);return t.tl=i({x:0,y:0},n),t.br=i({x:e,y:r},n),t.tr=new fabric.Point(t.br.x,t.tl.y),t.bl=new fabric.Point(t.tl.x,t.br.y),this.vptCoords=t,t},cancelRequestedRender:function(){this.isRendering&&(fabric.util.cancelAnimFrame(this.isRendering),this.isRendering=0)},renderCanvas:function(t,e){var r=this.viewportTransform,n=this.clipPath;this.cancelRequestedRender(),this.calcViewportBoundaries(),this.clearContext(t),this.fire("before:render",{ctx:t}),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),t.save(),t.transform(r[0],r[1],r[2],r[3],r[4],r[5]),this._renderObjects(t,e),t.restore(),!this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.clipTo&&t.restore(),n&&(n.canvas=this,n.shouldCache(),n._transformDone=!0,n.renderCache({forClipping:!0}),this.drawClipPathOnCanvas(t)),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render",{ctx:t})},drawClipPathOnCanvas:function(t){var e=this.viewportTransform,r=this.clipPath;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.globalCompositeOperation="destination-in",r.transform(t),t.scale(1/r.zoomX,1/r.zoomY),t.drawImage(r._cacheCanvas,-r.cacheTranslationX,-r.cacheTranslationY),t.restore()},_renderObjects:function(t,e){var r,n;for(r=0,n=e.length;n>r;++r)e[r]&&e[r].render(t)},_renderBackgroundOrOverlay:function(t,e){var r=this[e+"Color"],n=this[e+"Image"],i=this.viewportTransform,a=this[e+"Vpt"];if(r||n){if(r){t.save(),t.beginPath(),t.moveTo(0,0),t.lineTo(this.width,0),t.lineTo(this.width,this.height),t.lineTo(0,this.height),t.closePath(),t.fillStyle=r.toLive?r.toLive(t,this):r,a&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),t.transform(1,0,0,1,r.offsetX||0,r.offsetY||0);var o=r.gradientTransform||r.patternTransform;o&&t.transform(o[0],o[1],o[2],o[3],o[4],o[5]),t.fill(),t.restore()}n&&(t.save(),a&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),n.render(t),t.restore())}},_renderBackground:function(t){this._renderBackgroundOrOverlay(t,"background")},_renderOverlay:function(t){this._renderBackgroundOrOverlay(t,"overlay")},getCenter:function(){return{top:this.height/2,left:this.width/2}},centerObjectH:function(t){return this._centerObject(t,new fabric.Point(this.getCenter().left,t.getCenterPoint().y))},centerObjectV:function(t){return this._centerObject(t,new fabric.Point(t.getCenterPoint().x,this.getCenter().top))},centerObject:function(t){var e=this.getCenter();return this._centerObject(t,new fabric.Point(e.left,e.top))},viewportCenterObject:function(t){var e=this.getVpCenter();return this._centerObject(t,e)},viewportCenterObjectH:function(t){var e=this.getVpCenter();return this._centerObject(t,new fabric.Point(e.x,t.getCenterPoint().y)),this},viewportCenterObjectV:function(t){var e=this.getVpCenter();return this._centerObject(t,new fabric.Point(t.getCenterPoint().x,e.y))},getVpCenter:function(){var t=this.getCenter(),e=a(this.viewportTransform);return i({x:t.left,y:t.top},e)},_centerObject:function(t,e){return t.setPositionByOrigin(e,"center","center"),t.setCoords(),this.renderOnAddRemove&&this.requestRenderAll(),this},toDatalessJSON:function(t){return this.toDatalessObject(t)},toObject:function(t){return this._toObjectMethod("toObject",t)},toDatalessObject:function(t){return this._toObjectMethod("toDatalessObject",t)},_toObjectMethod:function(e,r){var n=this.clipPath,i={version:fabric.version,objects:this._toObjects(e,r)};return n&&(i.clipPath=this._toObject(this.clipPath,e,r)),t(i,this.__serializeBgOverlay(e,r)),fabric.util.populateWithProperties(this,i,r),i},_toObjects:function(t,e){return this._objects.filter(function(t){return!t.excludeFromExport}).map(function(r){return this._toObject(r,t,e)},this)},_toObject:function(t,e,r){var n;this.includeDefaultValues||(n=t.includeDefaultValues,t.includeDefaultValues=!1);var i=t[e](r);return this.includeDefaultValues||(t.includeDefaultValues=n),i},__serializeBgOverlay:function(t,e){var r={},n=this.backgroundImage,i=this.overlayImage;return this.backgroundColor&&(r.background=this.backgroundColor.toObject?this.backgroundColor.toObject(e):this.backgroundColor),this.overlayColor&&(r.overlay=this.overlayColor.toObject?this.overlayColor.toObject(e):this.overlayColor),n&&!n.excludeFromExport&&(r.backgroundImage=this._toObject(n,t,e)),i&&!i.excludeFromExport&&(r.overlayImage=this._toObject(i,t,e)),r},svgViewportTransformation:!0,toSVG:function(t,e){t||(t={}),t.reviver=e;var r=[];return this._setSVGPreamble(r,t),this._setSVGHeader(r,t),this.clipPath&&r.push('\n'),this._setSVGBgOverlayColor(r,"background"),this._setSVGBgOverlayImage(r,"backgroundImage",e),this._setSVGObjects(r,e),this.clipPath&&r.push("\n"),this._setSVGBgOverlayColor(r,"overlay"),this._setSVGBgOverlayImage(r,"overlayImage",e),r.push(""),r.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var r,i=e.width||this.width,a=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',s=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(r=this.viewportTransform,o='viewBox="'+n(-r[4]/r[0],s)+" "+n(-r[5]/r[3],s)+" "+n(this.width/r[0],s)+" "+n(this.height/r[3],s)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(e),"\n")},createSVGClipPathMarkup:function(t){var e=this.clipPath;return e?(e.clipPathId="CLIPPATH_"+fabric.Object.__uid++,'\n'+this.clipPath.toClipPathSVG(t.reviver)+"\n"):""},createSVGRefElementsMarkup:function(){var t=this,e=["background","overlay"].map(function(e){var r=t[e+"Color"];if(r&&r.toLive){var n=t[e+"Vpt"],i=t.viewportTransform,a={width:t.width/(n?i[0]:1),height:t.height/(n?i[3]:1)};return r.toSVG(a,{additionalTransform:n?fabric.util.matrixToSVG(i):""})}});return e.join("")},createSVGFontFacesMarkup:function(){var t,e,r,n,i,a,o,s,c,l="",u={},f=fabric.fontPaths,h=[];for(this._objects.forEach(function p(t){h.push(t),t._objects&&t._objects.forEach(p)}),s=0,c=h.length;c>s;s++)if(t=h[s],e=t.fontFamily,-1!==t.type.indexOf("text")&&!u[e]&&f[e]&&(u[e]=!0,t.styles)){r=t.styles;for(i in r){n=r[i];for(o in n)a=n[o],e=a.fontFamily,!u[e]&&f[e]&&(u[e]=!0)}}for(var d in u)l+=[" @font-face {\n"," font-family: '",d,"';\n"," src: url('",f[d],"');\n"," }\n"].join("");return l&&(l=[' \n"].join("")),l},_setSVGObjects:function(t,e){var r,n,i,a=this._objects;for(n=0,i=a.length;i>n;n++)r=a[n],r.excludeFromExport||this._setSVGObject(t,r,e)},_setSVGObject:function(t,e,r){t.push(e.toSVG(r))},_setSVGBgOverlayImage:function(t,e,r){this[e]&&!this[e].excludeFromExport&&this[e].toSVG&&t.push(this[e].toSVG(r))},_setSVGBgOverlayColor:function(t,e){var r=this[e+"Color"],n=this.viewportTransform,i=this.width,a=this.height;if(r)if(r.toLive){var o=r.repeat,s=fabric.util.invertTransform(n),c=this[e+"Vpt"],l=c?fabric.util.matrixToSVG(s):"";t.push('\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,n,i,a=this._activeObject;if(t===a&&"activeSelection"===t.type)for(i=a._objects,e=i.length;e--;)n=i[e],r(this._objects,n),this._objects.unshift(n);else r(this._objects,t),this._objects.unshift(t);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(t){if(!t)return this;var e,n,i,a=this._activeObject;if(t===a&&"activeSelection"===t.type)for(i=a._objects,e=0;e0+l&&(o=a-1,r(this._objects,i),this._objects.splice(o,0,i)),l++;else a=this._objects.indexOf(t),0!==a&&(o=this._findNewLowerIndex(t,a,e),r(this._objects,t),this._objects.splice(o,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(t,e,r){var n,i;if(r)for(n=e,i=e-1;i>=0;--i){var a=t.intersectsWithObject(this._objects[i])||t.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(t);if(a){n=i;break}}else n=e-1;return n},bringForward:function(t,e){if(!t)return this;var n,i,a,o,s,c=this._activeObject,l=0;if(t===c&&"activeSelection"===t.type)for(s=c._objects,n=s.length;n--;)i=s[n],a=this._objects.indexOf(i),ai;++i){var o=t.intersectsWithObject(this._objects[i])||t.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(t);if(o){n=i;break}}else n=e+1;return n},moveTo:function(t,e){return r(this._objects,t),this._objects.splice(e,0,t),this.renderOnAddRemove&&this.requestRenderAll()},dispose:function(){return this.isRendering&&(fabric.util.cancelAnimFrame(this.isRendering),this.isRendering=0),this.forEachObject(function(t){t.dispose&&t.dispose()}),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose&&this.backgroundImage.dispose(),this.backgroundImage=null,this.overlayImage&&this.overlayImage.dispose&&this.overlayImage.dispose(),this.overlayImage=null,this._iTextInstances=null,this.contextContainer=null,fabric.util.cleanUpJsdomNode(this.lowerCanvasEl),this.lowerCanvasEl=void 0,this},toString:function(){return"#"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=s();if(!e||!e.getContext)return null;var r=e.getContext("2d");if(!r)return null;switch(t){case"setLineDash":return"undefined"!=typeof r.setLineDash;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject,fabric.isLikelyNode&&(fabric.StaticCanvas.prototype.createPNGStream=function(){var t=o(this.lowerCanvasEl);return t&&t.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){var e=o(this.lowerCanvasEl);return e&&e.createJPEGStream(t)})}();fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.miterLimit=this.strokeMiterLimit,t.lineJoin=this.strokeLineJoin,fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(t){var e=this.canvas.viewportTransform;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},_setShadow:function(){if(this.shadow){var t=this.canvas,e=this.shadow,i=t.contextTop,r=t.getZoom();t&&t._isRetinaScaling()&&(r*=fabric.devicePixelRatio),i.shadowColor=e.color,i.shadowBlur=e.blur*r,i.shadowOffsetX=e.offsetX*r,i.shadowOffsetY=e.offsetY*r}},needsFullRender:function(){var t=new fabric.Color(this.color);return t.getAlpha()<1||!!this.shadow},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}});!function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{decimate:.4,initialize:function(t){this.canvas=t,this._points=[]},_drawSegment:function(t,e,i){var r=e.midPointFrom(i);return t.quadraticCurveTo(e.x,e.y,r.x,r.y),r},onMouseDown:function(t,e){this.canvas._isMainEvent(e.e)&&(this._prepareForDrawing(t),this._captureDrawingPath(t),this._render())},onMouseMove:function(t,e){if(this.canvas._isMainEvent(e.e)&&this._captureDrawingPath(t)&&this._points.length>1)if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var i=this._points,r=i.length,n=this.canvas.contextTop;this._saveAndTransform(n),this.oldEnd&&(n.beginPath(),n.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(n,i[r-2],i[r-1],!0),n.stroke(),n.restore()}},onMouseUp:function(t){return this.canvas._isMainEvent(t.e)?(this.oldEnd=void 0,this._finalizeAndAddPath(),!1):!0},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){return this._points.length>1&&t.eq(this._points[this._points.length-1])?!1:(this._points.push(t),!0)},_reset:function(){this._points=[],this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);return this._addPoint(e)},_render:function(){var t,e,i=this.canvas.contextTop,r=this._points[0],n=this._points[1];if(this._saveAndTransform(i),i.beginPath(),2===this._points.length&&r.x===n.x&&r.y===n.y){var s=this.width/1e3;r=new fabric.Point(r.x,r.y),n=new fabric.Point(n.x,n.y),r.x-=s,n.x+=s}for(i.moveTo(r.x,r.y),t=1,e=this._points.length;e>t;t++)this._drawSegment(i,r,n),r=this._points[t],n=this._points[t+1];i.lineTo(r.x,r.y),i.stroke(),i.restore()},convertPointsToSVGPath:function(t){var e,i=[],r=this.width/1e3,n=new fabric.Point(t[0].x,t[0].y),s=new fabric.Point(t[1].x,t[1].y),a=t.length,o=1,c=0,h=a>2;for(h&&(o=t[2].xe;e++){if(!n.eq(s)){var l=n.midPointFrom(s);i.push("Q ",n.x," ",n.y," ",l.x," ",l.y," ")}n=t[e],e+1t[e-2].x?1:n.x===t[e-2].x?0:-1,c=n.y>t[e-2].y?1:n.y===t[e-2].y?0:-1),i.push("L ",n.x+o*r," ",n.y+c*r),i},createPath:function(t){var e=new fabric.Path(t,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeMiterLimit:this.strokeMiterLimit,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray});return this.shadow&&(this.shadow.affectStroke=!0,e.setShadow(this.shadow)),e},decimatePoints:function(t,e){if(t.length<=2)return t;var i,r,n=this.canvas.getZoom(),s=Math.pow(e/n,2),a=t.length-1,o=t[0],c=[o];for(i=1;a>i;i++)r=Math.pow(o.x-t[i].x,2)+Math.pow(o.y-t[i].y,2),r>=s&&(o=t[i],c.push(o));return 1===c.length&&c.push(new fabric.Point(c[0].x,c[0].y)),c},_finalizeAndAddPath:function(){var t=this.canvas.contextTop;t.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var e=this.convertPointsToSVGPath(this._points).join("");if("M 0 0 Q 0 0 0 0 L 0 0"===e)return void this.canvas.requestRenderAll();var i=this.createPath(e);this.canvas.clearContext(this.canvas.contextTop),this.canvas.add(i),this.canvas.requestRenderAll(),i.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:i})}})}();fabric.CircleBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,initialize:function(t){this.canvas=t,this.points=[]},drawDot:function(t){var e=this.addPoint(t),i=this.canvas.contextTop;this._saveAndTransform(i),this.dot(i,e),i.restore()},dot:function(t,e){t.fillStyle=e.fill,t.beginPath(),t.arc(e.x,e.y,e.radius,0,2*Math.PI,!1),t.closePath(),t.fill()},onMouseDown:function(t){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(t)},_render:function(){var t,e,i=this.canvas.contextTop,r=this.points;for(this._saveAndTransform(i),t=0,e=r.length;e>t;t++)this.dot(i,r[t]);i.restore()},onMouseMove:function(t){this.needsFullRender()?(this.canvas.clearContext(this.canvas.contextTop),this.addPoint(t),this._render()):this.drawDot(t)},onMouseUp:function(){var t,e,i=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;var r=[];for(t=0,e=this.points.length;e>t;t++){var n=this.points[t],s=new fabric.Circle({radius:n.radius,left:n.x,top:n.y,originX:"center",originY:"center",fill:n.fill});this.shadow&&s.setShadow(this.shadow),r.push(s)}var a=new fabric.Group(r);a.canvas=this.canvas,this.canvas.add(a),this.canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=i,this.canvas.requestRenderAll()},addPoint:function(t){var e=new fabric.Point(t.x,t.y),i=fabric.util.getRandomInt(Math.max(0,this.width-20),this.width+20)/2,r=new fabric.Color(this.color).setAlpha(fabric.util.getRandomInt(0,100)/100).toRgba();return e.radius=i,e.fill=r,this.points.push(e),e}});fabric.SprayBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,density:20,dotWidth:1,dotWidthVariance:1,randomOpacity:!1,optimizeOverlapping:!0,initialize:function(t){this.canvas=t,this.sprayChunks=[]},onMouseDown:function(t){this.sprayChunks.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(t),this.render(this.sprayChunkPoints)},onMouseMove:function(t){this.addSprayChunk(t),this.render(this.sprayChunkPoints)},onMouseUp:function(){var t=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;for(var e=[],i=0,r=this.sprayChunks.length;r>i;i++)for(var n=this.sprayChunks[i],s=0,a=n.length;a>s;s++){var o=new fabric.Rect({width:n[s].width,height:n[s].width,left:n[s].x+1,top:n[s].y+1,originX:"center",originY:"center",fill:this.color});e.push(o)}this.optimizeOverlapping&&(e=this._getOptimizedRects(e));var c=new fabric.Group(e);this.shadow&&c.setShadow(this.shadow),this.canvas.add(c),this.canvas.fire("path:created",{path:c}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=t,this.canvas.requestRenderAll()},_getOptimizedRects:function(t){var e,i,r,n={};for(i=0,r=t.length;r>i;i++)e=t[i].left+""+t[i].top,n[e]||(n[e]=t[i]);var s=[];for(e in n)s.push(n[e]);return s},render:function(t){var e,i,r=this.canvas.contextTop;for(r.fillStyle=this.color,this._saveAndTransform(r),e=0,i=t.length;i>e;e++){var n=t[e];"undefined"!=typeof n.opacity&&(r.globalAlpha=n.opacity),r.fillRect(n.x,n.y,n.width,n.width)}r.restore()},_render:function(){var t,e,i=this.canvas.contextTop;for(i.fillStyle=this.color,this._saveAndTransform(i),t=0,e=this.sprayChunks.length;e>t;t++)this.render(this.sprayChunks[t]);i.restore()},addSprayChunk:function(t){this.sprayChunkPoints=[];var e,i,r,n,s=this.width/2;for(n=0;n0&&!this.preserveObjectStacking){e=[],i=[];for(var n=0,s=this._objects.length;s>n;n++)t=this._objects[n],-1===r.indexOf(t)?e.push(t):i.push(t);r.length>1&&(this._activeObject._objects=i),e.push.apply(e,i)}else e=this._objects;return e},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&this.renderTopLayer(this.contextTop);var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTopLayer:function(t){t.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(t),this.contextTopDirty=!0),t.restore()},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.renderTopLayer(t),this.fire("after:render"),this},_resetCurrentTransform:function(){var t=this._currentTransform;t.target.set({scaleX:t.original.scaleX,scaleY:t.original.scaleY,skewX:t.original.skewX,skewY:t.original.skewY,left:t.original.left,top:t.original.top}),this._shouldCenterTransform(t.target)?("center"!==t.originX&&(t.mouseXSign="right"===t.originX?-1:1),"center"!==t.originY&&(t.mouseYSign="bottom"===t.originY?-1:1),t.originX="center",t.originY="center"):(t.originX=t.original.originX,t.originY=t.original.originY)},containsPoint:function(t,e,i){var r,n=!0,s=i||this.getPointer(t,n);return r=e.group&&e.group===this._activeObject&&"activeSelection"===e.group.type?this._normalizePointer(e.group,s):{x:s.x,y:s.y},e.containsPoint(r)||e._findTargetCorner(s)},_normalizePointer:function(t,e){var i=t.calcTransformMatrix(),r=fabric.util.invertTransform(i),n=this.restorePointerVpt(e);return fabric.util.transformPoint(n,r)},isTargetTransparent:function(t,e,i){if(t.shouldCache()&&t._cacheCanvas&&t!==this._activeObject){var r=this._normalizePointer(t,{x:e,y:i}),n=Math.max(t.cacheTranslationX+r.x*t.zoomX,0),s=Math.max(t.cacheTranslationY+r.y*t.zoomY,0),a=fabric.util.isTransparent(t._cacheContext,Math.round(n),Math.round(s),this.targetFindTolerance);return a}var o=this.contextCache,c=t.selectionBackgroundColor,h=this.viewportTransform;t.selectionBackgroundColor="",this.clearContext(o),o.save(),o.transform(h[0],h[1],h[2],h[3],h[4],h[5]),t.render(o),o.restore(),t===this._activeObject&&t._renderControls(o,{hasBorders:!1,transparentCorners:!1},{hasBorders:!1}),t.selectionBackgroundColor=c;var a=fabric.util.isTransparent(o,e,i,this.targetFindTolerance);return a},_isSelectionKeyPressed:function(t){var e=!1;return e="[object Array]"===Object.prototype.toString.call(this.selectionKey)?!!this.selectionKey.find(function(e){return t[e]===!0}):t[this.selectionKey]},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),r=this._activeObject;return!e||e&&r&&i.length>1&&-1===i.indexOf(e)&&r!==e&&!this._isSelectionKeyPressed(t)||e&&!e.evented||e&&!e.selectable&&r&&r!==e},_shouldCenterTransform:function(t){if(t){var e,i=this._currentTransform;return"scale"===i.action||"scaleX"===i.action||"scaleY"===i.action?e=this.centeredScaling||t.centeredScaling:"rotate"===i.action&&(e=this.centeredRotation||t.centeredRotation),e?!i.altKey:i.altKey}},_getOriginFromCorner:function(t,e){var i={x:t.originX,y:t.originY};return"ml"===e||"tl"===e||"bl"===e?i.x="right":("mr"===e||"tr"===e||"br"===e)&&(i.x="left"),"tl"===e||"mt"===e||"tr"===e?i.y="bottom":("bl"===e||"mb"===e||"br"===e)&&(i.y="top"),i},_getActionFromCorner:function(t,e,i){if(!e||!t)return"drag";switch(e){case"mtr":return"rotate";case"ml":case"mr":return i[this.altActionKey]?"skewY":"scaleX";case"mt":case"mb":return i[this.altActionKey]?"skewX":"scaleY";default:return"scale"}},_setupCurrentTransform:function(t,i,r){if(i){var n=this.getPointer(t),s=i._findTargetCorner(this.getPointer(t,!0)),a=this._getActionFromCorner(r,s,t,i),o=this._getOriginFromCorner(i,s);this._currentTransform={target:i,action:a,corner:s,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:n.x-i.left,offsetY:n.y-i.top,originX:o.x,originY:o.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:e(i.angle),width:i.width*i.scaleX,mouseXSign:1,mouseYSign:1,shiftKey:t.shiftKey,altKey:t[this.centeredKey],original:fabric.util.saveObjectTransform(i)},this._currentTransform.original.originX=o.x,this._currentTransform.original.originY=o.y,this._resetCurrentTransform(),this._beforeTransform(t)}},_translateObject:function(t,e){var i=this._currentTransform,r=i.target,n=t-i.offsetX,s=e-i.offsetY,a=!r.get("lockMovementX")&&r.left!==n,o=!r.get("lockMovementY")&&r.top!==s;return a&&r.set("left",n),o&&r.set("top",s),a||o},_changeSkewTransformOrigin:function(t,e,i){var r="originX",n={0:"center"},s=e.target.skewX,a="left",o="right",c="mt"===e.corner||"ml"===e.corner?1:-1,h=1;t=t>0?1:-1,"y"===i&&(s=e.target.skewY,a="top",o="bottom",r="originY"),n[-1]=a,n[1]=o,e.target.flipX&&(h*=-1),e.target.flipY&&(h*=-1),0===s?(e.skewSign=-c*t*h,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*c*h])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,a=n.get("lockSkewingX"),o=n.get("lockSkewingY");if(a&&"x"===i||o&&"y"===i)return!1;var c,h,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],h=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(c,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(h,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,a,o,c,h,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(o="y",c="Y",h="X",u=0,f=d.skewY):(o="x",c="X",h="Y",u=d.skewX,f=0),a=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-a[i],2>=l?n=0:(n=p*Math.atan(l/d["scale"+h]/(a[o]/d["scale"+c])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+h]!==n,d.set("skew"+h,n),0!==d["skew"+c]&&(s=d._getTransformedDimensions(),n=r[o]/s[o]*d["scale"+c],d.set("scale"+c,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.lockScalingX,a=n.lockScalingY,o=n.lockScalingFlip;if(s&&a)return!1;var c=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(h,r),u=this._setObjectScale(h,r,s,a,i,o,l),n.setPositionByOrigin(c,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,a){var o=e.target,c=!1,h=!1,l=!1,u=t.x*o.scaleX/a.x,f=t.y*o.scaleY/a.y,d=o.scaleX!==u,g=o.scaleY!==f;if(e.newScaleX=u,e.newScaleY=f,fabric.Textbox&&"x"===n&&o instanceof fabric.Textbox){var p=o.width*(t.x/a.x);return p>=o.getMinWidth()?(l=p!==o.width,o.set("width",p),l):!1}return s&&0>=u&&u=f&&fs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n,s=this._currentTransform,a=s.target,n=a.translateToOriginPoint(a.getCenterPoint(),s.originX,s.originY);if(a.lockRotation)return!1;var o=r(s.ey-n.y,s.ex-n.x),c=r(e-n.y,t-n.x),h=i(c-o+s.theta),l=!0;if(a.snapAngle>0){var u=a.snapAngle,f=a.snapThreshold||u,d=Math.ceil(h/u)*u,g=Math.floor(h/u)*u;Math.abs(h-g)h&&(h=360+h),h%=360,a.angle===h?l=!1:(a.angle=h,a.setPositionByOrigin(n,s.originX,s.originY)),l},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_drawSelection:function(t){var e=this._groupSelector,i=e.left,r=e.top,o=n(i),c=n(r);if(this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(e.ex-(i>0?0:-i),e.ey-(r>0?0:-r),o,c)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var h=e.ex+a-(i>0?0:o),l=e.ey+a-(r>0?0:c);t.beginPath(),fabric.util.drawDashedLine(t,h,l,h+o,l,this.selectionDashArray),fabric.util.drawDashedLine(t,h,l+c-1,h+o,l+c-1,this.selectionDashArray),fabric.util.drawDashedLine(t,h,l,h,l+c,this.selectionDashArray),fabric.util.drawDashedLine(t,h+o-1,l,h+o-1,l+c,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+a-(i>0?0:o),e.ey+a-(r>0?0:c),o,c)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r,n=!0,s=this.getPointer(t,n),a=this._activeObject,o=this.getActiveObjects();if(this.targets=[],o.length>1&&!e&&a===this._searchPossibleTargets([a],s))return a;if(1===o.length&&a._findTargetCorner(s))return a;if(1===o.length&&a===this._searchPossibleTargets([a],s)){if(!this.preserveObjectStacking)return a;i=a,r=this.targets,this.targets=[]}var c=this._searchPossibleTargets(this._objects,s);return t[this.altSelectionKey]&&c&&i&&c!==i&&(c=i,this.targets=r),c}},_checkTarget:function(t,e,i){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var r=this.isTargetTransparent(e,i.x,i.y);if(!r)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n=t.length;n--;){var s=t[n],a=s.group&&"activeSelection"!==s.group.type?this._normalizePointer(s.group,e):e;if(this._checkTarget(a,s,e)){i=t[n],i.subTargetCheck&&i instanceof fabric.Group&&(r=this._searchPossibleTargets(i._objects,e),r&&this.targets.push(r));break}}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var r,n=t(e),s=this.upperCanvasEl,a=s.getBoundingClientRect(),o=a.width||0,c=a.height||0;o&&c||("top"in a&&"bottom"in a&&(c=Math.abs(a.top-a.bottom)),"right"in a&&"left"in a&&(o=Math.abs(a.right-a.left))),this.calcOffset(),n.x=n.x-this._offset.left,n.y=n.y-this._offset.top,i||(n=this.restorePointerVpt(n));var h=this.getRetinaScaling();return 1!==h&&(n.x/=h,n.y/=h),r=0===o||0===c?{width:1,height:1}:{width:s.width/o,height:s.height/c},{x:n.x*r.width,y:n.y*r.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),e=this.lowerCanvasEl,i=this.upperCanvasEl;i?i.className="":(i=this._createCanvasElement(),this.upperCanvasEl=i),fabric.util.addClass(i,"upper-canvas "+t),this.wrapperEl.appendChild(i),this._copyCanvasStyle(e,i),this._applyCanvasStyle(i),this.contextTop=i.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.width||t.width,i=this.height||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?"activeSelection"===t.type&&t._objects?t._objects.slice(0):[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),t===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",t)},_fireSelectionEvents:function(t,e){var i=!1,r=this.getActiveObjects(),n=[],s=[],a={e:e};t.forEach(function(t){-1===r.indexOf(t)&&(i=!0,t.fire("deselected",a),s.push(t))}),r.forEach(function(e){-1===t.indexOf(e)&&(i=!0,e.fire("selected",a),n.push(e))}),t.length>0&&r.length>0?(a.selected=n,a.deselected=s,a.updated=n[0]||s[0],a.target=this._activeObject,i&&this.fire("selection:updated",a)):r.length>0?(1===r.length&&(a.target=n[0],this.fire("object:selected",a)),a.selected=n,a.target=this._activeObject,this.fire("selection:created",a)):t.length>0&&(a.deselected=s,this.fire("selection:cleared",a))},setActiveObject:function(t,e){var i=this.getActiveObjects();return this._setActiveObject(t,e),this._fireSelectionEvents(i,e),this},_setActiveObject:function(t,e){return this._activeObject===t?!1:this._discardActiveObject(e,t)?t.onSelect({e:e})?!1:(this._activeObject=t,!0):!1},_discardActiveObject:function(t,e){var i=this._activeObject;if(i){if(i.onDeselect({e:t,object:e}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var e=this.getActiveObjects(),i=this.getActiveObject();return e.length&&this.fire("before:selection:cleared",{target:i,e:t}),this._discardActiveObject(t),this._fireSelectionEvents(e,t),this},dispose:function(){var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach(function(t){fabric.util.cleanUpJsdomNode(this[t]),this[t]=void 0}.bind(this)),t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,fabric.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var e=this._activeObject;e&&e._renderControls(t)},_toObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(t),n=this.callSuper("_toObject",t,e,i);return this._unwindGroupTransformOnObject(t,r),n},_realizeGroupTransformOnObject:function(t){if(t.group&&"activeSelection"===t.group.type&&this._activeObject===t.group){var e=["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"],i={};return e.forEach(function(e){i[e]=t[e]}),this._activeObject.realizeTransform(t),i}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},_setSVGObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(e);this.callSuper("_setSVGObject",t,e,i),this._unwindGroupTransformOnObject(e,r)},setViewportTransform:function(t){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),fabric.StaticCanvas.prototype.setViewportTransform.call(this,t)}});for(var o in fabric.StaticCanvas)"prototype"!==o&&(fabric.Canvas[o]=fabric.StaticCanvas[o])}();!function(){function t(t,e){return t.button&&t.button===e-1}var e={mt:0,tr:1,mr:2,br:3,mb:4,bl:5,ml:6,tl:7},i=fabric.util.addListener,r=fabric.util.removeListener,n=3,s=2,a=1,o={passive:!1};fabric.util.object.extend(fabric.Canvas.prototype,{cursorMap:["n-resize","ne-resize","e-resize","se-resize","s-resize","sw-resize","w-resize","nw-resize"],mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(i,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(t,e){var i=this.upperCanvasEl,r=this._getEventPrefix();t(fabric.window,"resize",this._onResize),t(i,r+"down",this._onMouseDown),t(i,r+"move",this._onMouseMove,o),t(i,r+"out",this._onMouseOut),t(i,r+"enter",this._onMouseEnter),t(i,"wheel",this._onMouseWheel),t(i,"contextmenu",this._onContextMenu),t(i,"dblclick",this._onDoubleClick),t(i,"dragover",this._onDragOver),t(i,"dragenter",this._onDragEnter),t(i,"dragleave",this._onDragLeave),t(i,"drop",this._onDrop),this.enablePointerEvents||t(i,"touchstart",this._onTouchStart,o),"undefined"!=typeof eventjs&&e in eventjs&&(eventjs[e](i,"gesture",this._onGesture),eventjs[e](i,"drag",this._onDrag),eventjs[e](i,"orientation",this._onOrientationChange),eventjs[e](i,"shake",this._onShake),eventjs[e](i,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(r,"remove");var t=this._getEventPrefix();r(fabric.document,t+"up",this._onMouseUp),r(fabric.document,"touchend",this._onTouchEnd,o),r(fabric.document,t+"move",this._onMouseMove,o),r(fabric.document,"touchmove",this._onMouseMove,o)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._simpleEventHandler.bind(this,"drop"),this.eventsBound=!0)},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t});var i=this;this._hoveredTargets.forEach(function(r){i.fire("mouse:out",{target:e,e:t}),r&&e.fire("mouseout",{e:t})}),this._hoveredTargets=[],this._iTextInstances&&this._iTextInstances.forEach(function(t){t.isEditing&&t.hiddenTextarea.focus()})},_onMouseEnter:function(t){this.currentTransform||this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onDragOver:function(t){t.preventDefault();var e=this._simpleEventHandler("dragover",t);this._fireEnterLeaveEvents(e,t)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onDoubleClick:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"dblclick"),this._resetTransformEventData(t)},getPointerId:function(t){var e=t.changedTouches;return e?e[0]&&e[0].identifier:this.enablePointerEvents?t.pointerId:-1},_isMainEvent:function(t){return t.isPrimary===!0?!0:t.isPrimary===!1?!1:"touchend"===t.type&&0===t.touches.length?!0:t.changedTouches?t.changedTouches[0].identifier===this.mainTouchId:!0},_onTouchStart:function(t){t.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(t)),this.__onMouseDown(t),this._resetTransformEventData();var e=this.upperCanvasEl,n=this._getEventPrefix();i(fabric.document,"touchend",this._onTouchEnd,o),i(fabric.document,"touchmove",this._onMouseMove,o),r(e,n+"down",this._onMouseDown)},_onMouseDown:function(t){this.__onMouseDown(t),this._resetTransformEventData();var e=this.upperCanvasEl,n=this._getEventPrefix();r(e,n+"move",this._onMouseMove,o),i(fabric.document,n+"up",this._onMouseUp),i(fabric.document,n+"move",this._onMouseMove,o)},_onTouchEnd:function(t){if(!(t.touches.length>0)){this.__onMouseUp(t),this._resetTransformEventData(),this.mainTouchId=null;var e=this._getEventPrefix();r(fabric.document,"touchend",this._onTouchEnd,o),r(fabric.document,"touchmove",this._onMouseMove,o);var n=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(function(){i(n.upperCanvasEl,e+"down",n._onMouseDown),n._willAddMouseDown=0},400)}},_onMouseUp:function(t){this.__onMouseUp(t),this._resetTransformEventData();var e=this.upperCanvasEl,n=this._getEventPrefix();this._isMainEvent(t)&&(r(fabric.document,n+"up",this._onMouseUp),r(fabric.document,n+"move",this._onMouseMove,o),i(e,n+"move",this._onMouseMove,o))},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t){var e=this._activeObject;return!!e!=!!t||e&&t&&e!==t?!0:e&&e.isEditing?!1:!1},__onMouseUp:function(e){var i,r=this._currentTransform,o=this._groupSelector,c=!1,h=!o||0===o.left&&0===o.top;return this._cacheTransformEventData(e),i=this._target,this._handleEvent(e,"up:before"),t(e,n)?void(this.fireRightClick&&this._handleEvent(e,"up",n,h)):t(e,s)?(this.fireMiddleClick&&this._handleEvent(e,"up",s,h),void this._resetTransformEventData()):this.isDrawingMode&&this._isCurrentlyDrawing?void this._onMouseUpInDrawingMode(e):void(this._isMainEvent(e)&&(r&&(this._finalizeCurrentTransform(e),c=r.actionPerformed),h||(this._maybeGroupObjects(e),c||(c=this._shouldRender(i))),i&&(i.isMoving=!1),this._setCursorFromEvent(e,i),this._handleEvent(e,"up",a,h),this._groupSelector=null,this._currentTransform=null,i&&(i.__corner=0),c?this.requestRenderAll():h||this.renderTop()))},_simpleEventHandler:function(t,e){var i=this.findTarget(e),r=this.targets,n={e:e,target:i,subTargets:r};if(this.fire(t,n),i&&i.fire(t,n),!r)return i;for(var s=0;sa;a++)this.fireSyntheticInOutEvents(n[a],e,{oldTarget:r[a],evtOut:"mouseout",evtIn:"mouseover"});this._hoveredTarget=t,this._hoveredTargets=this.targets.concat()},_fireEnterLeaveEvents:function(t,e){var i=this._draggedoverTarget,r=this._hoveredTargets,n=this.targets,s=Math.max(r.length,n.length);this.fireSyntheticInOutEvents(t,e,{oldTarget:i,evtOut:"dragleave",evtIn:"dragenter"});for(var a=0;s>a;a++)this.fireSyntheticInOutEvents(n[a],e,{oldTarget:r[a],evtOut:"dragleave",evtIn:"dragenter"});this._draggedoverTarget=t},fireSyntheticInOutEvents:function(t,e,i){var r,n,s,a,o=i.oldTarget,c=o!==t,h=i.canvasEvtIn,l=i.canvasEvtOut;c&&(r={e:e,target:t,previousTarget:o},n={e:e,target:o,nextTarget:t}),a=t&&c,s=o&&c,s&&(l&&this.fire(l,n),o.fire(i.evtOut,n)),a&&(h&&this.fire(h,r),t.fire(i.evtIn,r))},__onMouseWheel:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"wheel"),this._resetTransformEventData()},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.requestRenderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.action,a=!1,o={target:e.target,e:t,transform:e,pointer:i};"rotate"===s?(a=this._rotateObject(r,n))&&this._fire("rotating",o):"scale"===s?(a=this._onScale(t,e,r,n))&&this._fire("scaling",o):"scaleX"===s?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",o):"scaleY"===s?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",o):"skewX"===s?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",o):"skewY"===s?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",o):(a=this._translateObject(r,n),a&&(this._fire("moving",o),this.setCursor(o.target.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e){this.fire("object:"+t,e),e.target.fire(t,e)},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return this._isUniscalePossible(t,e.target)?(e.currentAction="scale",this._scaleObject(i,r)):(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally"))},_isUniscalePossible:function(t,e){return(t[this.uniScaleKey]||this.uniScaleTransform)&&!e.get("lockUniScaling")},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this._activeObject&&"activeSelection"===this._activeObject.type?this._activeObject:null,n=(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this.setCursor(this.getCornerCursor(n,e,t)):(e.subTargetCheck&&this.targets.concat().reverse().map(function(t){i=t.hoverCursor||i}),this.setCursor(i))},getCornerCursor:function(t,i,r){return this.actionIsDisabled(t,i,r)?this.notAllowedCursor:t in e?this._getRotatedCornerCursor(t,i,r):"mtr"===t&&i.hasRotatingPoint?this.rotationCursor:this.defaultCursor},actionIsDisabled:function(t,e,i){return"mt"===t||"mb"===t?i[this.altActionKey]?e.lockSkewingX:e.lockScalingY:"ml"===t||"mr"===t?i[this.altActionKey]?e.lockSkewingY:e.lockScalingX:"mtr"===t?e.lockRotation:this._isUniscalePossible(i,e)?e.lockScalingX&&e.lockScalingY:e.lockScalingX||e.lockScalingY},_getRotatedCornerCursor:function(t,i,r){var n=Math.round(i.angle%360/45);return 0>n&&(n+=8),n+=e[t],r[this.altActionKey]&&e[t]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}();!function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this._activeObject;return i&&this._isSelectionKeyPressed(t)&&e&&e.selectable&&this.selection&&(i!==e||"activeSelection"===i.type)&&!e.onSelect({e:t})},_handleGrouping:function(t,e){var i=this._activeObject;i.__corner||(e!==i||(e=this.findTarget(t,!0),e&&e.selectable))&&(i&&"activeSelection"===i.type?this._updateActiveSelection(e,t):this._createActiveSelection(e,t))},_updateActiveSelection:function(t,e){var i=this._activeObject,r=i._objects.slice(0);i.contains(t)?(i.removeWithUpdate(t),this._hoveredTarget=t,this._hoveredTargets=this.targets.concat(),1===i.size()&&this._setActiveObject(i.item(0),e)):(i.addWithUpdate(t),this._hoveredTarget=i,this._hoveredTargets=this.targets.concat()),this._fireSelectionEvents(r,e)},_createActiveSelection:function(t,e){var i=this.getActiveObjects(),r=this._createGroup(t);this._hoveredTarget=r,this._setActiveObject(r,e),this._fireSelectionEvents(i,e)},_createGroup:function(t){var e=this._objects,i=e.indexOf(this._activeObject)1&&(e=new fabric.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(e,t))},_collectObjects:function(i){for(var r,n=[],s=this._groupSelector.ex,a=this._groupSelector.ey,o=s+this._groupSelector.left,c=a+this._groupSelector.top,h=new fabric.Point(t(s,o),t(a,c)),l=new fabric.Point(e(s,o),e(a,c)),u=!this.selectionFullyContained,f=s===o&&a===c,d=this._objects.length;d--&&(r=this._objects[d],!(r&&r.selectable&&r.visible&&(u&&r.intersectsWithRect(h,l)||r.isContainedWithinRect(h,l)||u&&r.containsPoint(h)||u&&r.containsPoint(l))&&(n.push(r),f))););return n.length>1&&(n=n.filter(function(t){return!t.onSelect({e:i})})),n},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t),this.setCursor(this.defaultCursor),this._groupSelector=null}})}();!function(){fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",r=t.quality||1,i=(t.multiplier||1)*(t.enableRetinaScaling?this.getRetinaScaling():1),n=this.toCanvasElement(i,t);return fabric.util.toDataURL(n,e,r)},toCanvasElement:function(t,e){t=t||1,e=e||{};var r=(e.width||this.width)*t,i=(e.height||this.height)*t,n=this.getZoom(),a=this.width,o=this.height,s=n*t,c=this.viewportTransform,l=(c[4]-(e.left||0))*t,u=(c[5]-(e.top||0))*t,f=this.interactive,h=[s,0,0,s,l,u],d=this.enableRetinaScaling,p=fabric.util.createCanvasElement(),g=this.contextTop;return p.width=r,p.height=i,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=h,this.width=r,this.height=i,this.calcViewportBoundaries(),this.renderCanvas(p.getContext("2d"),this._objects),this.viewportTransform=c,this.width=a,this.height=o,this.calcViewportBoundaries(),this.interactive=f,this.enableRetinaScaling=d,this.contextTop=g,p}})}();fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,r){return this.loadFromJSON(t,e,r)},loadFromJSON:function(t,e,r){if(t){var i="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t),n=this,a=i.clipPath,o=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete i.clipPath,this._enlivenObjects(i.objects,function(t){n.clear(),n._setBgOverlay(i,function(){a?n._enlivenObjects([a],function(r){n.clipPath=r[0],n.__setupCanvas.call(n,i,t,o,e)}):n.__setupCanvas.call(n,i,t,o,e)})},r),this}},__setupCanvas:function(t,e,r,i){var n=this;e.forEach(function(t,e){n.insertAt(t,e)}),this.renderOnAddRemove=r,delete t.objects,delete t.backgroundImage,delete t.overlayImage,delete t.background,delete t.overlay,this._setOptions(t),this.renderAll(),i&&i()},_setBgOverlay:function(t,e){var r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,i),this.__setBgOverlay("overlayImage",t.overlayImage,r,i),this.__setBgOverlay("backgroundColor",t.background,r,i),this.__setBgOverlay("overlayColor",t.overlay,r,i)},__setBgOverlay:function(t,e,r,i){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],r[t]=!0,i&&i()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){r[t]=!0,i&&i()})):(r[t]=!0,void(i&&i()))},_enlivenObjects:function(t,e,r){return t&&0!==t.length?void fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,r):void(e&&e([]))},_toDataURL:function(t,e){this.clone(function(r){e(r.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,r){this.clone(function(i){r(i.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var r=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(r,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.util.createCanvasElement();e.width=this.width,e.height=this.height;var r=new fabric.Canvas(e);r.clipTo=this.clipTo,this.backgroundImage?(r.setBackgroundImage(this.backgroundImage.src,function(){r.renderAll(),t&&t(r)}),r.backgroundImageOpacity=this.backgroundImageOpacity,r.backgroundImageStretch=this.backgroundImageStretch):t&&t(r)}});!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,a=e.util.string.capitalize,s=e.util.degreesToRadians,o=e.StaticCanvas.supports("setLineDash"),c=!e.isLikelyNode,l=2;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:c,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(t){t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=t.width,n=t.height,a=e.maxCacheSideLimit,s=e.minCacheSideLimit;if(a>=r&&a>=n&&i>=r*n)return s>r&&(t.width=s),s>n&&(t.height=s),t;var o=r/n,c=e.util.limitDimsByArea(o,i),l=e.util.capValue,h=l(s,c.x,a),u=l(s,c.y,a);return r>h&&(t.zoomX/=r/h,t.width=h,t.capped=!0),n>u&&(t.zoomY/=n/u,t.height=u,t.capped=!0),t},_getCacheCanvasDimensions:function(){var t=this.getTotalObjectScaling(),e=this._getTransformedDimensions(0,0),i=e.x*t.scaleX/this.scaleX,r=e.y*t.scaleY/this.scaleY;return{width:i+l,height:r+l,zoomX:t.scaleX,zoomY:t.scaleY,x:i,y:r}},_updateCacheCanvas:function(){var t=this.canvas;if(this.noScaleCache&&t&&t._currentTransform){var i=t._currentTransform.target,r=t._currentTransform.action;if(this===i&&r.slice&&"scale"===r.slice(0,5))return!1}var n,a,s=this._cacheCanvas,o=this._limitCacheSize(this._getCacheCanvasDimensions()),c=e.minCacheSideLimit,l=o.width,h=o.height,u=o.zoomX,f=o.zoomY,d=l!==this.cacheWidth||h!==this.cacheHeight,p=this.zoomX!==u||this.zoomY!==f,g=d||p,m=0,v=0,b=!1;if(d){var y=this._cacheCanvas.width,w=this._cacheCanvas.height,C=l>y||h>w,x=(.9*y>l||.9*w>h)&&y>c&&w>c;b=C||x,C&&!o.capped&&(l>c||h>c)&&(m=.1*l,v=.1*h)}return g?(b?(s.width=Math.ceil(l+m),s.height=Math.ceil(h+v)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,s.width,s.height)),n=o.x/2,a=o.y/2,this.cacheTranslationX=Math.round(s.width/2-n)+n,this.cacheTranslationY=Math.round(s.height/2-a)+a,this.cacheWidth=l,this.cacheHeight=h,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(u,f),this.zoomX=u,this.zoomY=f,!0):!1},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t){var e;e=this.group&&!this.group._transformDone?this.calcTransformMatrix():this.calcOwnMatrix(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:e.version,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.angle,i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return this.clipPath&&(r.clipPath=this.clipPath.toObject(t),r.clipPath.inverted=this.clipPath.inverted,r.clipPath.absolutePositioned=this.clipPath.absolutePositioned),e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){if("left"!==e&&"top"!==e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}}),t},toString:function(){return"#"},getObjectScaling:function(){var t=e.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(t.scaleX),scaleY:Math.abs(t.scaleY)}},getTotalObjectScaling:function(){var t=this.getObjectScaling(),e=t.scaleX,i=t.scaleY;if(this.canvas){var r=this.canvas.getZoom(),n=this.canvas.getRetinaScaling();e*=r*n,i*=r*n}return{scaleX:e,scaleY:i}},getObjectOpacity:function(){var t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t},_set:function(t,i){var r="scaleX"===t||"scaleY"===t,n=this[t]!==i,a=!1;return r&&(i=this._constrainScale(i)),"scaleX"===t&&0>i?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&0>i?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,n&&(a=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(t)>-1?(this.dirty=!0,a&&this.group.set("dirty",!0)):a&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||0===this.width&&0===this.height&&0===this.strokeWidth||!this.visible},render:function(t){this.isNotVisible()||(!this.canvas||!this.canvas.skipOffscreen||this.group||this.isOnScreen())&&(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t,this),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(t)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},renderCache:function(t){t=t||{},this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,t.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&"transparent"!==this.stroke&&0!==this.strokeWidth},hasFill:function(){return this.fill&&"transparent"!==this.fill},needsItsOwnCache:function(){return"stroke"===this.paintFirst&&this.hasFill()&&this.hasStroke()&&"object"==typeof this.shadow?!0:this.clipPath?!0:!1},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawClipPathOnCache:function(t){var i=this.clipPath;if(t.save(),t.globalCompositeOperation=i.inverted?"destination-out":"destination-in",i.absolutePositioned){var r=e.util.invertTransform(this.calcTransformMatrix());t.transform(r[0],r[1],r[2],r[3],r[4],r[5])}i.transform(t),t.scale(1/i.zoomX,1/i.zoomY),t.drawImage(i._cacheCanvas,-i.cacheTranslationX,-i.cacheTranslationY),t.restore()},drawObject:function(t,e){var i=this.fill,r=this.stroke;e?(this.fill="black",this.stroke="",this._setClippingProperties(t)):(this._renderBackground(t),this._setStrokeStyles(t,this),this._setFillStyles(t,this)),this._render(t),this._drawClipPath(t),this.fill=i,this.stroke=r},_drawClipPath:function(t){var e=this.clipPath;e&&(e.canvas=this.canvas,e.shouldCache(),e._transformDone=!0,e.renderCache({forClipping:!0}),this.drawClipPathOnCache(t))},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity},_setStrokeStyles:function(t,e){e.stroke&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineDashOffset=e.strokeDashOffset,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,t.strokeStyle=e.stroke.toLive?e.stroke.toLive(t,this):e.stroke)},_setFillStyles:function(t,e){e.fill&&(t.fillStyle=e.fill.toLive?e.fill.toLive(t,this):e.fill)},_setClippingProperties:function(t){t.globalAlpha=1,t.strokeStyle="transparent",t.fillStyle="#000000"},_setLineDash:function(t,e,i){e&&0!==e.length&&(1&e.length&&e.push.apply(e,e),o?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){var r,n,a,o=this.getViewportTransform(),c=this.calcTransformMatrix();i=i||{},n="undefined"!=typeof i.hasBorders?i.hasBorders:this.hasBorders,a="undefined"!=typeof i.hasControls?i.hasControls:this.hasControls,c=e.util.multiplyTransformMatrices(o,c),r=e.util.qrDecompose(c),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),i.forActiveSelection?(t.rotate(s(r.angle)),n&&this.drawBordersInGroup(t,r,i)):(t.rotate(s(this.angle)),n&&this.drawBorders(t,i)),a&&this.drawControls(t,i),t.restore()},_setShadow:function(t){if(this.shadow){var i,r=this.shadow,n=this.canvas,a=n&&n.viewportTransform[0]||1,s=n&&n.viewportTransform[3]||1;i=r.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),n&&n._isRetinaScaling()&&(a*=e.devicePixelRatio,s*=e.devicePixelRatio),t.shadowColor=r.color,t.shadowBlur=r.blur*e.browserShadowBlurConstant*(a+s)*(i.scaleX+i.scaleY)/4,t.shadowOffsetX=r.offsetX*a*i.scaleX,t.shadowOffsetY=r.offsetY*s*i.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(!e||!e.toLive)return{offsetX:0,offsetY:0};var i=e.gradientTransform||e.patternTransform,r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;return"percentage"===e.gradientUnits?t.transform(this.width,0,0,this.height,r,n):t.transform(1,0,0,1,r,n),i&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(t){"stroke"===this.paintFirst?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))},_render:function(){},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this.strokeUniform&&this.group){var e=this.getObjectScaling();t.scale(1/e.scaleX,1/e.scaleY)}else this.strokeUniform&&t.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this.stroke.toLive&&"percentage"===this.stroke.gradientUnits?this._applyPatternForTransformedGradient(t,this.stroke):this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore()}},_applyPatternForTransformedGradient:function(t,i){var r,n=this._limitCacheSize(this._getCacheCanvasDimensions()),a=e.util.createCanvasElement(),s=this.canvas.getRetinaScaling(),o=n.x/this.scaleX/s,c=n.y/this.scaleY/s;a.width=o,a.height=c,r=a.getContext("2d"),r.beginPath(),r.moveTo(0,0),r.lineTo(o,0),r.lineTo(o,c),r.lineTo(0,c),r.closePath(),r.translate(o/2,c/2),r.scale(n.zoomX/this.scaleX/s,n.zoomY/this.scaleY/s),this._applyPatternGradientTransform(r,i),r.fillStyle=i.toLive(t),r.fill(),t.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),t.scale(s*this.scaleX/n.zoomX,s*this.scaleY/n.zoomY),t.strokeStyle=r.createPattern(a,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var t=e.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",t.scaleX),this.set("scaleY",t.scaleY),this.angle=t.angle,this.skewX=t.skewX,this.skewY=0}},_removeTransformMatrix:function(t){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=e.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,t&&(this.scaleX*=t.scaleX,this.scaleY*=t.scaleY,this.cropX=t.cropX,this.cropY=t.cropY,i.x+=t.offsetLeft,i.y+=t.offsetTop,this.width=t.width,this.height=t.height),this.setPositionByOrigin(i,"center","center")},clone:function(t,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,t):e.Object._fromObject("Object",r,t)},cloneAsImage:function(t,i){var r=this.toCanvasElement(i);return t&&t(new e.Image(r)),this},toCanvasElement:function(t){t||(t={});var i=e.util,r=i.saveObjectTransform(this),n=this.group,a=this.shadow,s=Math.abs,o=(t.multiplier||1)*(t.enableRetinaScaling?e.devicePixelRatio:1);delete this.group,t.withoutTransform&&i.resetObjectTransform(this),t.withoutShadow&&(this.shadow=null);var c,l,h,u,f=e.util.createCanvasElement(),d=this.getBoundingRect(!0,!0),p=this.shadow,g={x:0,y:0};p&&(l=p.blur,c=p.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),g.x=2*Math.round(s(p.offsetX)+l)*s(c.scaleX),g.y=2*Math.round(s(p.offsetY)+l)*s(c.scaleY)),h=d.width+g.x,u=d.height+g.y,f.width=Math.ceil(h),f.height=Math.ceil(u);var m=new e.StaticCanvas(f,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});"jpeg"===t.format&&(m.backgroundColor="#fff"),this.setPositionByOrigin(new e.Point(m.width/2,m.height/2),"center","center");var v=this.canvas;m.add(this);var b=m.toCanvasElement(o||1,t);return this.shadow=a,this.set("canvas",v),n&&(this.group=n),this.set(r).setCoords(),m._objects=[],m.dispose(),m=null,b},toDataURL:function(t){return t||(t={}),e.util.toDataURL(this.toCanvasElement(t),t.format||"png",t.quality||1)},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},r.gradientUnits=i.gradientUnits||"pixels",(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t,i){return this.set("fill",new e.Pattern(t,i))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},rotate:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,s(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors&&e.util.createAccessors(e.Object),i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,a){var s=e[t];i=r(i,!0),e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]),e.util.enlivenObjects([i.clipPath],function(t){i.clipPath=t[0];var e=a?new s(i[a],i):new s(i);n&&n(e)})})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this);!function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,a,s){var o,c,l,h=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof a?a=e[a]:a-=.5,o=a-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof s?s=i[s]:s-=.5,c=s-n,(o||c)&&(l=this._getTransformedDimensions(),h=t.x+o*l.x,u=t.y+c*l.y),new fabric.Point(h,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,a,s=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(s,"center","center",i,r):new fabric.Point(this.left,this.top),a=new fabric.Point(e.x,e.y),this.angle&&(a=fabric.util.rotatePoint(a,s,-t(this.angle))),a.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,a=t(this.angle),s=this.getScaledWidth(),o=fabric.util.cos(a)*s,c=fabric.util.sin(a)*s;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=o*(n-r),this.top+=c*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}();!function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices,r=fabric.util.transformPoint;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,ownMatrixCache:null,matrixCache:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),a=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===a.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,a=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);4>n;n++)if(!t.containsPoint(r[n],a))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),a=0;4>a;a++)if(e=n[a],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;return this.intersectsWithRect(i,r,!0,t)?!0:this._containsCenterOfCanvas(i,r,t)},_containsCenterOfCanvas:function(t,e,i){var r={x:(t.x+e.x)/2,y:(t.y+e.y)/2};return this.containsPoint(r,null,!0,i)?!0:!1},isPartiallyOnScreen:function(t){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return this.intersectsWithRect(e,i,!0,t)?!0:this._containsCenterOfCanvas(e,i,t)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,a,s,o,c=0;for(var l in e)if(o=e[l],!(o.o.y=t.y&&o.d.y>=t.y||(o.o.x===o.d.x&&o.o.x>=t.x?s=o.o.x:(i=0,r=(o.d.y-o.o.y)/(o.d.x-o.o.x),n=t.y-i*t.x,a=o.o.y-r*o.o.x,s=-(n-a)/(i-r)),s>=t.x&&(c+=1),2!==c)))break;return c},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)t?-this.minScaleLimit:this.minScaleLimit:0===t?1e-4:t},scale:function(t){return this._set("scaleX",t),this._set("scaleY",t),this.setCoords()},scaleToWidth:function(t,e){var i=this.getBoundingRect(e).width/this.getScaledWidth();return this.scale(t/this.width/i)},scaleToHeight:function(t,e){var i=this.getBoundingRect(e).height/this.getScaledHeight();return this.scale(t/this.height/i)},calcCoords:function(t){var n=this._calcRotateMatrix(),a=this._calcTranslateMatrix(),s=i(a,n),o=this.getViewportTransform(),c=t?s:i(o,s),l=this._getTransformedDimensions(),h=l.x/2,u=l.y/2,f=r({x:-h,y:-u},c),d=r({x:h,y:-u},c),p=r({x:-h,y:u},c),g=r({x:h,y:u},c);if(!t){var m=this.padding,v=e(this.angle),b=fabric.util.cos(v),y=fabric.util.sin(v),w=b*m,C=y*m,x=w+C,_=w-C;m&&(f.x-=_,f.y-=x,d.x+=x,d.y-=_,p.x-=x,p.y+=_,g.x+=_,g.y+=x);var O=new fabric.Point((f.x+p.x)/2,(f.y+p.y)/2),k=new fabric.Point((d.x+f.x)/2,(d.y+f.y)/2),S=new fabric.Point((g.x+d.x)/2,(g.y+d.y)/2),F=new fabric.Point((g.x+p.x)/2,(g.y+p.y)/2),P=new fabric.Point(k.x+y*this.rotatingPointOffset,k.y-b*this.rotatingPointOffset)}var T={tl:f,tr:d,br:g,bl:p};return t||(T.ml=O,T.mt=k,T.mr=S,T.mb=F,T.mtr=P),T},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){return fabric.util.calcRotateMatrix(this)},_calcTranslateMatrix:function(){var t=this.getCenterPoint();return[1,0,0,1,t.x,t.y]},transformMatrixKey:function(t){var e="_",i="";return!t&&this.group&&(i=this.group.transformMatrixKey(t)+e),i+this.top+e+this.left+e+this.scaleX+e+this.scaleY+e+this.skewX+e+this.skewY+e+this.angle+e+this.originX+e+this.originY+e+this.width+e+this.height+e+this.strokeWidth+this.flipX+this.flipY},calcTransformMatrix:function(t){if(t)return this.calcOwnMatrix();var e=this.transformMatrixKey(),r=this.matrixCache||(this.matrixCache={});if(r.key===e)return r.value;var n=this.calcOwnMatrix();return this.group&&(n=i(this.group.calcTransformMatrix(),n)),r.key=e,r.value=n,n},calcOwnMatrix:function(){var t=this.transformMatrixKey(!0),e=this.ownMatrixCache||(this.ownMatrixCache={});if(e.key===t)return e.value;var i=this._calcTranslateMatrix();return this.translateX=i[4],this.translateY=i[5],e.key=t,e.value=fabric.util.composeMatrix(this),e.value},_calcDimensionsTransformMatrix:function(t,e,i){return fabric.util.calcDimensionsMatrix({skewX:t,skewY:e,scaleX:this.scaleX*(i&&this.flipX?-1:1),scaleY:this.scaleY*(i&&this.flipY?-1:1)})},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),a=0===t&&0===e;if(this.strokeUniform?(i=this.width,r=this.height):(i=n.x,r=n.y),a)return this._finalizeDimensions(i*this.scaleX,r*this.scaleY);i/=2,r/=2;var s=[{x:-i,y:-r},{x:i,y:-r},{x:-i,y:r},{x:i,y:r}],o=fabric.util.calcDimensionsMatrix({scaleX:this.scaleX,scaleY:this.scaleY,skewX:t,skewY:e}),c=fabric.util.makeBoundingBoxFromPoints(s,o);return this._finalizeDimensions(c.width,c.height)},_finalizeDimensions:function(t,e){return this.strokeUniform?{x:t+this.strokeWidth,y:e+this.strokeWidth}:{x:t,y:e}},_calculateCurrentDimensions:function(){var t=this.getViewportTransform(),e=this._getTransformedDimensions(),i=fabric.util.transformPoint(e,t,!0);return i.scalarAdd(2*this.padding)}})}();fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas&&this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas&&this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas&&this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas&&this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group&&"activeSelection"!==this.group.type?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas&&this.canvas.moveTo(this,t),this}});!function(){function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new fabric.Color(e),r=t+": "+i.toRgb()+"; ",n=i.getAlpha();return 1!==n&&(r+=t+"-opacity: "+n.toString()+"; "),r}return t+": none; "}var e=fabric.util.toFixed;fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule?this.fillRule:"nonzero",r=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):"none",s=this.strokeDashOffset?this.strokeDashOffset:"0",a=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",c=this.strokeMiterLimit?this.strokeMiterLimit:"4",l="undefined"!=typeof this.opacity?this.opacity:"1",h=this.visible?"":" visibility: hidden;",u=e?"":this.getSvgFilter(),f=t("fill",this.fill),d=t("stroke",this.stroke);return[d,"stroke-width: ",r,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",a,"; ","stroke-dashoffset: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",c,"; ",f,"fill-rule: ",i,"; ","opacity: ",l,";",u,h].join("")},getSvgSpanStyles:function(e,i){var r="; ",n=e.fontFamily?"font-family: "+(-1===e.fontFamily.indexOf("'")&&-1===e.fontFamily.indexOf('"')?"'"+e.fontFamily+"'":e.fontFamily)+r:"",s=e.strokeWidth?"stroke-width: "+e.strokeWidth+r:"",n=n,a=e.fontSize?"font-size: "+e.fontSize+"px"+r:"",o=e.fontStyle?"font-style: "+e.fontStyle+r:"",c=e.fontWeight?"font-weight: "+e.fontWeight+r:"",l=e.fill?t("fill",e.fill):"",h=e.stroke?t("stroke",e.stroke):"",u=this.getSvgTextDecoration(e),f=e.deltaY?"baseline-shift: "+-e.deltaY+"; ":"";return u&&(u="text-decoration: "+u+r),[h,s,n,a,o,c,u,l,f,i?"white-space: pre; ":""].join("")},getSvgTextDecoration:function(t){return["overline","underline","line-through"].filter(function(e){return t[e.replace("-","")]}).join(" ")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgCommons:function(){return[this.id?'id="'+this.id+'" ':"",this.clipPath?'clip-path="url(#'+this.clipPath.clipPathId+')" ':""].join("")},getSvgTransform:function(t,e){var i=t?this.calcTransformMatrix():this.calcOwnMatrix(),r='transform="'+fabric.util.matrixToSVG(i);return r+(e||"")+this.getSvgTransformMatrix()+'" '},getSvgTransformMatrix:function(){return this.transformMatrix?" "+fabric.util.matrixToSVG(this.transformMatrix):""},_setSVGBg:function(t){if(this.backgroundColor){var i=fabric.Object.NUM_FRACTION_DIGITS;t.push(" \n')}},toSVG:function(t){return this._createBaseSVGMarkup(this._toSVG(t),{reviver:t})},toClipPathSVG:function(t){return" "+this._createBaseClipPathSVGMarkup(this._toSVG(t),{reviver:t})},_createBaseClipPathSVGMarkup:function(t,e){e=e||{};var i=e.reviver,r=e.additionalTransform||"",n=[this.getSvgTransform(!0,r),this.getSvgCommons()].join(""),s=t.indexOf("COMMON_PARTS");return t[s]=n,i?i(t.join("")):t.join("")},_createBaseSVGMarkup:function(t,e){e=e||{};var i,r,n=e.noStyle,s=e.reviver,a=n?"":'style="'+this.getSvgStyles()+'" ',o=e.withShadow?'style="'+this.getSvgFilter()+'" ':"",c=this.clipPath,l=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",h=c&&c.absolutePositioned,u=this.stroke,f=this.fill,d=this.shadow,p=[],g=t.indexOf("COMMON_PARTS"),v=e.additionalTransform;return c&&(c.clipPathId="CLIPPATH_"+fabric.Object.__uid++,r='\n'+c.toClipPathSVG(s)+"\n"),h&&p.push("\n"),p.push("\n"),i=[a,l,n?"":this.addPaintOrder()," ",v?'transform="'+v+'" ':""].join(""),t[g]=i,f&&f.toLive&&p.push(f.toSVG(this)),u&&u.toLive&&p.push(u.toSVG(this)),d&&p.push(d.toSVG(this)),c&&p.push(r),p.push(t.join("")),p.push("\n"),h&&p.push("\n"),s?s(p.join("")):p.join("")},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}();!function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i,r){if(t===i)return!0;if(Array.isArray(t)){if(!Array.isArray(i)||t.length!==i.length)return!1;for(var n=0,s=t.length;s>n;n++)if(!e(t[n],i[n]))return!1;return!0}if(t&&"object"==typeof t){var a,o=Object.keys(t);if(!i||"object"!=typeof i||!r&&o.length!==Object.keys(i).length)return!1;for(var n=0,s=o.length;s>n;n++)if(a=o[n],"canvas"!==a&&!e(t[a],i[a]))return!1;return!0}}var i=fabric.util.object.extend,r="stateProperties";fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(t){t=t||r;var i="_"+t;return Object.keys(this[i]).lengthr;r++)t=i[r],e=r!==n-1,this._animate(t,arguments[0][t],arguments[1],e)}else this._animate.apply(this,arguments);return this},_animate:function(t,e,i,r){var n,a=this;e=e.toString(),i=i?fabric.util.object.clone(i):{},~t.indexOf(".")&&(n=t.split("."));var s=n?this.get(n[0])[n[1]]:this.get(t);"from"in i||(i.from=s),e=~e.indexOf("=")?s+parseFloat(e.replace("=","")):parseFloat(e),fabric.util.animate({startValue:i.from,endValue:e,byValue:i.by,easing:i.easing,duration:i.duration,abort:i.abort&&function(){return i.abort.call(a)},onChange:function(e,s,o){n?a[n[0]][n[1]]=e:a.set(t,e),r||i.onChange&&i.onChange(e,s,o)},onComplete:function(t,e,n){r||(a.setCoords(),i.onComplete&&i.onComplete(t,e,n))}})}});!function(t){"use strict";function e(t,e){var i=t.origin,r=t.axis1,n=t.axis2,s=t.dimension,a=e.nearest,o=e.center,c=e.farthest;return function(){switch(this.get(i)){case a:return Math.min(this.get(r),this.get(n));case o:return Math.min(this.get(r),this.get(n))+.5*this.get(s);case c:return Math.max(this.get(r),this.get(n))}}}var i=t.fabric||(t.fabric={}),r=i.util.object.extend,n=i.util.object.clone,s={x1:1,x2:1,y1:1,y2:1},a=i.StaticCanvas.supports("setLineDash");return i.Line?void i.warn("fabric.Line is already defined"):(i.Line=i.util.createClass(i.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:i.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(t,e){t||(t=[0,0,0,0]),this.callSuper("initialize",e),this.set("x1",t[0]),this.set("y1",t[1]),this.set("x2",t[2]),this.set("y2",t[3]),this._setWidthHeight(e)},_setWidthHeight:function(t){t||(t={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in t?t.left:this._getLeftToOriginX(),this.top="top"in t?t.top:this._getTopToOriginY()},_set:function(t,e){return this.callSuper("_set",t,e),"undefined"!=typeof s[t]&&this._setWidthHeight(),this},_getLeftToOriginX:e({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:e({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(t){if(t.beginPath(),!this.strokeDashArray||this.strokeDashArray&&a){var e=this.calcLinePoints();t.moveTo(e.x1,e.y1),t.lineTo(e.x2,e.y2)}t.lineWidth=this.strokeWidth;var i=t.strokeStyle;t.strokeStyle=this.stroke||t.fillStyle,this.stroke&&this._renderStroke(t),t.strokeStyle=i},_renderDashedStroke:function(t){var e=this.calcLinePoints();t.beginPath(),i.util.drawDashedLine(t,e.x1,e.y1,e.x2,e.y2,this.strokeDashArray),t.closePath()},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(t){return r(this.callSuper("toObject",t),this.calcLinePoints())},_getNonTransformedDimensions:function(){var t=this.callSuper("_getNonTransformedDimensions");return"butt"===this.strokeLineCap&&(0===this.width&&(t.y-=this.strokeWidth),0===this.height&&(t.x-=this.strokeWidth)),t},calcLinePoints:function(){var t=this.x1<=this.x2?-1:1,e=this.y1<=this.y2?-1:1,i=t*this.width*.5,r=e*this.height*.5,n=t*this.width*-.5,s=e*this.height*-.5;return{x1:i,x2:n,y1:r,y2:s}},_toSVG:function(){var t=this.calcLinePoints();return["\n']}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e,n){n=n||{};var s=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),a=[s.x1||0,s.y1||0,s.x2||0,s.y2||0];e(new i.Line(a,r(s,n)))},void(i.Line.fromObject=function(t,e){function r(t){delete t.points,e&&e(t)}var s=n(t,!0);s.points=[t.x1,t.y1,t.x2,t.y2],i.Object._fromObject("Line",s,r,"points")}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI;return i.Circle?void i.warn("fabric.Circle is already defined."):(i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:i.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},_toSVG:function(){var t,e=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)t=["\n'];else{var a=i.util.cos(this.startAngle)*this.radius,o=i.util.sin(this.startAngle)*this.radius,c=i.util.cos(this.endAngle)*this.radius,l=i.util.sin(this.endAngle)*this.radius,h=s>r?"1":"0";t=['\n"]}return t},_render:function(t){t.beginPath(),t.arc(0,0,this.radius,this.startAngle,this.endAngle,!1),this._renderPaintInOrder(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){var n=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(n))throw new Error("value of `r` attribute is required and can not be negative");n.left=(n.left||0)-n.radius,n.top=(n.top||0)-n.radius,r(new i.Circle(n))},void(i.Circle.fromObject=function(t,e){return i.Object._fromObject("Circle",t,e)}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",width:100,height:100,_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderPaintInOrder(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},_toSVG:function(){var t=this.width/2,e=this.height/2,i=[-t+" "+e,"0 "+-e,t+" "+e].join(",");return["']}}),void(e.Triangle.fromObject=function(t,i){return e.Object._fromObject("Triangle",t,i)}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI;return e.Ellipse?void e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},_toSVG:function(){return["\n']},_render:function(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,0,this.rx,0,i,!1),t.restore(),this._renderPaintInOrder(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){var r=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);r.left=(r.left||0)-r.rx,r.top=(r.top||0)-r.ry,i(new e.Ellipse(r))},void(e.Ellipse.fromObject=function(t,i){return e.Object._fromObject("Ellipse",t,i)}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;return e.Rect?void e.warn("fabric.Rect is already defined"):(e.Rect=e.util.createClass(e.Object,{stateProperties:e.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t){var e=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,s=-this.width/2,a=-this.height/2,o=0!==e||0!==i,c=.4477152502;t.beginPath(),t.moveTo(s+e,a),t.lineTo(s+r-e,a),o&&t.bezierCurveTo(s+r-c*e,a,s+r,a+c*i,s+r,a+i),t.lineTo(s+r,a+n-i),o&&t.bezierCurveTo(s+r,a+n-c*i,s+r-c*e,a+n,s+r-e,a+n),t.lineTo(s+e,a+n),o&&t.bezierCurveTo(s+c*e,a+n,s,a+n-c*i,s,a+n-i),t.lineTo(s,a+i),o&&t.bezierCurveTo(s,a+c*i,s+c*e,a,s+e,a),t.closePath(),this._renderPaintInOrder(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},_toSVG:function(){var t=-this.width/2,e=-this.height/2;return["\n']}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r,n){if(!t)return r(null);n=n||{};var s=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);s.left=s.left||0,s.top=s.top||0,s.height=s.height||0,s.width=s.width||0;var a=new e.Rect(i(n?e.util.object.clone(n):{},s));a.visible=a.visible&&a.width>0&&a.height>0,r(a)},void(e.Rect.fromObject=function(t,i){return e.Object._fromObject("Rect",t,i)}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed;return e.Polyline?void e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,cacheProperties:e.Object.prototype.cacheProperties.concat("points"),initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._setPositionDimensions(e)},_setPositionDimensions:function(t){var e,i=this._calcDimensions(t);this.width=i.width,this.height=i.height,t.fromSVG||(e=this.translateToGivenOrigin({x:i.left-this.strokeWidth/2,y:i.top-this.strokeWidth/2},"left","top",this.originX,this.originY)),"undefined"==typeof t.left&&(this.left=t.fromSVG?i.left:e.x),"undefined"==typeof t.top&&(this.top=t.fromSVG?i.top:e.y),this.pathOffset={x:i.left+this.width/2,y:i.top+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x")||0,i=r(t,"y")||0,s=n(t,"x")||0,a=n(t,"y")||0,o=s-e,c=a-i;return{left:e,top:i,width:o,height:c}},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},_toSVG:function(){for(var t=[],i=this.pathOffset.x,r=this.pathOffset.y,n=e.Object.NUM_FRACTION_DIGITS,a=0,o=this.points.length;o>a;a++)t.push(s(this.points[a].x-i,n),",",s(this.points[a].y-r,n)," ");return["<"+this.type+" ","COMMON_PARTS",'points="',t.join(""),'" />\n']},commonRender:function(t){var e,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-r,this.points[0].y-n);for(var s=0;i>s;s++)e=this.points[s],t.lineTo(e.x-r,e.y-n);return!0},_render:function(t){this.commonRender(t)&&this._renderPaintInOrder(t)},_renderDashedStroke:function(t){var i,r;t.beginPath();for(var n=0,s=this.points.length;s>n;n++)i=this.points[n],r=this.points[n+1]||i,e.util.drawDashedLine(t,i.x,i.y,r.x,r.y,this.strokeDashArray)},complexity:function(){return this.get("points").length}}),e.Polyline.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat(),e.Polyline.fromElementGenerator=function(t){return function(r,n,s){if(!r)return n(null);s||(s={});var a=e.parsePointsAttribute(r.getAttribute("points")),o=e.parseAttributes(r,e[t].ATTRIBUTE_NAMES);o.fromSVG=!0,n(new e[t](a,i(o,s)))}},e.Polyline.fromElement=e.Polyline.fromElementGenerator("Polyline"),void(e.Polyline.fromObject=function(t,i){return e.Object._fromObject("Polyline",t,i,"points")}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Polygon?void e.warn("fabric.Polygon is already defined"):(e.Polygon=e.util.createClass(e.Polyline,{type:"polygon",_render:function(t){this.commonRender(t)&&(t.closePath(),this._renderPaintInOrder(t))},_renderDashedStroke:function(t){this.callSuper("_renderDashedStroke",t),t.closePath()}}),e.Polygon.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat(),e.Polygon.fromElement=e.Polyline.fromElementGenerator("Polygon"),void(e.Polygon.fromObject=function(t,i){return e.Object._fromObject("Polygon",t,i,"points")}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.array.min,r=e.util.array.max,n=e.util.object.extend,s=Object.prototype.toString,a=e.util.drawArc,o=e.util.toFixed,c={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},h={m:"l",M:"L"};return e.Path?void e.warn("fabric.Path is already defined"):(e.Path=e.util.createClass(e.Object,{type:"path",path:null,cacheProperties:e.Object.prototype.cacheProperties.concat("path","fillRule"),stateProperties:e.Object.prototype.stateProperties.concat("path"),initialize:function(t,i){i=i||{},this.callSuper("initialize",i),t||(t=[]);var r="[object Array]"===s.call(t);this.path=r?t:t.match&&t.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi),this.path&&(r||(this.path=this._parsePath()),e.Polyline.prototype._setPositionDimensions.call(this,i))},_renderPathCommands:function(t){var e,i,r,n=null,s=0,o=0,c=0,h=0,l=0,u=0,f=-this.pathOffset.x,d=-this.pathOffset.y;t.beginPath();for(var p=0,g=this.path.length;g>p;++p){switch(e=this.path[p],e[0]){case"l":c+=e[1],h+=e[2],t.lineTo(c+f,h+d);break;case"L":c=e[1],h=e[2],t.lineTo(c+f,h+d);break;case"h":c+=e[1],t.lineTo(c+f,h+d);break;case"H":c=e[1],t.lineTo(c+f,h+d);break;case"v":h+=e[1],t.lineTo(c+f,h+d);break;case"V":h=e[1],t.lineTo(c+f,h+d);break;case"m":c+=e[1],h+=e[2],s=c,o=h,t.moveTo(c+f,h+d);break;case"M":c=e[1],h=e[2],s=c,o=h,t.moveTo(c+f,h+d);break;case"c":i=c+e[5],r=h+e[6],l=c+e[3],u=h+e[4],t.bezierCurveTo(c+e[1]+f,h+e[2]+d,l+f,u+d,i+f,r+d),c=i,h=r;break;case"C":c=e[5],h=e[6],l=e[3],u=e[4],t.bezierCurveTo(e[1]+f,e[2]+d,l+f,u+d,c+f,h+d);break;case"s":i=c+e[3],r=h+e[4],null===n[0].match(/[CcSs]/)?(l=c,u=h):(l=2*c-l,u=2*h-u),t.bezierCurveTo(l+f,u+d,c+e[1]+f,h+e[2]+d,i+f,r+d),l=c+e[1],u=h+e[2],c=i,h=r;break;case"S":i=e[3],r=e[4],null===n[0].match(/[CcSs]/)?(l=c,u=h):(l=2*c-l,u=2*h-u),t.bezierCurveTo(l+f,u+d,e[1]+f,e[2]+d,i+f,r+d),c=i,h=r,l=e[1],u=e[2];break;case"q":i=c+e[3],r=h+e[4],l=c+e[1],u=h+e[2],t.quadraticCurveTo(l+f,u+d,i+f,r+d),c=i,h=r;break;case"Q":i=e[3],r=e[4],t.quadraticCurveTo(e[1]+f,e[2]+d,i+f,r+d),c=i,h=r,l=e[1],u=e[2];break;case"t":i=c+e[1],r=h+e[2],null===n[0].match(/[QqTt]/)?(l=c,u=h):(l=2*c-l,u=2*h-u),t.quadraticCurveTo(l+f,u+d,i+f,r+d),c=i,h=r;break;case"T":i=e[1],r=e[2],null===n[0].match(/[QqTt]/)?(l=c,u=h):(l=2*c-l,u=2*h-u),t.quadraticCurveTo(l+f,u+d,i+f,r+d),c=i,h=r;break;case"a":a(t,c+f,h+d,[e[1],e[2],e[3],e[4],e[5],e[6]+c+f,e[7]+h+d]),c+=e[6],h+=e[7];break;case"A":a(t,c+f,h+d,[e[1],e[2],e[3],e[4],e[5],e[6]+f,e[7]+d]),c=e[6],h=e[7];break;case"z":case"Z":c=s,h=o,t.closePath()}n=e}},_render:function(t){this._renderPathCommands(t),this._renderPaintInOrder(t)},toString:function(){return"#"},toObject:function(t){return n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()})})},toDatalessObject:function(t){var e=this.toObject(["sourcePath"].concat(t));return e.sourcePath&&delete e.path,e},_toSVG:function(){var t=this.path.map(function(t){return t.join(" ")}).join(" ");return["\n"]},_getOffsetTransform:function(){var t=e.Object.NUM_FRACTION_DIGITS;return" translate("+o(-this.pathOffset.x,t)+", "+o(-this.pathOffset.y,t)+")"},toClipPathSVG:function(t){var e=this._getOffsetTransform();return" "+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})},toSVG:function(t){var e=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})},complexity:function(){return this.path.length},_parsePath:function(){for(var t,i,r,n,s,a=[],o=[],l=e.rePathCommand,u=0,f=this.path.length;f>u;u++){for(t=this.path[u],n=t.slice(1).trim(),o.length=0;r=l.exec(n);)o.push(r[0]);s=[t.charAt(0)];for(var d=0,p=o.length;p>d;d++)i=parseFloat(o[d]),isNaN(i)||s.push(i);var g=s[0],b=c[g.toLowerCase()],v=h[g]||g;if(s.length-1>b)for(var m=1,y=s.length;y>m;m+=b)a.push([g].concat(s.slice(m,m+b))),g=v;else a.push(s)}return a},_calcDimensions:function(){for(var t,n,s,a,o=[],c=[],h=null,l=0,u=0,f=0,d=0,p=0,g=0,b=0,v=this.path.length;v>b;++b){switch(t=this.path[b],t[0]){case"l":f+=t[1],d+=t[2],a=[];break;case"L":f=t[1],d=t[2],a=[];break;case"h":f+=t[1],a=[];break;case"H":f=t[1],a=[];break;case"v":d+=t[1],a=[];break;case"V":d=t[1],a=[];break;case"m":f+=t[1],d+=t[2],l=f,u=d,a=[];break;case"M":f=t[1],d=t[2],l=f,u=d,a=[];break;case"c":n=f+t[5],s=d+t[6],p=f+t[3],g=d+t[4],a=e.util.getBoundsOfCurve(f,d,f+t[1],d+t[2],p,g,n,s),f=n,d=s;break;case"C":p=t[3],g=t[4],a=e.util.getBoundsOfCurve(f,d,t[1],t[2],p,g,t[5],t[6]),f=t[5],d=t[6];break;case"s":n=f+t[3],s=d+t[4],null===h[0].match(/[CcSs]/)?(p=f,g=d):(p=2*f-p,g=2*d-g),a=e.util.getBoundsOfCurve(f,d,p,g,f+t[1],d+t[2],n,s),p=f+t[1],g=d+t[2],f=n,d=s;break;case"S":n=t[3],s=t[4],null===h[0].match(/[CcSs]/)?(p=f,g=d):(p=2*f-p,g=2*d-g),a=e.util.getBoundsOfCurve(f,d,p,g,t[1],t[2],n,s),f=n,d=s,p=t[1],g=t[2];break;case"q":n=f+t[3],s=d+t[4],p=f+t[1],g=d+t[2],a=e.util.getBoundsOfCurve(f,d,p,g,p,g,n,s),f=n,d=s;break;case"Q":p=t[1],g=t[2],a=e.util.getBoundsOfCurve(f,d,p,g,p,g,t[3],t[4]),f=t[3],d=t[4];break;case"t":n=f+t[1],s=d+t[2],null===h[0].match(/[QqTt]/)?(p=f,g=d):(p=2*f-p,g=2*d-g),a=e.util.getBoundsOfCurve(f,d,p,g,p,g,n,s),f=n,d=s;break;case"T":n=t[1],s=t[2],null===h[0].match(/[QqTt]/)?(p=f,g=d):(p=2*f-p,g=2*d-g),a=e.util.getBoundsOfCurve(f,d,p,g,p,g,n,s),f=n,d=s;break;case"a":a=e.util.getBoundsOfArc(f,d,t[1],t[2],t[3],t[4],t[5],t[6]+f,t[7]+d),f+=t[6],d+=t[7];break;case"A":a=e.util.getBoundsOfArc(f,d,t[1],t[2],t[3],t[4],t[5],t[6],t[7]),f=t[6],d=t[7];break;case"z":case"Z":f=l,d=u}h=t,a.forEach(function(t){o.push(t.x),c.push(t.y)}),o.push(f),c.push(d)}var m=i(o)||0,y=i(c)||0,C=r(o)||0,x=r(c)||0,w=C-m,_=x-y;return{left:m,top:y,width:w,height:_}}}),e.Path.fromObject=function(t,i){if("string"==typeof t.sourcePath){var r=t.sourcePath;e.loadSVGFromURL(r,function(e){var r=e[0];r.setOptions(t),i&&i(r)})}else e.Object._fromObject("Path",t,i,"path")},e.Path.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat(["d"]),void(e.Path.fromElement=function(t,i,r){var s=e.parseAttributes(t,e.Path.ATTRIBUTE_NAMES);s.fromSVG=!0,i(new e.Path(s.d,n(s,r)))}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.array.min,r=e.util.array.max;e.Group||(e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],useSetOnGroup:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;if(i)this._updateObjectsACoords();else{var n=e&&e.centerPoint;void 0!==e.originX&&(this.originX=e.originX),void 0!==e.originY&&(this.originY=e.originY),n||this._calcBounds(),this._updateObjectsCoords(n),delete e.centerPoint,this.callSuper("initialize",e)}this.setCoords()},_updateObjectsACoords:function(){for(var t=!0,e=!0,i=this._objects.length;i--;)this._objects[i].setCoords(t,e)},_updateObjectsCoords:function(t){for(var t=t||this.getCenterPoint(),e=this._objects.length;e--;)this._updateObjectCoords(this._objects[e],t)},_updateObjectCoords:function(t,e){var i=t.left,r=t.top,n=!0,s=!0;t.set({left:i-e.x,top:r-e.y}),t.group=this,t.setCoords(n,s)},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,i){var r=this._objects.length;if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(t,i);if("canvas"===t)for(;r--;)this._objects[r]._set(t,i);e.Object.prototype._set.call(this,t,i)},toObject:function(t){var i=this.includeDefaultValues,r=this._objects.map(function(e){var r=e.includeDefaultValues;e.includeDefaultValues=i;var n=e.toObject(t);return e.includeDefaultValues=r,n}),n=e.Object.prototype.toObject.call(this,t);return n.objects=r,n},toDatalessObject:function(t){var i,r=this.sourcePath;if(r)i=r;else{var n=this.includeDefaultValues;i=this._objects.map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=n;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r})}var s=e.Object.prototype.toDatalessObject.call(this,t);return s.objects=i,s},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=e.Object.prototype.shouldCache.call(this);if(t)for(var i=0,r=this._objects.length;r>i;i++)if(this._objects[i].willDrawShadow())return this.ownCaching=!1,!1;return t},willDrawShadow:function(){if(e.Object.prototype.willDrawShadow.call(this))return!0;for(var t=0,i=this._objects.length;i>t;t++)if(this._objects[t].willDrawShadow())return!0;return!1},isOnACache:function(){return this.ownCaching||this.group&&this.group.isOnACache()},drawObject:function(t){for(var e=0,i=this._objects.length;i>e;e++)this._objects[e].render(t);this._drawClipPath(t)},isCacheDirty:function(t){if(this.callSuper("isCacheDirty",t))return!0;if(!this.statefullCache)return!1;for(var e=0,i=this._objects.length;i>e;e++)if(this._objects[e].isCacheDirty(!0)){if(this._cacheCanvas){var r=this.cacheWidth/this.zoomX,n=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-r/2,-n/2,r,n)}return!0}return!1},_restoreObjectsState:function(){return this._objects.forEach(this._restoreObjectState,this),this},realizeTransform:function(t){var i=t.calcTransformMatrix(),r=e.util.qrDecompose(i),n=new e.Point(r.translateX,r.translateY);return t.flipX=!1,t.flipY=!1,t.set("scaleX",r.scaleX),t.set("scaleY",r.scaleY),t.skewX=r.skewX,t.skewY=r.skewY,t.angle=r.angle,t.setPositionByOrigin(n,"center","center"),t},_restoreObjectState:function(t){return this.realizeTransform(t),t.setCoords(),delete t.group,this},destroy:function(){return this._objects.forEach(function(t){t.set("dirty",!0)}),this._restoreObjectsState()},toActiveSelection:function(){if(this.canvas){var t=this._objects,i=this.canvas;this._objects=[];var r=this.toObject();delete r.objects;var n=new e.ActiveSelection([]);return n.set(r),n.type="activeSelection",i.remove(this),t.forEach(function(t){t.group=n,t.dirty=!0,i.add(t)}),n.canvas=i,n._objects=t,i._activeObject=n,n.setCoords(),n}},ungroupOnCanvas:function(){return this._restoreObjectsState()},setObjectsCoords:function(){var t=!0,e=!0;return this.forEachObject(function(i){i.setCoords(t,e)}),this},_calcBounds:function(t){for(var e,i,r,n=[],s=[],a=["tr","br","bl","tl"],o=0,c=this._objects.length,h=a.length,l=!0;c>o;++o)for(e=this._objects[o],e.setCoords(l),r=0;h>r;r++)i=a[r],n.push(e.oCoords[i].x),s.push(e.oCoords[i].y);this._getBounds(n,s,t)},_getBounds:function(t,n,s){var a=new e.Point(i(t),i(n)),o=new e.Point(r(t),r(n)),c=a.y||0,h=a.x||0,l=o.x-a.x||0,u=o.y-a.y||0;this.width=l,this.height=u,s||this.setPositionByOrigin({x:h,y:c},"left","top")},_toSVG:function(t){for(var e=["\n"],i=0,r=this._objects.length;r>i;i++)e.push(" ",this._objects[i].toSVG(t));return e.push("\n"),e},getSvgStyles:function(){var t="undefined"!=typeof this.opacity&&1!==this.opacity?"opacity: "+this.opacity+";":"",e=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),e].join("")},toClipPathSVG:function(t){for(var e=[],i=0,r=this._objects.length;r>i;i++)e.push(" ",this._objects[i].toClipPathSVG(t));return this._createBaseClipPathSVGMarkup(e,{reviver:t})}}),e.Group.fromObject=function(t,i){var r=t.objects,n=e.util.object.clone(t,!0);return delete n.objects,"string"==typeof r?void e.loadSVGFromURL(r,function(s){var a=e.util.groupSVGElements(s,t,r);a.set(n),i&&i(a)}):void e.util.enlivenObjects(r,function(r){e.util.enlivenObjects([t.clipPath],function(n){var s=e.util.object.clone(t,!0);s.clipPath=n[0],delete s.objects,i&&i(new e.Group(r,s,!0))})})})}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={});e.ActiveSelection||(e.ActiveSelection=e.util.createClass(e.Group,{type:"activeSelection",initialize:function(t,i){i=i||{},this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;i.originX&&(this.originX=i.originX),i.originY&&(this.originY=i.originY),this._calcBounds(),this._updateObjectsCoords(),e.Object.prototype.initialize.call(this,i),this.setCoords()},toGroup:function(){var t=this._objects.concat();this._objects=[];var i=e.Object.prototype.toObject.call(this),r=new e.Group([]);if(delete i.type,r.set(i),t.forEach(function(t){t.canvas.remove(t),t.group=r}),r._objects=t,!this.canvas)return r;var n=this.canvas;return n.add(r),n._activeObject=r,r.setCoords(),r},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(t,e,i){t.save(),t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",t,e),i=i||{},"undefined"==typeof i.hasControls&&(i.hasControls=!1),"undefined"==typeof i.hasRotatingPoint&&(i.hasRotatingPoint=!1),i.forActiveSelection=!0;for(var r=0,n=this._objects.length;n>r;r++)this._objects[r]._renderControls(t,i);t.restore()}}),e.ActiveSelection.fromObject=function(t,i){e.util.enlivenObjects(t.objects,function(r){delete t.objects,i&&i(new e.ActiveSelection(r,t,!0))})})}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=fabric.util.object.extend;return t.fabric||(t.fabric={}),t.fabric.Image?void fabric.warn("fabric.Image is already defined."):(fabric.Image=fabric.util.createClass(fabric.Object,{type:"image",crossOrigin:"",strokeWidth:0,srcFromAttribute:!1,_lastScaleX:1,_lastScaleY:1,_filterScalingX:1,_filterScalingY:1,minimumScaleTrigger:.5,stateProperties:fabric.Object.prototype.stateProperties.concat("cropX","cropY"),cacheKey:"",cropX:0,cropY:0,initialize:function(t,e){e||(e={}),this.filters=[],this.cacheKey="texture"+fabric.Object.__uid++,this.callSuper("initialize",e),this._initElement(t,e)},getElement:function(){return this._element||{}},setElement:function(t,e){return this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._element=t,this._originalElement=t,this._initConfig(e),0!==this.filters.length&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters(),this},removeTexture:function(t){var e=fabric.filterBackend;e&&e.evictCachesForKey&&e.evictCachesForKey(t)},dispose:function(){this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._cacheContext=void 0,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach(function(t){fabric.util.cleanUpJsdomNode(this[t]),this[t]=void 0}.bind(this))},setCrossOrigin:function(t){return this.crossOrigin=t,this._element.crossOrigin=t,this},getOriginalSize:function(){var t=this.getElement();return{width:t.naturalWidth||t.width,height:t.naturalHeight||t.height}},_stroke:function(t){if(this.stroke&&0!==this.strokeWidth){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,-i),t.lineTo(e,-i),t.lineTo(e,i),t.lineTo(-e,i),t.lineTo(-e,-i),t.closePath()}},_renderDashedStroke:function(t){var e=-this.width/2,i=-this.height/2,r=this.width,n=this.height;t.save(),this._setStrokeStyles(t,this),t.beginPath(),fabric.util.drawDashedLine(t,e,i,e+r,i,this.strokeDashArray),fabric.util.drawDashedLine(t,e+r,i,e+r,i+n,this.strokeDashArray),fabric.util.drawDashedLine(t,e+r,i+n,e,i+n,this.strokeDashArray),fabric.util.drawDashedLine(t,e,i+n,e,i,this.strokeDashArray),t.closePath(),t.restore()},toObject:function(t){var i=[];this.filters.forEach(function(t){t&&i.push(t.toObject())});var r=e(this.callSuper("toObject",["crossOrigin","cropX","cropY"].concat(t)),{src:this.getSrc(),filters:i});return this.resizeFilter&&(r.resizeFilter=this.resizeFilter.toObject()),r},hasCrop:function(){return this.cropX||this.cropY||this.width\n',' \n',"\n"),s=' clip-path="url(#imageCrop_'+a+')" '}if(i.push(" \n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,t=[" \n'],this.fill=o}return e="fill"!==this.paintFirst?e.concat(t,i):e.concat(i,t)},getSrc:function(t){var e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():this.srcFromAttribute?e.getAttribute("src"):e.src:this.src||""},setSrc:function(t,e,i){return fabric.util.loadImage(t,function(t){this.setElement(t,i),this._setWidthHeight(),e&&e(this)},this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var t=this.resizeFilter,e=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),r=i.scaleX,n=i.scaleY,s=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!t||r>e&&n>e)return this._element=s,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=r,void(this._lastScaleY=n);fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend());var a=fabric.util.createCanvasElement(),o=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,c=s.width,h=s.height;a.width=c,a.height=h,this._element=a,this._lastScaleX=t.scaleX=r,this._lastScaleY=t.scaleY=n,fabric.filterBackend.applyFilters([t],s,c,h,this._element,o),this._filterScalingX=a.width/this._originalElement.width,this._filterScalingY=a.height/this._originalElement.height},applyFilters:function(t){if(t=t||this.filters||[],t=t.filter(function(t){return t&&!t.isNeutralState()}),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),0===t.length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var e=this._originalElement,i=e.naturalWidth||e.width,r=e.naturalHeight||e.height;if(this._element===this._originalElement){var n=fabric.util.createCanvasElement();n.width=i,n.height=r,this._element=n,this._filteredEl=n}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,r),this._lastScaleX=1,this._lastScaleY=1;return fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend()),fabric.filterBackend.applyFilters(t,this._originalElement,i,r,this._element,this.cacheKey),(this._originalElement.width!==this._element.width||this._originalElement.height!==this._element.height)&&(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(t){this.isMoving!==!0&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(t),this._renderPaintInOrder(t)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(t){var e=this._element;if(e){var i=this._filterScalingX,r=this._filterScalingY,n=this.width,s=this.height,a=Math.min,o=Math.max,c=o(this.cropX,0),h=o(this.cropY,0),l=e.naturalWidth||e.width,u=e.naturalHeight||e.height,f=c*i,d=h*r,p=a(n*i,l-f),g=a(s*r,u-d),b=-n/2,v=-s/2,m=a(n,l/i-c),y=a(s,u/i-h);e&&t.drawImage(e,f,d,p,g,b,v,m,y)}},_needsResize:function(){var t=this.getTotalObjectScaling();return t.scaleX!==this._lastScaleX||t.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(t,e){this.setElement(fabric.util.getById(t),e),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(t,e){t&&t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){t||(t={});var e=this.getElement();this.width=t.width||e.naturalWidth||e.width||0,this.height=t.height||e.naturalHeight||e.height||0},parsePreserveAspectRatioAttribute:function(){var t,e=fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,s=1,a=0,o=0,c=0,h=0,l=this.width,u=this.height,f={width:l,height:u};return!e||"none"===e.alignX&&"none"===e.alignY?(n=l/i,s=u/r):("meet"===e.meetOrSlice&&(n=s=fabric.util.findScaleToFit(this._element,f),t=(l-i*n)/2,"Min"===e.alignX&&(a=-t),"Max"===e.alignX&&(a=t),t=(u-r*s)/2,"Min"===e.alignY&&(o=-t),"Max"===e.alignY&&(o=t)),"slice"===e.meetOrSlice&&(n=s=fabric.util.findScaleToCover(this._element,f),t=i-l/n,"Mid"===e.alignX&&(c=t/2),"Max"===e.alignX&&(c=t),t=r-u/s,"Mid"===e.alignY&&(h=t/2),"Max"===e.alignY&&(h=t),i=l/n,r=u/s)),{width:i,height:r,scaleX:n,scaleY:s,offsetLeft:a,offsetTop:o,cropX:c,cropY:h}}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(t,e){var i=fabric.util.object.clone(t);fabric.util.loadImage(i.src,function(t,r){return r?void(e&&e(null,r)):void fabric.Image.prototype._initFilters.call(i,i.filters,function(r){i.filters=r||[],fabric.Image.prototype._initFilters.call(i,[i.resizeFilter],function(r){i.resizeFilter=r[0],fabric.util.enlivenObjects([i.clipPath],function(r){i.clipPath=r[0];var n=new fabric.Image(t,i);e(n)})})})},null,i.crossOrigin)},fabric.Image.fromURL=function(t,e,i){fabric.util.loadImage(t,function(t){e&&e(new fabric.Image(t,i))},null,i&&i.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin".split(" ")),void(fabric.Image.fromElement=function(t,i,r){var n=fabric.parseAttributes(t,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(n["xlink:href"],i,e(r?fabric.util.object.clone(r):{},n))}))}("undefined"!=typeof exports?exports:this);fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.angle%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.rotate(t),r()},onComplete:function(){n.setCoords(),i()}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.requestRenderAllBound}),this}});function resizeCanvasIfNeeded(t){var e=t.targetCanvas,i=e.width,r=e.height,n=t.destinationWidth,s=t.destinationHeight;(i!==n||r!==s)&&(e.width=n,e.height=s)}function copyGLTo2DDrawImage(t,e){var i=t.canvas,r=e.targetCanvas,n=r.getContext("2d");n.translate(0,r.height),n.scale(1,-1);var s=i.height-r.height;n.drawImage(i,0,s,r.width,r.height,0,0,r.width,r.height)}function copyGLTo2DPutImageData(t,e){var i=e.targetCanvas,r=i.getContext("2d"),n=e.destinationWidth,s=e.destinationHeight,a=n*s*4,o=new Uint8Array(this.imageBuffer,0,a),c=new Uint8ClampedArray(this.imageBuffer,0,a);t.readPixels(0,0,n,s,t.RGBA,t.UNSIGNED_BYTE,o);var h=new ImageData(c,n,s);r.putImageData(h,0,0)}!function(){"use strict";function t(t,e){var i="precision "+e+" float;\nvoid main(){}",r=t.createShader(t.FRAGMENT_SHADER);return t.shaderSource(r,i),t.compileShader(r),t.getShaderParameter(r,t.COMPILE_STATUS)?!0:!1}function e(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}fabric.isWebglSupported=function(e){if(fabric.isLikelyNode)return!1;e=e||fabric.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),n=!1;if(r){fabric.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),n=fabric.maxTextureSize>=e;for(var s=["highp","mediump","lowp"],a=0;3>a;a++)if(t(r,s[a])){fabric.webGlPrecision=s[a];break}}return this.isSupported=n,n},fabric.WebglFilterBackend=e,e.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,r="undefined"!=typeof window.performance;try{new ImageData(1,1),i=!0}catch(n){i=!1}var s="undefined"!=typeof ArrayBuffer,a="undefined"!=typeof Uint8ClampedArray;if(r&&i&&s&&a){var o=fabric.util.createCanvasElement(),c=new ArrayBuffer(t*e*4);if(fabric.forceGLPutImageData)return this.imageBuffer=c,void(this.copyGLTo2D=copyGLTo2DPutImageData);var h,l,u,f={imageBuffer:c,destinationWidth:t,destinationHeight:e,targetCanvas:o};o.width=t,o.height=e,h=window.performance.now(),copyGLTo2DDrawImage.call(f,this.gl,f),l=window.performance.now()-h,h=window.performance.now(),copyGLTo2DPutImageData.call(f,this.gl,f),u=window.performance.now()-h,l>u?(this.imageBuffer=c,this.copyGLTo2D=copyGLTo2DPutImageData):this.copyGLTo2D=copyGLTo2DDrawImage}},createWebGLCanvas:function(t,e){var i=fabric.util.createCanvasElement();i.width=t,i.height=e;var r={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(t,e,i,r,n,s){var a,o=this.gl;s&&(a=this.getCachedTexture(s,e));var c={originalWidth:e.width||e.originalWidth,originalHeight:e.height||e.originalHeight,sourceWidth:i,sourceHeight:r,destinationWidth:i,destinationHeight:r,context:o,sourceTexture:this.createTexture(o,i,r,!a&&e),targetTexture:this.createTexture(o,i,r),originalTexture:a||this.createTexture(o,i,r,!a&&e),passes:t.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},h=o.createFramebuffer();return o.bindFramebuffer(o.FRAMEBUFFER,h),t.forEach(function(t){t&&t.applyTo(c)}),resizeCanvasIfNeeded(c),this.copyGLTo2D(o,c),o.bindTexture(o.TEXTURE_2D,null),o.deleteTexture(c.sourceTexture),o.deleteTexture(c.targetTexture),o.deleteFramebuffer(h),n.getContext("2d").setTransform(1,0,0,1,0,0),c},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(t,e,i,r){var n=t.createTexture();return t.bindTexture(t.TEXTURE_2D,n),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),r?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r):t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,i,0,t.RGBA,t.UNSIGNED_BYTE,null),n},getCachedTexture:function(t,e){if(this.textureCache[t])return this.textureCache[t];var i=this.createTexture(this.gl,e.width,e.height,e);return this.textureCache[t]=i,i},evictCachesForKey:function(t){this.textureCache[t]&&(this.gl.deleteTexture(this.textureCache[t]),delete this.textureCache[t])},copyGLTo2D:copyGLTo2DDrawImage,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var t=this.gl,e={renderer:"",vendor:""};if(!t)return e;var i=t.getExtension("WEBGL_debug_renderer_info");if(i){var r=t.getParameter(i.UNMASKED_RENDERER_WEBGL),n=t.getParameter(i.UNMASKED_VENDOR_WEBGL);r&&(e.renderer=r.toLowerCase()),n&&(e.vendor=n.toLowerCase())}return this.gpuInfo=e,e}}}();!function(){"use strict";function t(){}var e=function(){};fabric.Canvas2dFilterBackend=t,t.prototype={evictCachesForKey:e,dispose:e,clearWebGLCaches:e,resources:{},applyFilters:function(t,e,i,r,n){var s=n.getContext("2d");s.drawImage(e,0,0,i,r);var a=s.getImageData(0,0,i,r),o=s.getImageData(0,0,i,r),c={sourceWidth:i,sourceHeight:r,imageData:a,originalEl:e,originalImageData:o,canvasEl:n,ctx:s,filterBackend:this};return t.forEach(function(t){t.applyTo(c)}),(c.imageData.width!==i||c.imageData.height!==r)&&(n.width=c.imageData.width,n.height=c.imageData.height),s.putImageData(c.imageData,0,0),c}}}();fabric.Image=fabric.Image||{},fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},createProgram:function(t,e,i){e=e||this.fragmentSource,i=i||this.vertexSource,"highp"!==fabric.webGlPrecision&&(e=e.replace(/precision highp float/g,"precision "+fabric.webGlPrecision+" float"));var r=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(r,i),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+t.getShaderInfoLog(r));var n=t.createShader(t.FRAGMENT_SHADER);if(t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+t.getShaderInfoLog(n));var s=t.createProgram();if(t.attachShader(s,r),t.attachShader(s,n),t.linkProgram(s),!t.getProgramParameter(s,t.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+t.getProgramInfoLog(s));var a=this.getAttributeLocations(t,s),o=this.getUniformLocations(t,s)||{};return o.uStepW=t.getUniformLocation(s,"uStepW"),o.uStepH=t.getUniformLocation(s,"uStepH"),{program:s,attributeLocations:a,uniformLocations:o}},getAttributeLocations:function(t,e){return{aPosition:t.getAttribLocation(e,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(t,e,i){var r=e.aPosition,n=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,n),t.enableVertexAttribArray(r),t.vertexAttribPointer(r,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)},_setupFrameBuffer:function(t){var e,i,r=t.context;t.passes>1?(e=t.destinationWidth,i=t.destinationHeight,(t.sourceWidth!==e||t.sourceHeight!==i)&&(r.deleteTexture(t.targetTexture),t.targetTexture=t.filterBackend.createTexture(r,e,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(t){t.passes--,t.pass++;var e=t.targetTexture;t.targetTexture=t.sourceTexture,t.sourceTexture=e},isNeutralState:function(){var t=this.mainParameter,e=fabric.Image.filters[this.type].prototype;if(t){if(Array.isArray(e[t])){for(var i=e[t].length;i--;)if(this[t][i]!==e[t][i])return!1;return!0}return e[t]===this[t]}return!1},applyTo:function(t){t.webgl?(this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},retrieveShader:function(t){return t.programCache.hasOwnProperty(this.type)||(t.programCache[this.type]=this.createProgram(t.context)),t.programCache[this.type]},applyToWebGL:function(t){var e=t.context,i=this.retrieveShader(t);0===t.pass&&t.originalTexture?e.bindTexture(e.TEXTURE_2D,t.originalTexture):e.bindTexture(e.TEXTURE_2D,t.sourceTexture),e.useProgram(i.program),this.sendAttributeData(e,i.attributeLocations,t.aPosition),e.uniform1f(i.uniformLocations.uStepW,1/t.sourceWidth),e.uniform1f(i.uniformLocations.uStepH,1/t.sourceHeight),this.sendUniformData(e,i.uniformLocations),e.viewport(0,0,t.destinationWidth,t.destinationHeight),e.drawArrays(e.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(t,e,i){t.activeTexture(i),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE0)},unbindAdditionalTexture:function(t,e){t.activeTexture(e),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(t){this[this.mainParameter]=t},sendUniformData:function(){},createHelpLayer:function(t){if(!t.helpLayer){var e=document.createElement("canvas");e.width=t.sourceWidth,e.height=t.sourceHeight,t.helpLayer=e}},toObject:function(){var t={type:this.type},e=this.mainParameter;return e&&(t[e]=this[e]),t},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i};!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},applyTo2d:function(t){var e,i,r,n,s,a=t.imageData,o=a.data,c=o.length,h=this.matrix,l=this.colorsOnly;for(s=0;c>s;s+=4)e=o[s],i=o[s+1],r=o[s+2],l?(o[s]=e*h[0]+i*h[1]+r*h[2]+255*h[4],o[s+1]=e*h[5]+i*h[6]+r*h[7]+255*h[9],o[s+2]=e*h[10]+i*h[11]+r*h[12]+255*h[14]):(n=o[s+3],o[s]=e*h[0]+i*h[1]+r*h[2]+n*h[3]+255*h[4],o[s+1]=e*h[5]+i*h[6]+r*h[7]+n*h[8]+255*h[9],o[s+2]=e*h[10]+i*h[11]+r*h[12]+n*h[13]+255*h[14],o[s+3]=e*h[15]+i*h[16]+r*h[17]+n*h[18]+255*h[19])},getUniformLocations:function(t,e){return{uColorMatrix:t.getUniformLocation(e,"uColorMatrix"),uConstants:t.getUniformLocation(e,"uConstants")}},sendUniformData:function(t,e){var i=this.matrix,r=[i[0],i[1],i[2],i[3],i[5],i[6],i[7],i[8],i[10],i[11],i[12],i[13],i[15],i[16],i[17],i[18]],n=[i[4],i[9],i[14],i[19]];t.uniformMatrix4fv(e.uColorMatrix,!1,r),t.uniform4fv(e.uConstants,n)}}),e.Image.filters.ColorMatrix.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Brightness=r(i.BaseFilter,{type:"Brightness",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uBrightness;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor.rgb += uBrightness;\ngl_FragColor = color;\n}",brightness:0,mainParameter:"brightness",applyTo2d:function(t){if(0!==this.brightness){var e,i=t.imageData,r=i.data,n=r.length,s=Math.round(255*this.brightness);for(e=0;n>e;e+=4)r[e]=r[e]+s,r[e+1]=r[e+1]+s,r[e+2]=r[e+2]+s}},getUniformLocations:function(t,e){return{uBrightness:t.getUniformLocation(e,"uBrightness")}},sendUniformData:function(t,e){t.uniform1f(e.uBrightness,this.brightness)}}),e.Image.filters.Brightness.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Convolute=n(r.BaseFilter,{type:"Convolute",opaque:!1,matrix:[0,0,0,0,1,0,0,0,0],fragmentSource:{Convolute_3_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[9];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 3.0; h+=1.0) {\nfor (float w = 0.0; w < 3.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_3_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[9];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 3.0; h+=1.0) {\nfor (float w = 0.0; w < 3.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_5_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[25];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 5.0; h+=1.0) {\nfor (float w = 0.0; w < 5.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_5_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[25];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 5.0; h+=1.0) {\nfor (float w = 0.0; w < 5.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_7_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[49];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 7.0; h+=1.0) {\nfor (float w = 0.0; w < 7.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_7_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[49];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 7.0; h+=1.0) {\nfor (float w = 0.0; w < 7.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_9_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[81];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 9.0; h+=1.0) {\nfor (float w = 0.0; w < 9.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_9_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[81];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 9.0; h+=1.0) {\nfor (float w = 0.0; w < 9.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}"},retrieveShader:function(t){var e=Math.sqrt(this.matrix.length),i=this.type+"_"+e+"_"+(this.opaque?1:0),r=this.fragmentSource[i];return t.programCache.hasOwnProperty(i)||(t.programCache[i]=this.createProgram(t.context,r)),t.programCache[i]},applyTo2d:function(t){var e,i,r,n,s,o,a,c,h,l,u,f,d,g=t.imageData,p=g.data,v=this.matrix,b=Math.round(Math.sqrt(v.length)),m=Math.floor(b/2),y=g.width,_=g.height,x=t.ctx.createImageData(y,_),C=x.data,w=this.opaque?1:0;for(u=0;_>u;u++)for(l=0;y>l;l++){for(s=4*(u*y+l),e=0,i=0,r=0,n=0,d=0;b>d;d++)for(f=0;b>f;f++)a=u+d-m,o=l+f-m,0>a||a>=_||0>o||o>=y||(c=4*(a*y+o),h=v[d*b+f],e+=p[c]*h,i+=p[c+1]*h,r+=p[c+2]*h,w||(n+=p[c+3]*h));C[s]=e,C[s+1]=i,C[s+2]=r,C[s+3]=w?p[s+3]:n}t.imageData=x},getUniformLocations:function(t,e){return{uMatrix:t.getUniformLocation(e,"uMatrix"),uOpaque:t.getUniformLocation(e,"uOpaque"),uHalfSize:t.getUniformLocation(e,"uHalfSize"),uSize:t.getUniformLocation(e,"uSize")}},sendUniformData:function(t,e){t.uniform1fv(e.uMatrix,this.matrix)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(t){var e,i,r=t.imageData,n=r.data,s=n.length,o=this.mode;for(e=0;s>e;e+=4)"average"===o?i=(n[e]+n[e+1]+n[e+2])/3:"lightness"===o?i=(Math.min(n[e],n[e+1],n[e+2])+Math.max(n[e],n[e+1],n[e+2]))/2:"luminosity"===o&&(i=.21*n[e]+.72*n[e+1]+.07*n[e+2]),n[e]=i,n[e+1]=i,n[e+2]=i},retrieveShader:function(t){var e=this.type+"_"+this.mode;if(!t.programCache.hasOwnProperty(e)){var i=this.fragmentSource[this.mode];t.programCache[e]=this.createProgram(t.context,i)}return t.programCache[e]},getUniformLocations:function(t,e){return{uMode:t.getUniformLocation(e,"uMode")}},sendUniformData:function(t,e){var i=1;t.uniform1i(e.uMode,i)},isNeutralState:function(){return!1}}),e.Image.filters.Grayscale.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Invert=r(i.BaseFilter,{type:"Invert",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uInvert;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nif (uInvert == 1) {\ngl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\n} else {\ngl_FragColor = color;\n}\n}",invert:!0,mainParameter:"invert",applyTo2d:function(t){var e,i=t.imageData,r=i.data,n=r.length;for(e=0;n>e;e+=4)r[e]=255-r[e],r[e+1]=255-r[e+1],r[e+2]=255-r[e+2]},isNeutralState:function(){return!this.invert},getUniformLocations:function(t,e){return{uInvert:t.getUniformLocation(e,"uInvert")}},sendUniformData:function(t,e){t.uniform1i(e.uInvert,this.invert)}}),e.Image.filters.Invert.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Noise=n(r.BaseFilter,{type:"Noise",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uStepH;\nuniform float uNoise;\nuniform float uSeed;\nvarying vec2 vTexCoord;\nfloat rand(vec2 co, float seed, float vScale) {\nreturn fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\n}\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\ngl_FragColor = color;\n}",mainParameter:"noise",noise:0,applyTo2d:function(t){if(0!==this.noise){var e,i,r=t.imageData,n=r.data,s=n.length,o=this.noise;for(e=0,s=n.length;s>e;e+=4)i=(.5-Math.random())*o,n[e]+=i,n[e+1]+=i,n[e+2]+=i}},getUniformLocations:function(t,e){return{uNoise:t.getUniformLocation(e,"uNoise"),uSeed:t.getUniformLocation(e,"uSeed")}},sendUniformData:function(t,e){t.uniform1f(e.uNoise,this.noise/255),t.uniform1f(e.uSeed,Math.random())},toObject:function(){return i(this.callSuper("toObject"),{noise:this.noise})}}),e.Image.filters.Noise.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Pixelate=r(i.BaseFilter,{type:"Pixelate",blocksize:4,mainParameter:"blocksize",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uBlocksize;\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nfloat blockW = uBlocksize * uStepW;\nfloat blockH = uBlocksize * uStepW;\nint posX = int(vTexCoord.x / blockW);\nint posY = int(vTexCoord.y / blockH);\nfloat fposX = float(posX);\nfloat fposY = float(posY);\nvec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\nvec4 color = texture2D(uTexture, squareCoords);\ngl_FragColor = color;\n}",applyTo2d:function(t){var e,i,r,n,s,o,a,c,h,l,u,f=t.imageData,d=f.data,g=f.height,p=f.width;for(i=0;g>i;i+=this.blocksize)for(r=0;p>r;r+=this.blocksize)for(e=4*i*p+4*r,n=d[e],s=d[e+1],o=d[e+2],a=d[e+3],l=Math.min(i+this.blocksize,g),u=Math.min(r+this.blocksize,p),c=i;l>c;c++)for(h=r;u>h;h++)e=4*c*p+4*h,d[e]=n,d[e+1]=s,d[e+2]=o,d[e+3]=a},isNeutralState:function(){return 1===this.blocksize},getUniformLocations:function(t,e){return{uBlocksize:t.getUniformLocation(e,"uBlocksize"),uStepW:t.getUniformLocation(e,"uStepW"),uStepH:t.getUniformLocation(e,"uStepH")}},sendUniformData:function(t,e){t.uniform1f(e.uBlocksize,this.blocksize)}}),e.Image.filters.Pixelate.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.RemoveColor=n(r.BaseFilter,{type:"RemoveColor",color:"#FFFFFF",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uLow;\nuniform vec4 uHigh;\nvarying vec2 vTexCoord;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\nif(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\ngl_FragColor.a = 0.0;\n}\n}",distance:.02,useAlpha:!1,applyTo2d:function(t){var i,r,n,s,o=t.imageData,a=o.data,h=255*this.distance,c=new e.Color(this.color).getSource(),l=[c[0]-h,c[1]-h,c[2]-h],u=[c[0]+h,c[1]+h,c[2]+h];for(i=0;il[0]&&n>l[1]&&s>l[2]&&r 0.0) {\n"+this.fragmentSource[t]+"}\n}"},retrieveShader:function(t){var e,i=this.type+"_"+this.mode;return t.programCache.hasOwnProperty(i)||(e=this.buildSource(this.mode),t.programCache[i]=this.createProgram(t.context,e)),t.programCache[i]},applyTo2d:function(t){var i,r,n,s,o,a,c,h=t.imageData,l=h.data,u=l.length,f=1-this.alpha;c=new e.Color(this.color).getSource(),i=c[0]*this.alpha,r=c[1]*this.alpha,n=c[2]*this.alpha;for(var d=0;u>d;d+=4)switch(s=l[d],o=l[d+1],a=l[d+2],this.mode){case"multiply":l[d]=s*i/255,l[d+1]=o*r/255,l[d+2]=a*n/255;break;case"screen":l[d]=255-(255-s)*(255-i)/255,l[d+1]=255-(255-o)*(255-r)/255,l[d+2]=255-(255-a)*(255-n)/255;break;case"add":l[d]=s+i,l[d+1]=o+r,l[d+2]=a+n;break;case"diff":case"difference":l[d]=Math.abs(s-i),l[d+1]=Math.abs(o-r),l[d+2]=Math.abs(a-n);break;case"subtract":l[d]=s-i,l[d+1]=o-r,l[d+2]=a-n;break;case"darken":l[d]=Math.min(s,i),l[d+1]=Math.min(o,r),l[d+2]=Math.min(a,n);break;case"lighten":l[d]=Math.max(s,i),l[d+1]=Math.max(o,r),l[d+2]=Math.max(a,n);break;case"overlay":l[d]=128>i?2*s*i/255:255-2*(255-s)*(255-i)/255,l[d+1]=128>r?2*o*r/255:255-2*(255-o)*(255-r)/255,l[d+2]=128>n?2*a*n/255:255-2*(255-a)*(255-n)/255;break;case"exclusion":l[d]=i+s-2*i*s/255,l[d+1]=r+o-2*r*o/255,l[d+2]=n+a-2*n*a/255;break;case"tint":l[d]=i+s*f,l[d+1]=r+o*f,l[d+2]=n+a*f}},getUniformLocations:function(t,e){return{uColor:t.getUniformLocation(e,"uColor")}},sendUniformData:function(t,i){var r=new e.Color(this.color).getSource();r[0]=this.alpha*r[0]/255,r[1]=this.alpha*r[1]/255,r[2]=this.alpha*r[2]/255,r[3]=this.alpha,t.uniform4fv(i.uColor,r)},toObject:function(){return{type:this.type,color:this.color,mode:this.mode,alpha:this.alpha}}}),e.Image.filters.BlendColor.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric,i=e.Image.filters,r=e.util.createClass;i.BlendImage=r(i.BaseFilter,{type:"BlendImage",image:null,mode:"multiply",alpha:1,vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nuniform mat3 uTransformMatrix;\nvoid main() {\nvTexCoord = aPosition;\nvTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:{multiply:"precision highp float;\nuniform sampler2D uTexture;\nuniform sampler2D uImage;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec4 color2 = texture2D(uImage, vTexCoord2);\ncolor.rgba *= color2.rgba;\ngl_FragColor = color;\n}",mask:"precision highp float;\nuniform sampler2D uTexture;\nuniform sampler2D uImage;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec4 color2 = texture2D(uImage, vTexCoord2);\ncolor.a = color2.a;\ngl_FragColor = color;\n}"},retrieveShader:function(t){var e=this.type+"_"+this.mode,i=this.fragmentSource[this.mode];return t.programCache.hasOwnProperty(e)||(t.programCache[e]=this.createProgram(t.context,i)),t.programCache[e]},applyToWebGL:function(t){var e=t.context,i=this.createTexture(t.filterBackend,this.image);this.bindAdditionalTexture(e,i,e.TEXTURE1),this.callSuper("applyToWebGL",t),this.unbindAdditionalTexture(e,e.TEXTURE1)},createTexture:function(t,e){return t.getCachedTexture(e.cacheKey,e._element)},calculateMatrix:function(){var t=this.image,e=t._element.width,i=t._element.height;return[1/t.scaleX,0,0,0,1/t.scaleY,0,-t.left/e,-t.top/i,1]},applyTo2d:function(t){var i,r,n,s,o,a,c,h,l,u,f,d=t.imageData,g=t.filterBackend.resources,p=d.data,v=p.length,m=d.width,b=d.height,_=this.image;g.blendImage||(g.blendImage=e.util.createCanvasElement()),l=g.blendImage,u=l.getContext("2d"),l.width!==m||l.height!==b?(l.width=m,l.height=b):u.clearRect(0,0,m,b),u.setTransform(_.scaleX,0,0,_.scaleY,_.left,_.top),u.drawImage(_._element,0,0,m,b),f=u.getImageData(0,0,m,b).data;for(var y=0;v>y;y+=4)switch(o=p[y],a=p[y+1],c=p[y+2],h=p[y+3],i=f[y],r=f[y+1],n=f[y+2],s=f[y+3],this.mode){case"multiply":p[y]=o*i/255,p[y+1]=a*r/255,p[y+2]=c*n/255,p[y+3]=h*s/255;break;case"mask":p[y+3]=s}},getUniformLocations:function(t,e){return{uTransformMatrix:t.getUniformLocation(e,"uTransformMatrix"),uImage:t.getUniformLocation(e,"uImage")}},sendUniformData:function(t,e){var i=this.calculateMatrix();t.uniform1i(e.uImage,1),t.uniformMatrix3fv(e.uTransformMatrix,!1,i)},toObject:function(){return{type:this.type,image:this.image&&this.image.toObject(),mode:this.mode,alpha:this.alpha}}}),e.Image.filters.BlendImage.fromObject=function(t,i){e.Image.fromObject(t.image,function(r){var n=e.util.object.clone(t);n.image=r,i(new e.Image.filters.BlendImage(n))})}}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=Math.pow,r=Math.floor,n=Math.sqrt,s=Math.abs,o=Math.round,a=Math.sin,c=Math.ceil,h=e.Image.filters,l=e.util.createClass;h.Resize=l(h.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3,getUniformLocations:function(t,e){return{uDelta:t.getUniformLocation(e,"uDelta"),uTaps:t.getUniformLocation(e,"uTaps")}},sendUniformData:function(t,e){t.uniform2fv(e.uDelta,this.horizontal?[1/this.width,0]:[0,1/this.height]),t.uniform1fv(e.uTaps,this.taps)},retrieveShader:function(t){var e=this.getFilterWindow(),i=this.type+"_"+e;if(!t.programCache.hasOwnProperty(i)){var r=this.generateShader(e);t.programCache[i]=this.createProgram(t.context,r)}return t.programCache[i]},getFilterWindow:function(){var t=this.tempScale;return Math.ceil(this.lanczosLobes/t)},getTaps:function(){for(var t=this.lanczosCreate(this.lanczosLobes),e=this.tempScale,i=this.getFilterWindow(),r=new Array(i),n=1;i>=n;n++)r[n-1]=t(n*e);return r},generateShader:function(t){for(var t,e=new Array(t),i=this.fragmentSourceTOP,r=1;t>=r;r++)e[r-1]=r+".0 * uDelta";return i+="uniform float uTaps["+t+"];\n",i+="void main() {\n",i+=" vec4 color = texture2D(uTexture, vTexCoord);\n",i+=" float sum = 1.0;\n",e.forEach(function(t,e){i+=" color += texture2D(uTexture, vTexCoord + "+t+") * uTaps["+e+"];\n",i+=" color += texture2D(uTexture, vTexCoord - "+t+") * uTaps["+e+"];\n",i+=" sum += 2.0 * uTaps["+e+"];\n"}),i+=" gl_FragColor = color / sum;\n",i+="}"},fragmentSourceTOP:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uDelta;\nvarying vec2 vTexCoord;\n",applyTo:function(t){t.webgl?(t.passes++,this.width=t.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=t.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),t.destinationWidth=this.dW,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceWidth=t.destinationWidth,this.height=t.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),t.destinationHeight=this.dH,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceHeight=t.destinationHeight):this.applyTo2d(t)},isNeutralState:function(){return 1===this.scaleX&&1===this.scaleY},lanczosCreate:function(t){return function(e){if(e>=t||-t>=e)return 0;if(1.1920929e-7>e&&e>-1.1920929e-7)return 1;e*=Math.PI;var i=e/t;return a(e)/e*a(i)/i}},applyTo2d:function(t){var e=t.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,s=e.width,a=e.height,c=o(s*i),h=o(a*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(t,s,a,c,h):"hermite"===this.resizeType?n=this.hermiteFastResize(t,s,a,c,h):"bilinear"===this.resizeType?n=this.bilinearFiltering(t,s,a,c,h):"lanczos"===this.resizeType&&(n=this.lanczosResize(t,s,a,c,h)),t.imageData=n},sliceByTwo:function(t,i,n,s,o){var a,c,h=t.imageData,l=.5,u=!1,f=!1,d=i*l,g=n*l,p=e.filterBackend.resources,v=0,m=0,b=i,_=0;for(p.sliceByTwo||(p.sliceByTwo=document.createElement("canvas")),a=p.sliceByTwo,(a.width<1.5*i||a.heightc;c++){for(C.y=(c+.5)*v,S.y=r(C.y),k=0,P=0,D=0,E=0,j=0,T=S.x-_;T<=S.x+_;T++)if(!(0>T||T>=e)){A=r(1e3*s(T-C.x)),x[A]||(x[A]={});for(var F=S.y-y;F<=S.y+y;F++)0>F||F>=o||(M=r(1e3*s(F-C.y)),x[A][M]||(x[A][M]=g(n(i(A*m,2)+i(M*b,2))/1e3)),w=x[A][M],w>0&&(O=4*(F*e+T),k+=w,P+=w*u[O],D+=w*u[O+1],E+=w*u[O+2],j+=w*u[O+3]))}O=4*(c*a+t),d[O]=P/k,d[O+1]=D/k,d[O+2]=E/k,d[O+3]=j/k}return++tf;f++)for(d=0;n>d;d++)for(l=r(y*d),u=r(x*f),g=y*d-l,p=x*f-u,b=4*(u*e+l),v=0;4>v;v++)o=T[b+v],a=T[b+4+v],c=T[b+C+v],h=T[b+C+4+v],m=o*(1-g)*(1-p)+a*g*(1-p)+c*p*(1-g)+h*g*p,O[_++]=m;return w},hermiteFastResize:function(t,e,i,o,a){for(var h=this.rcpScaleX,l=this.rcpScaleY,u=c(h/2),f=c(l/2),d=t.imageData,g=d.data,p=t.ctx.createImageData(o,a),v=p.data,m=0;a>m;m++)for(var b=0;o>b;b++){for(var _=4*(b+m*o),y=0,x=0,C=0,S=0,T=0,w=0,O=0,k=(m+.5)*l,P=r(m*l);(m+1)*l>P;P++)for(var D=s(k-(P+.5))/f,E=(b+.5)*h,j=D*D,A=r(b*h);(b+1)*h>A;A++){var M=s(E-(A+.5))/u,F=n(j+M*M);F>1&&-1>F||(y=2*F*F*F-3*F*F+1,y>0&&(M=4*(A+P*e),O+=y*g[M+3],C+=y,g[M+3]<255&&(y=y*g[M+3]/250),S+=y*g[M],T+=y*g[M+1],w+=y*g[M+2],x+=y))}v[_]=S/x,v[_+1]=T/x,v[_+2]=w/x,v[_+3]=O/C}return p},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(0!==this.contrast){var e,i,r=t.imageData,n=r.data,i=n.length,s=Math.floor(255*this.contrast),o=259*(s+255)/(255*(259-s));for(e=0;i>e;e+=4)n[e]=o*(n[e]-128)+128,n[e+1]=o*(n[e+1]-128)+128,n[e+2]=o*(n[e+2]-128)+128}},getUniformLocations:function(t,e){return{uContrast:t.getUniformLocation(e,"uContrast")}},sendUniformData:function(t,e){t.uniform1f(e.uContrast,this.contrast)}}),e.Image.filters.Contrast.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Saturation=r(i.BaseFilter,{type:"Saturation",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uSaturation;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat rgMax = max(color.r, color.g);\nfloat rgbMax = max(rgMax, color.b);\ncolor.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\ncolor.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\ncolor.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\ngl_FragColor = color;\n}",saturation:0,mainParameter:"saturation",applyTo2d:function(t){if(0!==this.saturation){var e,i,r=t.imageData,n=r.data,s=n.length,o=-this.saturation;for(e=0;s>e;e+=4)i=Math.max(n[e],n[e+1],n[e+2]),n[e]+=i!==n[e]?(i-n[e])*o:0,n[e+1]+=i!==n[e+1]?(i-n[e+1])*o:0,n[e+2]+=i!==n[e+2]?(i-n[e+2])*o:0}},getUniformLocations:function(t,e){return{uSaturation:t.getUniformLocation(e,"uSaturation")}},sendUniformData:function(t,e){t.uniform1f(e.uSaturation,-this.saturation)}}),e.Image.filters.Saturation.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Blur=r(i.BaseFilter,{type:"Blur",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uDelta;\nvarying vec2 vTexCoord;\nconst float nSamples = 15.0;\nvec3 v3offset = vec3(12.9898, 78.233, 151.7182);\nfloat random(vec3 scale) {\nreturn fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\n}\nvoid main() {\nvec4 color = vec4(0.0);\nfloat total = 0.0;\nfloat offset = random(v3offset);\nfor (float t = -nSamples; t <= nSamples; t++) {\nfloat percent = (t + offset - 0.5) / nSamples;\nfloat weight = 1.0 - abs(percent);\ncolor += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\ntotal += weight;\n}\ngl_FragColor = color / total;\n}",blur:0,mainParameter:"blur",applyTo:function(t){t.webgl?(this.aspectRatio=t.sourceWidth/t.sourceHeight,t.passes++,this._setupFrameBuffer(t),this.horizontal=!0,this.applyToWebGL(t),this._swapTextures(t),this._setupFrameBuffer(t),this.horizontal=!1,this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},applyTo2d:function(t){t.imageData=this.simpleBlur(t)},simpleBlur:function(t){var i,r,n=t.filterBackend.resources,s=t.imageData.width,o=t.imageData.height;n.blurLayer1||(n.blurLayer1=e.util.createCanvasElement(),n.blurLayer2=e.util.createCanvasElement()),i=n.blurLayer1,r=n.blurLayer2,(i.width!==s||i.height!==o)&&(r.width=i.width=s,r.height=i.height=o);var a,h,c,l,u=i.getContext("2d"),f=r.getContext("2d"),d=15,g=.06*this.blur*.5;for(u.putImageData(t.imageData,0,0),f.clearRect(0,0,s,o),l=-d;d>=l;l++)a=(Math.random()-.5)/4,h=l/d,c=g*h*s+a,f.globalAlpha=1-Math.abs(h),f.drawImage(i,c,a),u.drawImage(r,0,0),f.globalAlpha=1,f.clearRect(0,0,r.width,r.height);for(l=-d;d>=l;l++)a=(Math.random()-.5)/4,h=l/d,c=g*h*o+a,f.globalAlpha=1-Math.abs(h),f.drawImage(i,a,c),u.drawImage(r,0,0),f.globalAlpha=1,f.clearRect(0,0,r.width,r.height);t.ctx.drawImage(i,0,0);var p=t.ctx.getImageData(0,0,i.width,i.height);return u.globalAlpha=1,u.clearRect(0,0,i.width,i.height),p},getUniformLocations:function(t,e){return{delta:t.getUniformLocation(e,"uDelta")}},sendUniformData:function(t,e){var i=this.chooseRightDelta();t.uniform2fv(e.delta,i)},chooseRightDelta:function(){var t,e=1,i=[0,0];return this.horizontal?this.aspectRatio>1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?i[0]=t:i[1]=t,i}}),i.Blur.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",initialize:function(t){this.gamma=[1,1,1],i.BaseFilter.prototype.initialize.call(this,t)},applyTo2d:function(t){var e,i=t.imageData,r=i.data,n=this.gamma,s=r.length,o=1/n[0],a=1/n[1],c=1/n[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,s=256;s>e;e++)this.rVals[e]=255*Math.pow(e/255,o),this.gVals[e]=255*Math.pow(e/255,a),this.bVals[e]=255*Math.pow(e/255,c);for(e=0,s=r.length;s>e;e+=4)r[e]=this.rVals[r[e]],r[e+1]=this.gVals[r[e+1]],r[e+2]=this.bVals[r[e+2]]},getUniformLocations:function(t,e){return{uGamma:t.getUniformLocation(e,"uGamma")}},sendUniformData:function(t,e){t.uniform3fv(e.uGamma,this.gamma)}}),e.Image.filters.Gamma.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Composed=r(i.BaseFilter,{type:"Composed",subFilters:[],initialize:function(t){this.callSuper("initialize",t),this.subFilters=this.subFilters.slice(0)},applyTo:function(t){t.passes+=this.subFilters.length-1,this.subFilters.forEach(function(e){e.applyTo(t)})},toObject:function(){return e.util.object.extend(this.callSuper("toObject"),{subFilters:this.subFilters.map(function(t){return t.toObject()})})},isNeutralState:function(){return!this.subFilters.some(function(t){return!t.isNeutralState()})}}),e.Image.filters.Composed.fromObject=function(t,i){var r=t.subFilters||[],n=r.map(function(t){return new e.Image.filters[t.type](t)}),s=new e.Image.filters.Composed({subFilters:n});return i&&i(s),s}}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.HueRotation=r(i.ColorMatrix,{type:"HueRotation",rotation:0,mainParameter:"rotation",calculateMatrix:function(){var t=this.rotation*Math.PI,i=e.util.cos(t),r=e.util.sin(t),n=1/3,s=Math.sqrt(n)*r,o=1-i;this.matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix[0]=i+o/3,this.matrix[1]=n*o-s,this.matrix[2]=n*o+s,this.matrix[5]=n*o+s,this.matrix[6]=i+n*o,this.matrix[7]=n*o-s,this.matrix[10]=n*o-s,this.matrix[11]=n*o+s,this.matrix[12]=i+n*o},isNeutralState:function(t){return this.calculateMatrix(),i.BaseFilter.prototype.isNeutralState.call(this,t)},applyTo:function(t){this.calculateMatrix(),i.BaseFilter.prototype.applyTo.call(this,t)}}),e.Image.filters.HueRotation.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;return e.Text?void e.warn("fabric.Text is already defined"):(e.Text=e.util.createClass(e.Object,{_dimensionAffectingProps:["fontSize","fontWeight","fontFamily","fontStyle","lineHeight","text","charSpacing","textAlign","styles"],_reNewline:/\r?\n/,_reSpacesAndTabs:/[ \t\r]/g,_reSpaceAndTab:/[ \t\r]/,_reWords:/\S+/g,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",underline:!1,overline:!1,linethrough:!1,textAlign:"left",fontStyle:"normal",lineHeight:1.16,superscript:{size:.6,baseline:-.35},subscript:{size:.6,baseline:.11},textBackgroundColor:"",stateProperties:e.Object.prototype.stateProperties.concat("fontFamily","fontWeight","fontSize","text","underline","overline","linethrough","textAlign","fontStyle","lineHeight","textBackgroundColor","charSpacing","styles"),cacheProperties:e.Object.prototype.cacheProperties.concat("fontFamily","fontWeight","fontSize","text","underline","overline","linethrough","textAlign","fontStyle","lineHeight","textBackgroundColor","charSpacing","styles"),stroke:null,shadow:null,_fontSizeFraction:.222,offsets:{underline:.1,linethrough:-.315,overline:-.88},_fontSizeMult:1.13,charSpacing:0,styles:null,_measuringContext:null,deltaY:0,_styleProperties:["stroke","strokeWidth","fill","fontFamily","fontSize","fontWeight","fontStyle","underline","overline","linethrough","deltaY","textBackgroundColor"],__charBounds:[],CACHE_FONT_SIZE:400,MIN_TEXT_WIDTH:2,initialize:function(t,e){this.styles=e?e.styles||{}:{},this.text=t,this.__skipDimension=!0,this.callSuper("initialize",e),this.__skipDimension=!1,this.initDimensions(),this.setCoords(),this.setupState({propertySet:"_dimensionAffectingProps"})},getMeasuringContext:function(){return e._measuringContext||(e._measuringContext=this.canvas&&this.canvas.contextCache||e.util.createCanvasElement().getContext("2d")),e._measuringContext},_splitText:function(){var t=this._splitTextIntoLines(this.text);return this.textLines=t.lines,this._textLines=t.graphemeLines,this._unwrappedTextLines=t._unwrappedLines,this._text=t.graphemeText,t},initDimensions:function(){this.__skipDimension||(this._splitText(),this._clearCache(),this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},enlargeSpaces:function(){for(var t,e,i,r,n,s,o,a=0,c=this._textLines.length;c>a;a++)if(("justify"===this.textAlign||a!==c-1&&!this.isEndOfWrapping(a))&&(r=0,n=this._textLines[a],e=this.getLineWidth(a),e=h;h++)s=this.__charBounds[a][h],this._reSpaceAndTab.test(n[h])?(s.width+=t,s.kernedWidth+=t,s.left+=r,r+=t):s.left+=r}},isEndOfWrapping:function(t){return t===this._textLines.length-1},missingNewlineOffset:function(){return 1},toString:function(){return"#'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,e,i){t.textBaseline="alphabetic",t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;i>e;e++){var r=this.getLineWidth(e);r>t&&(t=r)}return t},_renderTextLine:function(t,e,i,r,n,s){this._renderChars(t,e,i,r,n,s)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,r,n,s,o,a=0,c=t.fillStyle,h=this._getLeftOffset(),l=this._getTopOffset(),u=0,f=0,d=0,g=this._textLines.length;g>d;d++)if(e=this.getHeightOfLine(d),this.textBackgroundColor||this.styleHas("textBackgroundColor",d)){r=this._textLines[d],i=this._getLineLeftOffset(d),f=0,u=0,n=this.getValueOfPropertyAt(d,0,"textBackgroundColor");for(var p=0,v=r.length;v>p;p++)s=this.__charBounds[d][p],o=this.getValueOfPropertyAt(d,p,"textBackgroundColor"),o!==n?(t.fillStyle=n,n&&t.fillRect(h+i+u,l+a,f,e/this.lineHeight),u=s.left,f=s.width,n=o):f+=s.kernedWidth;o&&(t.fillStyle=o,t.fillRect(h+i+u,l+a,f,e/this.lineHeight)),a+=e}else a+=e;t.fillStyle=c,this._removeShadow(t)}},getFontCache:function(t){var i=t.fontFamily.toLowerCase();e.charWidthsCache[i]||(e.charWidthsCache[i]={});var r=e.charWidthsCache[i],n=t.fontStyle.toLowerCase()+"_"+(t.fontWeight+"").toLowerCase();return r[n]||(r[n]={}),r[n]},_applyCharStyles:function(t,e,i,r,n){this._setFillStyles(e,n),this._setStrokeStyles(e,n),e.font=this._getFontDeclaration(n)},_measureChar:function(t,e,i,r){var n,s,o,a,c=this.getFontCache(e),h=this._getFontDeclaration(e),l=this._getFontDeclaration(r),u=i+t,f=h===l,d=e.fontSize/this.CACHE_FONT_SIZE;if(i&&void 0!==c[i]&&(o=c[i]),void 0!==c[t]&&(a=n=c[t]),f&&void 0!==c[u]&&(s=c[u],a=s-o),void 0===n||void 0===o||void 0===s){var g=this.getMeasuringContext();this._setTextStyles(g,e,!0)}return void 0===n&&(a=n=g.measureText(t).width,c[t]=n),void 0===o&&f&&i&&(o=g.measureText(i).width,c[i]=o),f&&void 0===s&&(s=g.measureText(u).width,c[u]=s,a=s-o),{width:n*d,kernedWidth:a*d}},getHeightOfChar:function(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")},measureLine:function(t){var e=this._measureLine(t);return 0!==this.charSpacing&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e},_measureLine:function(t){var e,i,r,n,s=0,o=this._textLines[t],a=0,c=new Array(o.length);for(this.__charBounds[t]=c,e=0;e0&&!n){var f=this.__charBounds[e][i-1];u.left=f.left+f.width+c.kernedWidth-c.width}return u},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),r=1,n=e.length;n>r;r++)i=Math.max(this.getHeightOfChar(t,r),i);return this.__lineHeights[t]=i*this.lineHeight*this._fontSizeMult},calcTextHeight:function(){for(var t,e=0,i=0,r=this._textLines.length;r>i;i++)t=this.getHeightOfLine(i),e+=i===r-1?t/this.lineHeight:t;return e},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},_applyPatternGradientTransform:function(t,e){if(!e||!e.toLive)return{offsetX:0,offsetY:0};var i=-this.width/2+e.offsetX||0,r=-this.height/2+e.offsetY||0;return t.transform(1,0,0,1,i,r),{offsetX:i,offsetY:r}},_renderTextCommon:function(t,e){t.save();for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=this._applyPatternGradientTransform(t,"fillText"===e?this.fill:this.stroke),o=0,a=this._textLines.length;a>o;o++){var c=this.getHeightOfLine(o),h=c/this.lineHeight,l=this._getLineLeftOffset(o);this._renderTextLine(e,t,this._textLines[o],r+l-s.offsetX,n+i+h-s.offsetY,o),i+=c}t.restore()},_renderTextFill:function(t){(this.fill||this.styleHas("fill"))&&this._renderTextCommon(t,"fillText")},_renderTextStroke:function(t){(this.stroke&&0!==this.strokeWidth||!this.isEmptyStyles())&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray),t.beginPath(),this._renderTextCommon(t,"strokeText"),t.closePath(),t.restore())},_renderChars:function(t,e,i,r,n,s){var o,a,c,h,l=this.getHeightOfLine(s),u=-1!==this.textAlign.indexOf("justify"),f="",d=0,g=!u&&0===this.charSpacing&&this.isEmptyStyles(s);if(e.save(),n-=l*this._fontSizeFraction/this.lineHeight,g)return this._renderChar(t,e,s,0,this.textLines[s],r,n,l),void e.restore();for(var p=0,v=i.length-1;v>=p;p++)h=p===v||this.charSpacing,f+=i[p],c=this.__charBounds[s][p],0===d?(r+=c.kernedWidth-c.width,d+=c.width):d+=c.kernedWidth,u&&!h&&this._reSpaceAndTab.test(i[p])&&(h=!0),h||(o=o||this.getCompleteStyleDeclaration(s,p),a=this.getCompleteStyleDeclaration(s,p+1),h=this._hasStyleChanged(o,a)),h&&(this._renderChar(t,e,s,p,f,r,n,l),f="",o=a,r+=d,d=0);e.restore()},_renderChar:function(t,e,i,r,n,s,o){var a=this._getStyleDeclaration(i,r),c=this.getCompleteStyleDeclaration(i,r),h="fillText"===t&&c.fill,l="strokeText"===t&&c.stroke&&c.strokeWidth;(l||h)&&(a&&e.save(),this._applyCharStyles(t,e,i,r,c),a&&a.textBackgroundColor&&this._removeShadow(e),a&&a.deltaY&&(o+=a.deltaY),h&&e.fillText(n,s,o),l&&e.strokeText(n,s,o),a&&e.restore())},setSuperscript:function(t,e){return this._setScript(t,e,this.superscript)},setSubscript:function(t,e){return this._setScript(t,e,this.subscript)},_setScript:function(t,e,i){var r=this.get2DCursorLocation(t,!0),n=this.getValueOfPropertyAt(r.lineIndex,r.charIndex,"fontSize"),s=this.getValueOfPropertyAt(r.lineIndex,r.charIndex,"deltaY"),o={fontSize:n*i.size,deltaY:s+n*i.baseline};return this.setSelectionStyles(o,t,e),this},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth||t.fontSize!==e.fontSize||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.deltaY!==e.deltaY},_hasStyleChangedForSvg:function(t,e){return this._hasStyleChanged(t,e)||t.overline!==e.overline||t.underline!==e.underline||t.linethrough!==e.linethrough},_getLineLeftOffset:function(t){var e=this.getLineWidth(t);return"center"===this.textAlign?(this.width-e)/2:"right"===this.textAlign?this.width-e:"justify-center"===this.textAlign&&this.isEndOfWrapping(t)?(this.width-e)/2:"justify-right"===this.textAlign&&this.isEndOfWrapping(t)?this.width-e:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.dirty=!0,this._forceClearCache=!1),t},getLineWidth:function(t){if(this.__lineWidths[t])return this.__lineWidths[t];var e,i,r=this._textLines[t];return""===r?e=0:(i=this.measureLine(t),e=i.width),this.__lineWidths[t]=e,e},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},getValueOfPropertyAt:function(t,e,i){var r=this._getStyleDeclaration(t,e);return r&&"undefined"!=typeof r[i]?r[i]:this[i]},_renderTextDecoration:function(t,e){if(this[e]||this.styleHas(e)){for(var i,r,n,s,o,a,c,h,l,u,f,d,g,p,v,b,m=this._getLeftOffset(),_=this._getTopOffset(),y=this._getWidthOfCharSpacing(),x=0,C=this._textLines.length;C>x;x++)if(i=this.getHeightOfLine(x),this[e]||this.styleHas(e,x)){c=this._textLines[x],p=i/this.lineHeight,s=this._getLineLeftOffset(x),u=0,f=0,h=this.getValueOfPropertyAt(x,0,e),b=this.getValueOfPropertyAt(x,0,"fill"),l=_+p*(1-this._fontSizeFraction),r=this.getHeightOfChar(x,0),o=this.getValueOfPropertyAt(x,0,"deltaY");for(var w=0,S=c.length;S>w;w++)d=this.__charBounds[x][w],g=this.getValueOfPropertyAt(x,w,e),v=this.getValueOfPropertyAt(x,w,"fill"),n=this.getHeightOfChar(x,w),a=this.getValueOfPropertyAt(x,w,"deltaY"),(g!==h||v!==b||n!==r||a!==o)&&f>0?(t.fillStyle=b,h&&b&&t.fillRect(m+s+u,l+this.offsets[e]*r+o,f,this.fontSize/15),u=d.left,f=d.width,h=g,b=v,r=n,o=a):f+=d.kernedWidth;t.fillStyle=v,g&&v&&t.fillRect(m+s+u,l+this.offsets[e]*r+o,f-y,this.fontSize/15),_+=i}else _+=i;this._removeShadow(t)}},_getFontDeclaration:function(t,i){var r=t||this,n=this.fontFamily,s=e.Text.genericFonts.indexOf(n.toLowerCase())>-1,o=void 0===n||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||s?r.fontFamily:'"'+r.fontFamily+'"';return[e.isLikelyNode?r.fontWeight:r.fontStyle,e.isLikelyNode?r.fontStyle:r.fontWeight,i?this.CACHE_FONT_SIZE+"px":r.fontSize+"px",o].join(" ")},render:function(t){this.visible&&(!this.canvas||!this.canvas.skipOffscreen||this.group||this.isOnScreen())&&(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),r=new Array(i.length),n=["\n"],s=[],o=0;on;n++){if(t<=i[n].length)return{lineIndex:n,charIndex:t};t-=i[n].length+this.missingNewlineOffset(n)}return{lineIndex:n-1,charIndex:i[n-1].lengthn;n++)r.push(this.getStyleAtPosition(n,i));return r},getStyleAtPosition:function(t,e){var i=this.get2DCursorLocation(t),r=e?this.getCompleteStyleDeclaration(i.lineIndex,i.charIndex):this._getStyleDeclaration(i.lineIndex,i.charIndex);return r||{}},setSelectionStyles:function(t,e,i){"undefined"==typeof e&&(e=this.selectionStart||0),"undefined"==typeof i&&(i=this.selectionEnd||e);for(var r=e;i>r;r++)this._extendStyles(r,t);return this._forceClearCache=!0,this},_getStyleDeclaration:function(t,e){var i=this.styles&&this.styles[t];return i?i[e]:null},getCompleteStyleDeclaration:function(t,e){for(var i,r=this._getStyleDeclaration(t,e)||{},n={},s=0;s-1&&(t.underline=!0),t.textDecoration.indexOf("line-through")>-1&&(t.linethrough=!0),t.textDecoration.indexOf("overline")>-1&&(t.overline=!0),delete t.textDecoration)}fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(t,e){this.callSuper("initialize",t,e),this.initBehavior()},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(t){this.clearContextTop(),this.callSuper("render",t),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(t){this.callSuper("_render",t)},clearContextTop:function(t){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this.canvas.contextTop,i=this.canvas.viewportTransform;e.save(),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(e),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),this._clearTextArea(e),t||e.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var t=this._getCursorBoundaries(),e=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(t,e):this.renderSelection(t,e),e.restore()}},_clearTextArea:function(t){var e=this.width+4,i=this.height+4;t.clearRect(-e/2,-i/2,e,i)},_getCursorBoundaries:function(t){"undefined"==typeof t&&(t=this.selectionStart);var e=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(t);return{left:e,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(t){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var e,i,r,n,s=0,o=0,a=this.get2DCursorLocation(t);r=a.charIndex,i=a.lineIndex;for(var c=0;i>c;c++)s+=this.getHeightOfLine(c);e=this._getLineLeftOffset(i);var h=this.__charBounds[i][r];return h&&(o=h.left),0!==this.charSpacing&&r===this._textLines[i].length&&(o-=this._getWidthOfCharSpacing()),n={top:s,left:e+(o>0?o:0)},this.cursorOffsetCache=n,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,s=this.getValueOfPropertyAt(r,n,"fontSize"),o=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/o,c=t.topOffset,h=this.getValueOfPropertyAt(r,n,"deltaY");c+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-s*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(t,e),e.fillStyle=this.getValueOfPropertyAt(r,n,"fill"),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+t.leftOffset-a/2,c+t.top+h,a,s)},renderSelection:function(t,e){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,n=-1!==this.textAlign.indexOf("justify"),s=this.get2DCursorLocation(i),o=this.get2DCursorLocation(r),a=s.lineIndex,c=o.lineIndex,h=s.charIndex<0?0:s.charIndex,l=o.charIndex<0?0:o.charIndex,u=a;c>=u;u++){var f=this._getLineLeftOffset(u)||0,d=this.getHeightOfLine(u),g=0,p=0,v=0;if(u===a&&(p=this.__charBounds[a][h].left),u>=a&&c>u)v=n&&!this.isEndOfWrapping(u)?this.width:this.getLineWidth(u)||5;else if(u===c)if(0===l)v=this.__charBounds[c][l].left;else{var b=this._getWidthOfCharSpacing();v=this.__charBounds[c][l-1].left+this.__charBounds[c][l-1].width-b}g=d,(this.lineHeight<1||u===c&&this.lineHeight>1)&&(d/=this.lineHeight),this.inCompositionMode?(e.fillStyle=this.compositionColor||"black",e.fillRect(t.left+f+p,t.top+t.topOffset+d,v-p,1)):(e.fillStyle=this.selectionColor,e.fillRect(t.left+f+p,t.top+t.topOffset,v-p,d)),t.topOffset+=g}},getCurrentCharFontSize:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")},getCurrentCharColor:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fill")},_getCurrentCharIndex:function(){var t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}}),fabric.IText.fromObject=function(e,i){if(t(e),e.styles)for(var r in e.styles)for(var n in e.styles[r])t(e.styles[r][n]);fabric.Object._fromObject("IText",e,i,"text")}}();!function(){var t=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var t=this;this.on("added",function(){var e=t.canvas;e&&(e._hasITextHandlers||(e._hasITextHandlers=!0,t._initCanvasHandlers(e)),e._iTextInstances=e._iTextInstances||[],e._iTextInstances.push(t))})},initRemovedHandler:function(){var t=this;this.on("removed",function(){var e=t.canvas;e&&(e._iTextInstances=e._iTextInstances||[],fabric.util.removeFromArray(e._iTextInstances,t),0===e._iTextInstances.length&&(e._hasITextHandlers=!1,t._removeCanvasHandlers(e)))})},_initCanvasHandlers:function(t){t._mouseUpITextHandler=function(){t._iTextInstances&&t._iTextInstances.forEach(function(t){t.__isMousedown=!1})},t.on("mouse:up",t._mouseUpITextHandler)},_removeCanvasHandlers:function(t){t.off("mouse:up",t._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(t,e,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},t.animate("_currentCursorOpacity",e,{duration:i,onComplete:function(){n.isAborted||t[r]()},onChange:function(){t.canvas&&t.selectionStart===t.selectionEnd&&t.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var t=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){t._currentTickCompleteState=t._animateCursor(t,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(t){var e=this,i=t?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){e._tick()},i)},abortCursorAnimation:function(){var t=this._currentTickState||this._currentTickCompleteState,e=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,t&&e&&e.clearContext(e.contextTop||e.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(t){var e=0,i=t-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i--;for(;/\S/.test(this._text[i])&&i>-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i++;for(;/\S/.test(this._text[i])&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this._text[i])&&i0&&rthis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),(this.selectionStart!==i||this.selectionEnd!==r)&&(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(t,e,i){var r=i.slice(0,t),n=fabric.util.string.graphemeSplit(r).length;if(t===e)return{selectionStart:n,selectionEnd:n};var s=i.slice(t,e),o=fabric.util.string.graphemeSplit(s).length;return{selectionStart:n,selectionEnd:n+o}},fromGraphemeToStringSelection:function(t,e,i){var r=i.slice(0,t),n=r.join("").length;if(t===e)return{selectionStart:n,selectionEnd:n};var s=i.slice(t,e),o=s.join("").length;return{selectionStart:n,selectionEnd:n+o}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var t=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=t.selectionStart,this.hiddenTextarea.selectionEnd=t.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var t=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=t.selectionEnd,this.inCompositionMode||(this.selectionStart=t.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.inCompositionMode?this.compositionStart:this.selectionStart,e=this._getCursorBoundaries(t),i=this.get2DCursorLocation(t),r=i.lineIndex,n=i.charIndex,s=this.getValueOfPropertyAt(r,n,"fontSize")*this.lineHeight,o=e.leftOffset,a=this.calcTransformMatrix(),c={x:e.left+o,y:e.top+e.topOffset+s},h=this.canvas.getRetinaScaling(),l=this.canvas.upperCanvasEl,u=l.width/h,f=l.height/h,d=u-s,g=f-s,p=l.clientWidth/u,v=l.clientHeight/f;return c=fabric.util.transformPoint(c,a),c=fabric.util.transformPoint(c,this.canvas.viewportTransform),c.x*=p,c.y*=v,c.x<0&&(c.x=0),c.x>d&&(c.x=d),c.y<0&&(c.y=0),c.y>g&&(c.y=g),c.x+=this.canvas._offset.left,c.y+=this.canvas._offset.top,{left:c.x+"px",top:c.y+"px",fontSize:s+"px",charHeight:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text,e=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,e&&(e.blur&&e.blur(),e.parentNode&&e.parentNode.removeChild(e)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},removeStyleFromTo:function(t,e){var i,r,n=this.get2DCursorLocation(t,!0),s=this.get2DCursorLocation(e,!0),o=n.lineIndex,a=n.charIndex,c=s.lineIndex,h=s.charIndex;if(o!==c){if(this.styles[o])for(i=a;i=i;i++)delete this.styles[i];this.shiftLineStyles(c,o-c)}else if(this.styles[o]){r=this.styles[o];var l,u,f=h-a;for(i=a;h>i;i++)delete r[i];for(u in this.styles[o])l=parseInt(u,10),l>=h&&(r[l-f]=r[u],delete r[u])}},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},restartCursorIfNeeded:function(){(!this._currentTickState||this._currentTickState.isAborted||!this._currentTickCompleteState||this._currentTickCompleteState.isAborted)&&this.initDelayedCursor()},insertNewlineStyleObject:function(e,i,r,n){var s,o={},a=!1,c=this._unwrappedTextLines[e].length===i;r||(r=1),this.shiftLineStyles(e,r),this.styles[e]&&(s=this.styles[e][0===i?i:i-1]);for(var h in this.styles[e]){var l=parseInt(h,10);l>=i&&(a=!0,o[l-i]=this.styles[e][h],c&&0===i||delete this.styles[e][h])}var u=!1;for(a&&!c&&(this.styles[e+r]=o,u=!0),u&&r--;r>0;)n&&n[r-1]?this.styles[e+r]={0:t(n[r-1])}:s?this.styles[e+r]={0:t(s)}:delete this.styles[e+r],r--;this._forceClearCache=!0},insertCharStyleObject:function(e,i,r,n){this.styles||(this.styles={});var s=this.styles[e],o=s?t(s):{};r||(r=1);for(var a in o){var c=parseInt(a,10);c>=i&&(s[c+r]=o[c],o[c-r]||delete s[c])}if(this._forceClearCache=!0,n)for(;r--;)Object.keys(n[r]).length&&(this.styles[e]||(this.styles[e]={}),this.styles[e][i+r]=t(n[r]));else if(s)for(var h=s[i?i-1:1];h&&r--;)this.styles[e][i+r]=t(h)},insertNewStyleBlock:function(t,e,i){for(var r=this.get2DCursorLocation(e,!0),n=[0],s=0,o=0;o0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,n[0],i),i=i&&i.slice(n[0]+1)),s&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+n[0],s);for(var o=1;s>o;o++)n[o]>0?this.insertCharStyleObject(r.lineIndex+o,0,n[o],i):i&&(this.styles[r.lineIndex+o][0]=i[0]),i=i&&i.slice(n[o]+1);n[o]>0&&this.insertCharStyleObject(r.lineIndex+o,0,n[o],i)},setSelectionStartEndWithShift:function(t,e,i){t>=i?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&e>i?"right"===this._selectionDirection?this.selectionEnd=i:this.selectionStart=i:(e===t?this._selectionDirection="right":"left"===this._selectionDirection&&(this._selectionDirection="right",this.selectionStart=e),this.selectionEnd=i)},setSelectionInBoundaries:function(){var t=this.text.length;this.selectionStart>t?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}();fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(t){if(this.canvas){this.__newClickTime=+new Date;var e=t.pointer;this.isTripleClick(e)&&(this.fire("tripleclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(t){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(t.e))},tripleClickHandler:function(t){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(t.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(t){!this.canvas||!this.editable||t.e.button&&1!==t.e.button||(this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(t){!this.canvas||!this.editable||t.e.button&&1!==t.e.button||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(t){if(this.__isMousedown=!1,!(!this.editable||this.group||t.transform&&t.transform.actionPerformed||t.e.button&&1!==t.e.button)){if(this.canvas){var e=this.canvas._activeObject;if(e&&e!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,c=0,h=0,l=this._textLines.length;l>h&&o<=r.y;h++)o+=this.getHeightOfLine(h)*this.scaleY,c=h,h>0&&(a+=this._textLines[h-1].length+this.missingNewlineOffset(h-1));e=this._getLineLeftOffset(c),s=e*this.scaleX,i=this._textLines[c];for(var u=0,f=i.length;f>u&&(n=s,s+=this.__charBounds[c][u].kernedWidth*this.scaleX,s<=r.x);u++)a++;return this._getNewSelectionStartFromOffset(r,n,s,a,f)},_getNewSelectionStartFromOffset:function(t,e,i,r,n){var s=t.x-e,o=i-t.x,a=o>s||0>o?0:1,c=r+a;return this.flipX&&(c=n-c),c>this._text.length&&(c=this._text.length),c}});fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; paddingーtop: "+t.fontSize+";",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing&&!this.inCompositionMode){if(t.keyCode in this.keysMap)this[this.keysMap[t.keyCode]](t);else{if(!(t.keyCode in this.ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this.ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone||this.inCompositionMode?void(this._copyDone=!1):void(t.keyCode in this.ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this.ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.requestRenderAll()))},onInput:function(t){var e=this.fromPaste;if(this.fromPaste=!1,t&&t.stopPropagation(),this.isEditing){var i,r,n,s,o,a=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,h=this._text.length,c=a.length,l=c-h,u=this.selectionStart,f=this.selectionEnd,d=u!==f;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var g=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),p=u>g.selectionStart;d?(i=this._text.slice(u,f),l+=f-u):h>c&&(i=p?this._text.slice(f+l,f):this._text.slice(u,u-l));var n;r=a.slice(g.selectionEnd-l,g.selectionEnd),i&&i.length&&(r.length&&(n=this.getSelectionStyles(u,u+1,!0),n=r.map(function(){return n[0]})),d?(s=u,o=f):p?(s=f-i.length,o=f):(s=f,o=f+i.length),this.removeStyleFromTo(s,o)),r.length&&(e&&r.join("")===fabric.copiedText&&!fabric.disableStyleCopyPaste&&(n=fabric.copiedTextStyle),this.insertNewStyleBlock(r,u,n)),this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())}},onCompositionStart:function(){this.inCompositionMode=!0},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){this.compositionStart=t.target.selectionStart,this.compositionEnd=t.target.selectionEnd,this.updateTextareaPosition()},copy:function(){this.selectionStart!==this.selectionEnd&&(fabric.copiedText=this.getSelectedText(),fabric.copiedTextStyle=fabric.disableStyleCopyPaste?null:this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0)},paste:function(){this.fromPaste=!0},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){var i,r=this._getLineLeftOffset(t);return e>0&&(i=this.__charBounds[t][e-1],r+=i.left+i.width),r},getDownCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(n===this._textLines.length-1||t.metaKey||34===t.keyCode)return this._text.length-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n+1,o),h=this._textLines[n].slice(s);return h.length+a+1+this.missingNewlineOffset(n)},_getSelectionForOffset:function(t,e){return t.shiftKey&&this.selectionStart!==this.selectionEnd&&e?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||t.metaKey||33===t.keyCode)return-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n-1,o),h=this._textLines[n].slice(0,s),c=this.missingNewlineOffset(n-1);return-this._textLines[n-1].length+a-h.length+(1-c)},_getIndexOnLine:function(t,e){for(var i,r,n=this._textLines[t],s=this._getLineLeftOffset(t),o=s,a=0,h=0,c=n.length;c>h;h++)if(i=this.__charBounds[t][h].width,o+=i,o>e){r=!0;var l=o-i,u=o,f=Math.abs(l-e),d=Math.abs(u-e);a=f>d?h:h-1;break}return r||(a=n.length-1),a},moveCursorDown:function(t){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){(0!==this.selectionStart||0!==this.selectionEnd)&&this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return 0>t?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){(0!==this.selectionStart||0!==this.selectionEnd)&&this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}return void 0!==typeof r&&this[e]!==r?(this[e]=r,!0):void 0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t,e){"undefined"==typeof e&&(e=t+1),this.removeStyleFromTo(t,e),this._text.splice(t,e-t),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(t,e,i,r){"undefined"==typeof r&&(r=i),r>i&&this.removeStyleFromTo(i,r);var n=fabric.util.string.graphemeSplit(t);this.insertNewStyleBlock(n,i,e),this._text=[].concat(this._text.slice(0,i),n,this._text.slice(r)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}});!function(){var t=fabric.util.toFixed,e=/ +/g;fabric.util.object.extend(fabric.Text.prototype,{_toSVG:function(){var t=this._getSVGLeftTopOffsets(),e=this._getSVGTextAndBg(t.textTop,t.textLeft);return this._wrapSVGTextAndBg(e)},toSVG:function(t){return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(t){var e=!0,i=this.getSvgTextDecoration(this);return[t.textBgRects.join(""),' ",t.textSpans.join(""),"\n"]},_getSVGTextAndBg:function(t,e){var i,r=[],n=[],s=t;this._setSVGBg(n);for(var o=0,a=this._textLines.length;a>o;o++)i=this._getLineLeftOffset(o),(this.textBackgroundColor||this.styleHas("textBackgroundColor",o))&&this._setSVGTextLineBg(n,o,e+i,s),this._setSVGTextLineText(r,o,e+i,s),s+=this.getHeightOfLine(o);return{textSpans:r,textBgRects:n}},_createTextCharSpan:function(i,r,n,s){var o=i!==i.trim()||i.match(e),a=this.getSvgSpanStyles(r,o),c=a?'style="'+a+'"':"",h=r.deltaY,l="",u=fabric.Object.NUM_FRACTION_DIGITS;return h&&(l=' dy="'+t(h,u)+'" '),['",fabric.util.string.escapeXml(i),""].join("")},_setSVGTextLineText:function(t,e,i,r){var n,s,o,a,c,h=this.getHeightOfLine(e),l=-1!==this.textAlign.indexOf("justify"),u="",f=0,d=this._textLines[e];r+=h*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,p=d.length-1;p>=g;g++)c=g===p||this.charSpacing,u+=d[g],o=this.__charBounds[e][g],0===f?(i+=o.kernedWidth-o.width,f+=o.width):f+=o.kernedWidth,l&&!c&&this._reSpaceAndTab.test(d[g])&&(c=!0),c||(n=n||this.getCompleteStyleDeclaration(e,g),s=this.getCompleteStyleDeclaration(e,g+1),c=this._hasStyleChangedForSvg(n,s)),c&&(a=this._getStyleDeclaration(e,g)||{},t.push(this._createTextCharSpan(u,a,i,r)),u="",n=s,i+=f,f=0)},_pushTextBgRect:function(e,i,r,n,s,o){var a=fabric.Object.NUM_FRACTION_DIGITS;e.push(" \n')},_setSVGTextLineBg:function(t,e,i,r){for(var n,s,o=this._textLines[e],a=this.getHeightOfLine(e)/this.lineHeight,c=0,h=0,l=this.getValueOfPropertyAt(e,0,"textBackgroundColor"),u=0,f=o.length;f>u;u++)n=this.__charBounds[e][u],s=this.getValueOfPropertyAt(e,u,"textBackgroundColor"),s!==l?(l&&this._pushTextBgRect(t,l,i+h,r,c,a),h=n.left,c=n.width,l=s):c+=n.kernedWidth;s&&this._pushTextBgRect(t,s,i+h,r,c,a)},_getFillAttributes:function(t){var e=t&&"string"==typeof t?new fabric.Color(t):"";return e&&e.getSource()&&1!==e.getAlpha()?'opacity="'+e.getAlpha()+'" fill="'+e.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_getSVGLineTopOffset:function(t){for(var e=0,i=0,r=0;t>r;r++)e+=this.getHeightOfLine(r);return i=this.getHeightOfLine(r),{lineTop:e,offset:(this._fontSizeMult-this._fontSizeFraction)*i/(this.lineHeight*this._fontSizeMult)}},getSvgStyles:function(t){var e=fabric.Object.prototype.getSvgStyles.call(this,t);return e+" white-space: pre;"}})}();!function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingFlip:!0,noScaleCache:!1,_dimensionAffectingProps:e.Text.prototype._dimensionAffectingProps.concat("width"),_wordJoiners:/[ \t\r]/,splitByGrapheme:!1,initDimensions:function(){this.__skipDimension||(this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(t){for(var e=0,i=0,r=0,n={},s=0;s0?(i=0,r++,e++):!this.splitByGrapheme&&this._reSpaceAndTab.test(t.graphemeText[r])&&s>0&&(i++,r++),n[s]={line:e,offset:i},r+=t.graphemeLines[s].length,i+=t.graphemeLines[s].length;return n},styleHas:function(t,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return e.Text.prototype.styleHas.call(this,t,i)},isEmptyStyles:function(t){if(!this.styles)return!0;var e,i,r=0,n=t+1,s=!1,o=this._styleMap[t],a=this._styleMap[t+1];o&&(t=o.line,r=o.offset),a&&(n=a.line,s=n===t,e=a.offset),i="undefined"==typeof t?this.styles:{line:this.styles[t]};for(var h in i)for(var c in i[h])if(c>=r&&(!s||e>c))for(var l in i[h][c])return!1;return!0},_getStyleDeclaration:function(t,e){if(this._styleMap&&!this.isWrapping){var i=this._styleMap[t];if(!i)return null;t=i.line,e=i.offset+e}return this.callSuper("_getStyleDeclaration",t,e)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return!!this.styles[e.line]},_setLineStyle:function(t){var e=this._styleMap[t];this.styles[e.line]={}},_wrapText:function(t,e){var i,r=[];for(this.isWrapping=!0,i=0;io;o++){var h=this._getGraphemeBox(t[o],e,o+i,r,s);n+=h.kernedWidth,r=t[o]}return n},_wrapLine:function(t,i,r,n){var s=0,o=this.splitByGrapheme,a=[],h=[],c=o?e.util.string.graphemeSplit(t):t.split(this._wordJoiners),l="",u=0,f=o?"":" ",d=0,g=0,p=0,v=!0,m=o?0:this._getWidthOfCharSpacing(),n=n||0;0===c.length&&c.push([]),r-=n;for(var b=0;b=r&&!v?(a.push(h),h=[],s=d,v=!0):s+=m,v||o||h.push(f),h=h.concat(l),g=this._measureWord([f],i,u),u++,v=!1,d>p&&(p=d);return b&&a.push(h),p+n>this.dynamicMinWidth&&(this.dynamicMinWidth=p-m+n),a},isEndOfWrapping:function(t){return this._styleMap[t+1]?this._styleMap[t+1].line!==this._styleMap[t].line?!0:!1:!0},missingNewlineOffset:function(t){return this.splitByGrapheme?this.isEndOfWrapping(t)?1:0:1},_splitTextIntoLines:function(t){for(var i=e.Text.prototype._splitTextIntoLines.call(this,t),r=this._wrapText(i.lines,this.width),n=new Array(r.length),s=0;s=h.getMinWidth()?(c=d!==h.width,h.set("width",d),c):void 0},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]}})}(); \ No newline at end of file diff --git a/docs/assets/js/just-the-docs.js b/docs/assets/js/just-the-docs.js new file mode 100644 index 0000000..1b8d5ab --- /dev/null +++ b/docs/assets/js/just-the-docs.js @@ -0,0 +1,445 @@ +(function (jtd, undefined) { + +// Event handling + +jtd.addEvent = function(el, type, handler) { + if (el.attachEvent) el.attachEvent('on'+type, handler); else el.addEventListener(type, handler); +} +jtd.removeEvent = function(el, type, handler) { + if (el.detachEvent) el.detachEvent('on'+type, handler); else el.removeEventListener(type, handler); +} +jtd.onReady = function(ready) { + // in case the document is already rendered + if (document.readyState!='loading') ready(); + // modern browsers + else if (document.addEventListener) document.addEventListener('DOMContentLoaded', ready); + // IE <= 8 + else document.attachEvent('onreadystatechange', function(){ + if (document.readyState=='complete') ready(); + }); +} + +// Show/hide mobile menu + +function initNav() { + jtd.addEvent(document, 'click', function(e){ + var target = e.target; + while (target && !(target.classList && target.classList.contains('nav-list-expander'))) { + target = target.parentNode; + } + if (target) { + e.preventDefault(); + target.parentNode.classList.toggle('active'); + } + }); + + const siteNav = document.getElementById('site-nav'); + const mainHeader = document.getElementById('main-header'); + const menuButton = document.getElementById('menu-button'); + + jtd.addEvent(menuButton, 'click', function(e){ + e.preventDefault(); + + if (menuButton.classList.toggle('nav-open')) { + siteNav.classList.add('nav-open'); + mainHeader.classList.add('nav-open'); + } else { + siteNav.classList.remove('nav-open'); + mainHeader.classList.remove('nav-open'); + } + }); +} +// Site search + +function initSearch() { + var request = new XMLHttpRequest(); + request.open('GET', '/assets/js/search-data.json', true); + + request.onload = function(){ + if (request.status >= 200 && request.status < 400) { + var docs = JSON.parse(request.responseText); + + lunr.tokenizer.separator = /[\s/]+/ + + var index = lunr(function(){ + this.ref('id'); + this.field('title', { boost: 200 }); + this.field('content', { boost: 2 }); + this.field('relUrl'); + this.metadataWhitelist = ['position'] + + for (var i in docs) { + this.add({ + id: i, + title: docs[i].title, + content: docs[i].content, + relUrl: docs[i].relUrl + }); + } + }); + + searchLoaded(index, docs); + } else { + console.log('Error loading ajax request. Request status:' + request.status); + } + }; + + request.onerror = function(){ + console.log('There was a connection error'); + }; + + request.send(); +} + +function searchLoaded(index, docs) { + var index = index; + var docs = docs; + var searchInput = document.getElementById('search-input'); + var searchResults = document.getElementById('search-results'); + var mainHeader = document.getElementById('main-header'); + var currentInput; + var currentSearchIndex = 0; + + function showSearch() { + document.documentElement.classList.add('search-active'); + } + + function hideSearch() { + document.documentElement.classList.remove('search-active'); + } + + function update() { + currentSearchIndex++; + + var input = searchInput.value; + if (input === '') { + hideSearch(); + } else { + showSearch(); + // scroll search input into view, workaround for iOS Safari + window.scroll(0, -1); + setTimeout(function(){ window.scroll(0, 0); }, 0); + } + if (input === currentInput) { + return; + } + currentInput = input; + searchResults.innerHTML = ''; + if (input === '') { + return; + } + + var results = index.query(function (query) { + var tokens = lunr.tokenizer(input) + query.term(tokens, { + boost: 10 + }); + query.term(tokens, { + wildcard: lunr.Query.wildcard.TRAILING + }); + }); + + if ((results.length == 0) && (input.length > 2)) { + var tokens = lunr.tokenizer(input).filter(function(token, i) { + return token.str.length < 20; + }) + if (tokens.length > 0) { + results = index.query(function (query) { + query.term(tokens, { + editDistance: Math.round(Math.sqrt(input.length / 2 - 1)) + }); + }); + } + } + + if (results.length == 0) { + var noResultsDiv = document.createElement('div'); + noResultsDiv.classList.add('search-no-result'); + noResultsDiv.innerText = 'No results found'; + searchResults.appendChild(noResultsDiv); + + } else { + var resultsList = document.createElement('ul'); + resultsList.classList.add('search-results-list'); + searchResults.appendChild(resultsList); + + addResults(resultsList, results, 0, 10, 100, currentSearchIndex); + } + + function addResults(resultsList, results, start, batchSize, batchMillis, searchIndex) { + if (searchIndex != currentSearchIndex) { + return; + } + for (var i = start; i < (start + batchSize); i++) { + if (i == results.length) { + return; + } + addResult(resultsList, results[i]); + } + setTimeout(function() { + addResults(resultsList, results, start + batchSize, batchSize, batchMillis, searchIndex); + }, batchMillis); + } + + function addResult(resultsList, result) { + var doc = docs[result.ref]; + + var resultsListItem = document.createElement('li'); + resultsListItem.classList.add('search-results-list-item'); + resultsList.appendChild(resultsListItem); + + var resultLink = document.createElement('a'); + resultLink.classList.add('search-result'); + resultLink.setAttribute('href', doc.url); + resultsListItem.appendChild(resultLink); + + var resultTitle = document.createElement('div'); + resultTitle.classList.add('search-result-title'); + resultLink.appendChild(resultTitle); + + var resultDoc = document.createElement('div'); + resultDoc.classList.add('search-result-doc'); + resultDoc.innerHTML = ''; + resultTitle.appendChild(resultDoc); + + var resultDocTitle = document.createElement('div'); + resultDocTitle.classList.add('search-result-doc-title'); + resultDocTitle.innerHTML = doc.doc; + resultDoc.appendChild(resultDocTitle); + var resultDocOrSection = resultDocTitle; + + if (doc.doc != doc.title) { + resultDoc.classList.add('search-result-doc-parent'); + var resultSection = document.createElement('div'); + resultSection.classList.add('search-result-section'); + resultSection.innerHTML = doc.title; + resultTitle.appendChild(resultSection); + resultDocOrSection = resultSection; + } + + var metadata = result.matchData.metadata; + var titlePositions = []; + var contentPositions = []; + for (var j in metadata) { + var meta = metadata[j]; + if (meta.title) { + var positions = meta.title.position; + for (var k in positions) { + titlePositions.push(positions[k]); + } + } + if (meta.content) { + var positions = meta.content.position; + for (var k in positions) { + var position = positions[k]; + var previewStart = position[0]; + var previewEnd = position[0] + position[1]; + var ellipsesBefore = true; + var ellipsesAfter = true; + for (var k = 0; k < 5; k++) { + var nextSpace = doc.content.lastIndexOf(' ', previewStart - 2); + var nextDot = doc.content.lastIndexOf('. ', previewStart - 2); + if ((nextDot >= 0) && (nextDot > nextSpace)) { + previewStart = nextDot + 1; + ellipsesBefore = false; + break; + } + if (nextSpace < 0) { + previewStart = 0; + ellipsesBefore = false; + break; + } + previewStart = nextSpace + 1; + } + for (var k = 0; k < 10; k++) { + var nextSpace = doc.content.indexOf(' ', previewEnd + 1); + var nextDot = doc.content.indexOf('. ', previewEnd + 1); + if ((nextDot >= 0) && (nextDot < nextSpace)) { + previewEnd = nextDot; + ellipsesAfter = false; + break; + } + if (nextSpace < 0) { + previewEnd = doc.content.length; + ellipsesAfter = false; + break; + } + previewEnd = nextSpace; + } + contentPositions.push({ + highlight: position, + previewStart: previewStart, previewEnd: previewEnd, + ellipsesBefore: ellipsesBefore, ellipsesAfter: ellipsesAfter + }); + } + } + } + + if (titlePositions.length > 0) { + titlePositions.sort(function(p1, p2){ return p1[0] - p2[0] }); + resultDocOrSection.innerHTML = ''; + addHighlightedText(resultDocOrSection, doc.title, 0, doc.title.length, titlePositions); + } + + if (contentPositions.length > 0) { + contentPositions.sort(function(p1, p2){ return p1.highlight[0] - p2.highlight[0] }); + var contentPosition = contentPositions[0]; + var previewPosition = { + highlight: [contentPosition.highlight], + previewStart: contentPosition.previewStart, previewEnd: contentPosition.previewEnd, + ellipsesBefore: contentPosition.ellipsesBefore, ellipsesAfter: contentPosition.ellipsesAfter + }; + var previewPositions = [previewPosition]; + for (var j = 1; j < contentPositions.length; j++) { + contentPosition = contentPositions[j]; + if (previewPosition.previewEnd < contentPosition.previewStart) { + previewPosition = { + highlight: [contentPosition.highlight], + previewStart: contentPosition.previewStart, previewEnd: contentPosition.previewEnd, + ellipsesBefore: contentPosition.ellipsesBefore, ellipsesAfter: contentPosition.ellipsesAfter + } + previewPositions.push(previewPosition); + } else { + previewPosition.highlight.push(contentPosition.highlight); + previewPosition.previewEnd = contentPosition.previewEnd; + previewPosition.ellipsesAfter = contentPosition.ellipsesAfter; + } + } + + var resultPreviews = document.createElement('div'); + resultPreviews.classList.add('search-result-previews'); + resultLink.appendChild(resultPreviews); + + var content = doc.content; + for (var j = 0; j < Math.min(previewPositions.length, 3); j++) { + var position = previewPositions[j]; + + var resultPreview = document.createElement('div'); + resultPreview.classList.add('search-result-preview'); + resultPreviews.appendChild(resultPreview); + + if (position.ellipsesBefore) { + resultPreview.appendChild(document.createTextNode('... ')); + } + addHighlightedText(resultPreview, content, position.previewStart, position.previewEnd, position.highlight); + if (position.ellipsesAfter) { + resultPreview.appendChild(document.createTextNode(' ...')); + } + } + } + var resultRelUrl = document.createElement('span'); + resultRelUrl.classList.add('search-result-rel-url'); + resultRelUrl.innerText = doc.relUrl; + resultTitle.appendChild(resultRelUrl); + } + + function addHighlightedText(parent, text, start, end, positions) { + var index = start; + for (var i in positions) { + var position = positions[i]; + var span = document.createElement('span'); + span.innerHTML = text.substring(index, position[0]); + parent.appendChild(span); + index = position[0] + position[1]; + var highlight = document.createElement('span'); + highlight.classList.add('search-result-highlight'); + highlight.innerHTML = text.substring(position[0], index); + parent.appendChild(highlight); + } + var span = document.createElement('span'); + span.innerHTML = text.substring(index, end); + parent.appendChild(span); + } + } + + jtd.addEvent(searchInput, 'focus', function(){ + setTimeout(update, 0); + }); + + jtd.addEvent(searchInput, 'keyup', function(e){ + switch (e.keyCode) { + case 27: // When esc key is pressed, hide the results and clear the field + searchInput.value = ''; + break; + case 38: // arrow up + case 40: // arrow down + case 13: // enter + e.preventDefault(); + return; + } + update(); + }); + + jtd.addEvent(searchInput, 'keydown', function(e){ + switch (e.keyCode) { + case 38: // arrow up + e.preventDefault(); + var active = document.querySelector('.search-result.active'); + if (active) { + active.classList.remove('active'); + if (active.parentElement.previousSibling) { + var previous = active.parentElement.previousSibling.querySelector('.search-result'); + previous.classList.add('active'); + } + } + return; + case 40: // arrow down + e.preventDefault(); + var active = document.querySelector('.search-result.active'); + if (active) { + if (active.parentElement.nextSibling) { + var next = active.parentElement.nextSibling.querySelector('.search-result'); + active.classList.remove('active'); + next.classList.add('active'); + } + } else { + var next = document.querySelector('.search-result'); + if (next) { + next.classList.add('active'); + } + } + return; + case 13: // enter + e.preventDefault(); + var active = document.querySelector('.search-result.active'); + if (active) { + active.click(); + } else { + var first = document.querySelector('.search-result'); + if (first) { + first.click(); + } + } + return; + } + }); + + jtd.addEvent(document, 'click', function(e){ + if (e.target != searchInput) { + hideSearch(); + } + }); +} + +// Switch theme + +jtd.getTheme = function() { + var cssFileHref = document.querySelector('[rel="stylesheet"]').getAttribute('href'); + return cssFileHref.substring(cssFileHref.lastIndexOf('-') + 1, cssFileHref.length - 4); +} + +jtd.setTheme = function(theme) { + var cssFile = document.querySelector('[rel="stylesheet"]'); + cssFile.setAttribute('href', '/assets/css/just-the-docs-' + theme + '.css'); +} + +// Document ready + +jtd.onReady(function(){ + initNav(); + initSearch(); +}); + +})(window.jtd = window.jtd || {}); + + diff --git a/docs/assets/js/lzss.js b/docs/assets/js/lzss.js new file mode 100644 index 0000000..384dd45 --- /dev/null +++ b/docs/assets/js/lzss.js @@ -0,0 +1,557 @@ +'use strict'; + +class LZ { + stepCount = 0; + stepCountBtn; + + found = false; + outputToken = false; + index = 0; + scanningChars = ""; + + colorDefault = "#320b86"; + colorStep = "#03fcd3"; + colorCurrent = "#fcba03"; + + showMouse = false; + fullscreen = false; + + delay = 500; + autostep = false; + autostepElement; + lzss = false; + lzssElement; + + canvas; + text; + searchBufferTitle; + searchBufferText; + + outputTitle; + outputText; + + scanningTitle; + scanningText; + + texts = [] + resizeTexts = []; + + idNamespace = ""; + + async stepThrough() { + this.stepCountBtn.disabled = true; + this.highlight(this.text, this.stepCount, this.colorStep); + + var character = this.text.text[this.stepCount]; + + this.scan(character); + + await this.sleep(this.delay); + var r = await this.lookForScanningChars(); + this.found = r[0] + if (r[1] !== -1) { + this.index = r[1]; + } + if (!this.found && this.scanningChars.length > 1) { + var offset = this.searchBufferText.text.length - this.index; + var length = this.scanningChars.length - 1; + var tok = "<" + offset + "," + length + ">"; + if ((length > tok.length) || !this.lzss) + this.output(tok) + else + this.output(this.scanningChars.substring(0, this.scanningChars.length - 1)) + this.outputToken = true; + this.index = 0; + this.addToSearchBuffer(this.scanningChars.substring(0, this.scanningChars.length - 1)); + this.scanningChars = [this.scanningChars.substring(this.scanningChars.length - 1, this.scanningChars.length)]; + var r = await this.lookForScanningChars(); + this.found = r[0] + if (r[1] !== -1) { + this.index = r[1]; + } + } else if (this.found && this.stepCount == this.text.text.length - 1) { + var offset = this.searchBufferText.text.length - this.index; + var length = this.scanningChars.length; + var tok = "<" + offset + "," + length + ">"; + if ((length > tok.length) || !this.lzss) + this.output(tok) + else + this.output(this.scanningChars.substring(0, this.scanningChars.length)) + this.outputToken = true; + this.found = false; + this.index = 0; + this.addToSearchBuffer(this.scanningChars); + this.resetScanning(); + } + + this.clearHightlights(this.searchBufferText); + + this.canvas.renderAll(); + + if (!this.found && !this.outputToken) { + this.output(character); + this.addToSearchBuffer(this.scanningChars); + this.resetScanning(); + } + + if (this.outputToken) { + this.outputToken = false; + } + + if (!this.fullscreen) { + this.resizeText(); + } + + this.stepCount++; + + if (this.stepCount >= this.text.text.length) { + this.stepCountBtn.disabled = true; + if (this.idNamespace === "encode-" && document.getElementById("decode-input-text")) { + document.getElementById("decode-input-text").dispatchEvent(new Event("change")); + } + } else { + this.stepCountBtn.disabled = false; + } + + if (this.autostep && !this.stepCountBtn.disabled) { + this.stepThrough(); + } + } + + async lookForScanningChars() { + var offset = 0; + + for (var i = this.index; i < this.searchBufferText.text.length; i++) { + if (this.scanningChars.length <= offset) { + // this.found all scanning characters + return [true, i - this.scanningChars.length] + } + + this.highlightRange(this.searchBufferText, i - offset, i + this.scanningChars.length - offset, this.scanningChars, this.colorDefault); + this.highlightNoClear(this.searchBufferText, i, this.colorCurrent); + this.canvas.renderAll(); + await this.sleep(this.delay); + + var searchChar = this.searchBufferText.text[i]; + + if (this.scanningChars[offset] == searchChar) { + offset++; + } else { + offset = 0; + } + } + + return [false, -1] + } + + + output(text) { + this.outputText.text += text; + document.getElementById(this.idNamespace + "output-text").innerHTML += text; + + if (this.idNamespace === "encode-" && document.getElementById("decode-input-text")) { + document.getElementById("decode-input-text").value += text; + } + } + + addToSearchBuffer(text) { + this.searchBufferText.text += text; + this.canvas.renderAll(); + } + + scan(text) { + this.scanningChars += text; + this.scanningText.text = this.scanningChars; + this.canvas.renderAll(); + } + + resetScanning() { + this.scanningChars = ""; + this.scanningText.text = this.scanningChars; + } + + clearHightlights(textObj) { + if (textObj.highlights) { + for (var i = 0; i < textObj.highlights.length; i++) { + this.canvas.remove(textObj.highlights[i]) + } + } + textObj.highlights = []; + + if (textObj.chars) { + for (var i = 0; i < textObj.chars.length; i++) { + this.canvas.remove(textObj.chars[i]) + } + } + textObj.chars = []; + } + + highlightRange(textObj, start, end, chars, color) { + this.clearHightlights(textObj); + + this.highlightRangeNoClear(textObj, start, end, chars, color) + } + + highlightRangeNoClear(textObj, start, end, chars, color) { + for (var i = start; i < end; i++) { + var positions = this.getCharacterOfText(textObj, i); + var rect = new fabric.Rect({ + width: textObj.fontSize / 2, + height: 10, + fill: color, + left: positions[0], + top: positions[1], + }); + this.canvas.add(rect); + textObj.highlights.push(rect); + + if (chars.length > (i - start)) { + var char = new fabric.Text(chars[i - start], { + fontFamily: "Roboto Mono", + fontSize: textObj.fontSize / 2, + left: positions[0], + top: positions[1] + textObj.fontSize / 2, + }) + char.left += char.width / 2 - 3; + char.setCoords() + this.canvas.add(char) + textObj.chars.push(char) + this.canvas.renderAll(); + } + } + } + + highlightNoClear(textObj, index, color) { + var upper = index + 1; + return this.highlightRangeNoClear(textObj, index, upper, "", color); + } + + highlight(textObj, index, color) { + var upper = index + 1; + return this.highlightRange(textObj, index, upper, "", color); + } + + process() { + this.stepCount = 0; + this.stepCountBtn.disabled = false; + this.canvas.clear(); + this.found = false; + document.getElementById(this.idNamespace + "output-text").innerHTML = ""; + + if (this.idNamespace === "encode-" && document.getElementById("decode-input-text")) { + document.getElementById("decode-input-text").value = ""; + } + + var input = document.getElementById(this.idNamespace + "input-text").value; + + // create a this.text object + this.text = new fabric.Text(input, { + fontFamily: "Roboto Mono", + fontSize: 72, + selectable: false, + originX: "left", + originY: "top" + }); + + this.text.reposition = function () { + this.center(); + this.set("top", 20); + if (this.width > this.canvas.width && this.fullscreen) { + this.searchBufferText.left = this.left; + this.searchBufferTitle.left = this.left; + this.outputTitle.left = this.left; + this.outputText.left = this.left; + this.scanningTitle.left = this.left; + this.scanningText.left = this.left; + } + } + + this.canvas.add(this.text); + + this.searchBufferTitle = new fabric.Text("Search Buffer:", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (2 / 4), + selectable: false, + }); + this.searchBufferText = new fabric.Text("", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (2 / 4) + 36, + selectable: false, + }); + + this.searchBufferText.reposition = function () { + this.left = 0; + this.top = this.canvas.height * (2 / 4) + 36; + this.setCoords(); + } + + this.canvas.add(this.searchBufferText); + this.canvas.add(this.searchBufferTitle); + + + this.outputTitle = new fabric.Text("Output:", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (3 / 4), + selectable: false, + }); + this.outputText = new fabric.Text("", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (3 / 4) + 36, + selectable: false, + }); + + this.outputText.reposition = function () { + this.left = 0; + this.top = this.canvas.height * (3 / 4) + 36; + this.setCoords(); + } + + this.canvas.add(this.outputTitle); + this.canvas.add(this.outputText); + + this.scanningTitle = new fabric.Text("Scanning:", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (1 / 4), + selectable: false, + }); + this.scanningText = new fabric.Text("", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (1 / 4) + 36, + selectable: false, + }); + + this.scanningText.reposition = function () { + this.left = 0; + this.top = this.canvas.height * (1 / 4) + 36; + this.setCoords(); + } + + this.canvas.add(this.scanningTitle); + this.canvas.add(this.scanningText); + + // this.text.set("selecteable", false) + + this.texts = [this.searchBufferTitle, this.scanningTitle, this.outputTitle, this.searchBufferText, this.scanningText, this.outputText, this.text] + this.resizeTexts = [this.searchBufferText, this.scanningText, this.outputText, this.text] + + if (this.showMouse) { + var coords = new fabric.Text(" , ", { + fontFamily: "Roboto Mono", + }); + this.canvas.add(coords); + coords.adjustPosition("left"); + coords.top = this.canvas.height - 80; + + console.log(this.text.left + ", " + this.text.top); + + this.canvas.on("mouse:move", function (options) { + var pointer = this.canvas.getPointer(event.e); + var posX = pointer.x; + var posY = pointer.y; + coords.text = posX + ", " + posY; + this.canvas.renderAll(); + }); + } + + if (!this.fullscreen) { + this.resizeText(); + } + + this.text.reposition(); + if (this.text.width > this.canvas.width && this.fullscreen) { + this.canvas.zoomToPoint(new fabric.Point(this.text.left + (this.text.width / 2), this.text.top + (this.text.height / 2)), (this.canvas.width / (this.text.width))); + } + this.canvas.renderAll(); + + this.checkAutostep(); + this.checkLzss(); + } + + + resizeText() { + var _this = this; + this.resizeTexts.forEach(function (textObj) { + while (textObj.width > _this.canvas.width) { + textObj.fontSize--; + _this.canvas.renderAll(); + // console.log(textObj.fontSize) + } + if (textObj.reposition) { + textObj.reposition(); + } + }); + this.canvas.renderAll(); + } + + getCharacterOfText(text, characterIndex) { + var x = text.left; + var y = text.top; + + y = y + text.fontSize; + + var characterWidth = text.width / text.text.length; + x = x + characterWidth * characterIndex; + + return [x, y]; + } + + constructor({ ns = "encode-", fs = false }) { + this.idNamespace = ns; + this.fullscreen = fs; + + var _this = this; + window.addEventListener("load", function () { _this.load(); }); + if (document.readyState === "complete") { this.load(); } + } + + load() { + var _this = this; + document.getElementById(this.idNamespace + "form").onsubmit = function () { + _this.process(); + return false; + }; + + this.stepCountBtn = document.getElementById(this.idNamespace + "step"); + + this.stepCountBtn.addEventListener("click", function () { + _this.stepThrough(); + }); + + this.canvas = document.getElementById(this.idNamespace + "canvas"); + if (!this.canvas.getContext) { + alert("Please use a browser that supports an HTML5 this.canvas"); + } + + // create a wrapper around native this.canvas element (with id="this.canvas") + this.canvas = new fabric.Canvas(this.idNamespace + "canvas", { + selection: false, + evented: false, + enableRetinaScaling: true + }); + + if (this.fullscreen) { + this.canvas.defaultCursor = "all-scroll"; + this.canvas.hoverCursor = "all-scroll"; + } else { + this.canvas.defaultCursor = "default"; + this.canvas.hoverCursor = "default"; + } + + this.canvas.setDimensions({ + width: document.getElementById(this.idNamespace + "canvas-container-jtd").offsetWidth, + height: document.getElementById(this.idNamespace + "canvas-container-jtd").offsetHeight, + }); + + var slider = document.getElementById(this.idNamespace + 'speed-slider'); + + noUiSlider.create(slider, { + start: [150], + range: { + 'min': [0], + 'max': [2500] + }, + step: 50, + connect: true, + }); + + + + var sliderValueElement = document.getElementById(this.idNamespace + 'slider-range-value'); + + slider.noUiSlider.on('update', function (values, handle) { + _this.delay = values[handle]; + sliderValueElement.innerHTML = values[handle]; + }); + + this.autostepElement = document.getElementById(this.idNamespace + "autostep"); + this.autostepElement.addEventListener('change', function () { _this.checkAutostep(); }); + + this.lzssElement = document.getElementById("lzss"); + this.lzssElement.addEventListener('change', function () { _this.checkLzss }) + + document.getElementById(this.idNamespace + "input-text").addEventListener("change", function () { + _this.process(); + }) + + if (this.fullscreen) { + this.canvas.on('mouse:down', function (opt) { + var evt = opt.e; + this.isDragging = true; + this.selection = false; + this.lastPosX = evt.clientX; + this.lastPosY = evt.clientY; + }); + this.canvas.on('mouse:move', function (opt) { + if (this.isDragging) { + var e = opt.e; + var vpt = this.viewportTransform; + vpt[4] += e.clientX - this.lastPosX; + vpt[5] += e.clientY - this.lastPosY; + this.requestRenderAll(); + this.lastPosX = e.clientX; + this.lastPosY = e.clientY; + } + }); + this.canvas.on('mouse:up', function (opt) { + // on mouse up we want to recalculate new interaction + // for all objects, so we call setViewportTransform + this.setViewportTransform(this.viewportTransform); + this.isDragging = false; + this.selection = true; + }); + this.canvas.on('mouse:wheel', function (opt) { + var delta = opt.e.deltaY; + var zoom = this.canvas.getZoom(); + zoom *= 0.990 ** delta; + if (zoom > 20) zoom = 20; + if (zoom < 0.01) zoom = 0.01; + this.canvas.zoomToPoint({ x: opt.e.offsetX, y: opt.e.offsetY }, zoom); + opt.e.preventDefault(); + opt.e.stopPropagation(); + this.texts.forEach(function (textObj) { + console.log(textObj); + this.canvas.remove(textObj); + this.canvas.add(textObj); + }); + }) + } + this.process(); + } + + checkAutostep() { + if (this.autostepElement.checked) { + this.autostep = true; + if (!this.stepCountBtn.disabled) { + this.stepThrough(); + } + } else { + this.autostep = false; + } + } + + checkLzss() { + if (this.lzssElement.checked) { + this.lzss = true; + } else { + this.lzss = false; + } + } + + + + sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } +} \ No newline at end of file diff --git a/docs/assets/js/lzss_decode.js b/docs/assets/js/lzss_decode.js new file mode 100644 index 0000000..33b8fb5 --- /dev/null +++ b/docs/assets/js/lzss_decode.js @@ -0,0 +1,332 @@ +'use strict'; + +class LZDecoder extends LZ { + constructor(...args) { + super(...args); + this.colorStepToken = "#e042f5" + this.inToken = false; + this.parseOffset = false; + + this.offsetText = "Token Offset: " + this.lengthText = "Token Length: " + } + + async stepThrough() { + this.stepCountBtn.disabled = true; + this.highlight(this.text, this.stepCount, this.inToken ? this.colorStepToken : this.colorStep); + + var character = this.text.text[this.stepCount]; + + this.scan(character); + + await this.sleep(this.delay / 2); + + if (character === "<") { + this.inToken = true; + this.parseOffset = true; + + this.clearHightlights(this.text); + this.highlight(this.text, this.stepCount, this.colorStepToken); + + this.tokenOffset.fontWeight = "bold"; + } else if (character === ">") { + this.inToken = false; + this.tokenLength.fontWeight = "normal"; + + var offset = parseInt(this.tokenOffset.text.substr(this.offsetText.length, this.tokenOffset.length)); + var length = parseInt(this.tokenLength.text.substr(this.lengthText.length, this.tokenLength.length)); + + for (var i = 0; i <= offset; i++) { + var start = this.outputText.text.length - i; + var end = this.outputText.text.length - i + length; + this.highlightRange(this.outputText, start, end, (offset - i).toString() + " ".repeat(length - 1), this.colorCurrent); + await this.sleep(this.delay); + } + this.clearHightlights(this.outputText) + await this.sleep(this.delay / 2) + this.output(this.outputText.text.substr(this.outputText.text.length - offset, length)) + + this.tokenOffset.text = this.offsetText; + this.tokenLength.text = this.lengthText; + } else if (character === ",") { + this.parseOffset = false; + this.tokenOffset.fontWeight = "normal"; + this.tokenLength.fontWeight = "bold"; + } else if (this.inToken) { + if (this.parseOffset) { + this.tokenOffset.text += character; + } else { + this.tokenLength.text += character; + } + } else { + this.output(character); + } + + await this.sleep(this.delay / 2); + + this.resetScanning(); + + this.canvas.renderAll(); + + if (!this.fullscreen) { + this.resizeText(); + } + + this.stepCount++; + + if (this.stepCount >= this.text.text.length) { + this.stepCountBtn.disabled = true; + } else { + this.stepCountBtn.disabled = false; + } + + if (this.autostep && !this.stepCountBtn.disabled) { + this.stepThrough(); + } + } + + process() { + this.stepCount = 0; + this.stepCountBtn.disabled = false; + this.canvas.clear(); + this.found = false; + document.getElementById(this.idNamespace + "output-text").innerHTML = ""; + + var input = document.getElementById(this.idNamespace + "input-text").value; + + // create a this.text object + this.text = new fabric.Text(input, { + fontFamily: "Roboto Mono", + fontSize: 72, + selectable: false, + originX: "left", + originY: "top" + }); + + this.text.reposition = function () { + this.center(); + this.set("top", 20); + if (this.width > this.canvas.width && this.fullscreen) { + this.outputTitle.left = this.left; + this.outputText.left = this.left; + this.scanningTitle.left = this.left; + this.scanningText.left = this.left; + } + } + + this.canvas.add(this.text); + + this.tokenOffset = new fabric.Text(this.offsetText, { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (1 / 4), + selectable: false, + }); + this.tokenLength = new fabric.Text(this.lengthText, { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (1 / 4) + (36 * 2), + selectable: false, + }); + + this.canvas.add(this.tokenOffset); + this.canvas.add(this.tokenLength); + + this.outputTitle = new fabric.Text("Output:", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (3 / 4), + selectable: false, + }); + this.outputText = new fabric.Text("", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (3 / 4) + 36, + selectable: false, + }); + + this.outputText.reposition = function () { + this.left = 0; + this.top = this.canvas.height * (3 / 4) + 36; + this.setCoords(); + } + + this.canvas.add(this.outputTitle); + this.canvas.add(this.outputText); + + this.scanningTitle = new fabric.Text("Scanning:", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (2 / 4), + selectable: false, + }); + this.scanningText = new fabric.Text("", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (2 / 4) + 36, + selectable: false, + }); + + this.scanningText.reposition = function () { + this.left = 0; + this.top = this.canvas.height * (2 / 4) + 36; + this.setCoords(); + } + + this.canvas.add(this.scanningTitle); + this.canvas.add(this.scanningText); + + // this.text.set("selecteable", false) + + this.texts = [this.scanningTitle, this.outputTitle, this.scanningText, this.outputText, this.text] + this.resizeTexts = [this.scanningText, this.outputText, this.text] + + if (this.showMouse) { + var coords = new fabric.Text(" , ", { + fontFamily: "Roboto Mono", + }); + this.canvas.add(coords); + coords.adjustPosition("left"); + coords.top = this.canvas.height - 80; + + console.log(this.text.left + ", " + this.text.top); + + this.canvas.on("mouse:move", function (options) { + var pointer = this.canvas.getPointer(event.e); + var posX = pointer.x; + var posY = pointer.y; + coords.text = posX + ", " + posY; + this.canvas.renderAll(); + }); + } + + if (!this.fullscreen) { + this.resizeText(); + } + + this.text.reposition(); + if (this.text.width > this.canvas.width && this.fullscreen) { + this.canvas.zoomToPoint(new fabric.Point(this.text.left + (this.text.width / 2), this.text.top + (this.text.height / 2)), (this.canvas.width / (this.text.width))); + } + this.canvas.renderAll(); + + this.checkAutostep(); + } + + load() { + var _this = this; + document.getElementById(this.idNamespace + "form").onsubmit = function () { + _this.process(); + return false; + }; + + this.stepCountBtn = document.getElementById(this.idNamespace + "step"); + + this.stepCountBtn.addEventListener("click", function () { + _this.stepThrough(); + }); + + this.canvas = document.getElementById(this.idNamespace + "canvas"); + if (!this.canvas.getContext) { + alert("Please use a browser that supports an HTML5 this.canvas"); + } + + // create a wrapper around native this.canvas element (with id="this.canvas") + this.canvas = new fabric.Canvas(this.idNamespace + "canvas", { + selection: false, + evented: false, + enableRetinaScaling: true + }); + + if (this.fullscreen) { + this.canvas.defaultCursor = "all-scroll"; + this.canvas.hoverCursor = "all-scroll"; + } else { + this.canvas.defaultCursor = "default"; + this.canvas.hoverCursor = "default"; + } + + this.canvas.setDimensions({ + width: document.getElementById(this.idNamespace + "canvas-container-jtd").offsetWidth, + height: document.getElementById(this.idNamespace + "canvas-container-jtd").offsetHeight, + }); + + var slider = document.getElementById(this.idNamespace + 'speed-slider'); + + noUiSlider.create(slider, { + start: [150], + range: { + 'min': [0], + 'max': [2500] + }, + step: 50, + connect: true, + }); + + + + var sliderValueElement = document.getElementById(this.idNamespace + 'slider-range-value'); + + slider.noUiSlider.on('update', function (values, handle) { + _this.delay = values[handle]; + sliderValueElement.innerHTML = values[handle]; + }); + + this.autostepElement = document.getElementById(this.idNamespace + "autostep"); + this.autostepElement.addEventListener('change', function () { _this.checkAutostep(); }); + + document.getElementById(this.idNamespace + "input-text").addEventListener("change", function () { + _this.process(); + }) + + if (this.fullscreen) { + this.canvas.on('mouse:down', function (opt) { + var evt = opt.e; + this.isDragging = true; + this.selection = false; + this.lastPosX = evt.clientX; + this.lastPosY = evt.clientY; + }); + this.canvas.on('mouse:move', function (opt) { + if (this.isDragging) { + var e = opt.e; + var vpt = this.viewportTransform; + vpt[4] += e.clientX - this.lastPosX; + vpt[5] += e.clientY - this.lastPosY; + this.requestRenderAll(); + this.lastPosX = e.clientX; + this.lastPosY = e.clientY; + } + }); + this.canvas.on('mouse:up', function (opt) { + // on mouse up we want to recalculate new interaction + // for all objects, so we call setViewportTransform + this.setViewportTransform(this.viewportTransform); + this.isDragging = false; + this.selection = true; + }); + this.canvas.on('mouse:wheel', function (opt) { + var delta = opt.e.deltaY; + var zoom = this.canvas.getZoom(); + zoom *= 0.990 ** delta; + if (zoom > 20) zoom = 20; + if (zoom < 0.01) zoom = 0.01; + this.canvas.zoomToPoint({ x: opt.e.offsetX, y: opt.e.offsetY }, zoom); + opt.e.preventDefault(); + opt.e.stopPropagation(); + this.texts.forEach(function (textObj) { + console.log(textObj); + this.canvas.remove(textObj); + this.canvas.add(textObj); + }); + }) + } + this.process(); + } +} \ No newline at end of file diff --git a/docs/assets/js/lzss_decode_fs.js b/docs/assets/js/lzss_decode_fs.js new file mode 100644 index 0000000..e092eef --- /dev/null +++ b/docs/assets/js/lzss_decode_fs.js @@ -0,0 +1,5 @@ +'use strict'; + +(function () { + var encode = new LZ({ ns: "decode-", fs: true }) +})(); \ No newline at end of file diff --git a/docs/assets/js/lzss_encode.js b/docs/assets/js/lzss_encode.js new file mode 100644 index 0000000..cb7facb --- /dev/null +++ b/docs/assets/js/lzss_encode.js @@ -0,0 +1,5 @@ +'use strict'; + +(function () { + var encode = new LZ({ ns: "encode-" }) +})(); \ No newline at end of file diff --git a/docs/assets/js/lzss_encode_fs.js b/docs/assets/js/lzss_encode_fs.js new file mode 100644 index 0000000..294a213 --- /dev/null +++ b/docs/assets/js/lzss_encode_fs.js @@ -0,0 +1,5 @@ +'use strict'; + +(function () { + var encode = new LZ({ ns: "encode-", fs: true }) +})(); \ No newline at end of file diff --git a/docs/assets/js/nouislider.min.js b/docs/assets/js/nouislider.min.js new file mode 100644 index 0000000..4b68f9e --- /dev/null +++ b/docs/assets/js/nouislider.min.js @@ -0,0 +1,2 @@ +/*! nouislider - 14.6.1 - 8/17/2020 */ +!function(t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():window.noUiSlider=t()}(function(){"use strict";var lt="14.6.1";function ut(t){t.parentElement.removeChild(t)}function a(t){return null!=t}function ct(t){t.preventDefault()}function o(t){return"number"==typeof t&&!isNaN(t)&&isFinite(t)}function pt(t,e,r){0=e[r];)r+=1;return r}function r(t,e,r){if(r>=t.slice(-1)[0])return 100;var n,i,o=f(r,t),s=t[o-1],a=t[o],l=e[o-1],u=e[o];return l+(i=r,p(n=[s,a],n[0]<0?i+Math.abs(n[0]):i-n[0],0)/c(l,u))}function n(t,e,r,n){if(100===n)return n;var i,o,s=f(n,t),a=t[s-1],l=t[s];return r?(l-a)/2this.xPct[i+1];)i++;else t===this.xPct[this.xPct.length-1]&&(i=this.xPct.length-2);r||t!==this.xPct[i+1]||i++;var o=1,s=e[i],a=0,l=0,u=0,c=0;for(n=r?(t-this.xPct[i])/(this.xPct[i+1]-this.xPct[i]):(this.xPct[i+1]-t)/(this.xPct[i+1]-this.xPct[i]);0= 2) required for mode 'count'.");var n=e-1,i=100/n;for(e=[];n--;)e[n]=n*i;e.push(100),t="positions"}return"positions"===t?e.map(function(t){return y.fromStepping(r?y.getStep(t):t)}):"values"===t?r?e.map(function(t){return y.fromStepping(y.getStep(y.toStepping(t)))}):e:void 0}(n,t.values||!1,t.stepped||!1),a=(m=i,g=n,v=s,b={},e=y.xVal[0],r=y.xVal[y.xVal.length-1],S=x=!1,w=0,(v=v.slice().sort(function(t,e){return t-e}).filter(function(t){return!this[t]&&(this[t]=!0)},{}))[0]!==e&&(v.unshift(e),x=!0),v[v.length-1]!==r&&(v.push(r),S=!0),v.forEach(function(t,e){var r,n,i,o,s,a,l,u,c,p,f=t,d=v[e+1],h="steps"===g;if(h&&(r=y.xNumSteps[e]),r||(r=d-f),!1!==f)for(void 0===d&&(d=f),r=Math.max(r,1e-7),n=f;n<=d;n=(n+r).toFixed(7)/1){for(u=(s=(o=y.toStepping(n))-w)/m,p=s/(c=Math.round(u)),i=1;i<=c;i+=1)b[(a=w+i*p).toFixed(5)]=[y.fromStepping(a),0];l=-1r.stepAfter.startValue&&(i=r.stepAfter.startValue-n),o=n>r.thisStep.startValue?r.thisStep.step:!1!==r.stepBefore.step&&n-r.stepBefore.highestStep,100===e?i=null:0===e&&(o=null);var s=y.countStepDecimals();return null!==i&&!1!==i&&(i=Number(i.toFixed(s))),null!==o&&!1!==o&&(o=Number(o.toFixed(s))),[o,i]}return ht(e=h,b.cssClasses.target),0===b.dir?ht(e,b.cssClasses.ltr):ht(e,b.cssClasses.rtl),0===b.ort?ht(e,b.cssClasses.horizontal):ht(e,b.cssClasses.vertical),ht(e,"rtl"===getComputedStyle(e).direction?b.cssClasses.textDirectionRtl:b.cssClasses.textDirectionLtr),l=V(e,b.cssClasses.base),function(t,e){var r=V(e,b.cssClasses.connects);u=[],(s=[]).push(M(r,t[0]));for(var n=0;n0){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/docs/assets/js/wasm_exec.js b/docs/assets/js/wasm_exec.js new file mode 100644 index 0000000..8501ae7 --- /dev/null +++ b/docs/assets/js/wasm_exec.js @@ -0,0 +1,588 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +(() => { + // Map multiple JavaScript environments to a single common API, + // preferring web standards over Node.js API. + // + // Environments considered: + // - Browsers + // - Node.js + // - Electron + // - Parcel + + if (typeof global !== "undefined") { + // global already exists + } else if (typeof window !== "undefined") { + window.global = window; + } else if (typeof self !== "undefined") { + self.global = self; + } else { + throw new Error("cannot export Go (neither global, window nor self is defined)"); + } + + if (!global.require && typeof require !== "undefined") { + global.require = require; + } + + if (!global.fs && global.require) { + const fs = require("fs"); + if (Object.keys(fs) !== 0) { + global.fs = fs; + } + } + + const enosys = () => { + const err = new Error("not implemented"); + err.code = "ENOSYS"; + return err; + }; + + if (!global.fs) { + let outputBuf = ""; + global.fs = { + constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused + writeSync(fd, buf) { + outputBuf += decoder.decode(buf); + const nl = outputBuf.lastIndexOf("\n"); + if (nl != -1) { + console.log(outputBuf.substr(0, nl)); + outputBuf = outputBuf.substr(nl + 1); + } + return buf.length; + }, + write(fd, buf, offset, length, position, callback) { + if (offset !== 0 || length !== buf.length || position !== null) { + callback(enosys()); + return; + } + const n = this.writeSync(fd, buf); + callback(null, n); + }, + chmod(path, mode, callback) { callback(enosys()); }, + chown(path, uid, gid, callback) { callback(enosys()); }, + close(fd, callback) { callback(enosys()); }, + fchmod(fd, mode, callback) { callback(enosys()); }, + fchown(fd, uid, gid, callback) { callback(enosys()); }, + fstat(fd, callback) { callback(enosys()); }, + fsync(fd, callback) { callback(null); }, + ftruncate(fd, length, callback) { callback(enosys()); }, + lchown(path, uid, gid, callback) { callback(enosys()); }, + link(path, link, callback) { callback(enosys()); }, + lstat(path, callback) { callback(enosys()); }, + mkdir(path, perm, callback) { callback(enosys()); }, + open(path, flags, mode, callback) { callback(enosys()); }, + read(fd, buffer, offset, length, position, callback) { callback(enosys()); }, + readdir(path, callback) { callback(enosys()); }, + readlink(path, callback) { callback(enosys()); }, + rename(from, to, callback) { callback(enosys()); }, + rmdir(path, callback) { callback(enosys()); }, + stat(path, callback) { callback(enosys()); }, + symlink(path, link, callback) { callback(enosys()); }, + truncate(path, length, callback) { callback(enosys()); }, + unlink(path, callback) { callback(enosys()); }, + utimes(path, atime, mtime, callback) { callback(enosys()); }, + }; + } + + if (!global.process) { + global.process = { + getuid() { return -1; }, + getgid() { return -1; }, + geteuid() { return -1; }, + getegid() { return -1; }, + getgroups() { throw enosys(); }, + pid: -1, + ppid: -1, + umask() { throw enosys(); }, + cwd() { throw enosys(); }, + chdir() { throw enosys(); }, + } + } + + if (!global.crypto) { + const nodeCrypto = require("crypto"); + global.crypto = { + getRandomValues(b) { + nodeCrypto.randomFillSync(b); + }, + }; + } + + if (!global.performance) { + global.performance = { + now() { + const [sec, nsec] = process.hrtime(); + return sec * 1000 + nsec / 1000000; + }, + }; + } + + if (!global.TextEncoder) { + global.TextEncoder = require("util").TextEncoder; + } + + if (!global.TextDecoder) { + global.TextDecoder = require("util").TextDecoder; + } + + // End of polyfills for common API. + + const encoder = new TextEncoder("utf-8"); + const decoder = new TextDecoder("utf-8"); + + global.Go = class { + constructor() { + this.argv = ["js"]; + this.env = {}; + this.exit = (code) => { + if (code !== 0) { + console.warn("exit code:", code); + } + }; + this._exitPromise = new Promise((resolve) => { + this._resolveExitPromise = resolve; + }); + this._pendingEvent = null; + this._scheduledTimeouts = new Map(); + this._nextCallbackTimeoutID = 1; + + const setInt64 = (addr, v) => { + this.mem.setUint32(addr + 0, v, true); + this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true); + } + + const getInt64 = (addr) => { + const low = this.mem.getUint32(addr + 0, true); + const high = this.mem.getInt32(addr + 4, true); + return low + high * 4294967296; + } + + const loadValue = (addr) => { + const f = this.mem.getFloat64(addr, true); + if (f === 0) { + return undefined; + } + if (!isNaN(f)) { + return f; + } + + const id = this.mem.getUint32(addr, true); + return this._values[id]; + } + + const storeValue = (addr, v) => { + const nanHead = 0x7FF80000; + + if (typeof v === "number" && v !== 0) { + if (isNaN(v)) { + this.mem.setUint32(addr + 4, nanHead, true); + this.mem.setUint32(addr, 0, true); + return; + } + this.mem.setFloat64(addr, v, true); + return; + } + + if (v === undefined) { + this.mem.setFloat64(addr, 0, true); + return; + } + + let id = this._ids.get(v); + if (id === undefined) { + id = this._idPool.pop(); + if (id === undefined) { + id = this._values.length; + } + this._values[id] = v; + this._goRefCounts[id] = 0; + this._ids.set(v, id); + } + this._goRefCounts[id]++; + let typeFlag = 0; + switch (typeof v) { + case "object": + if (v !== null) { + typeFlag = 1; + } + break; + case "string": + typeFlag = 2; + break; + case "symbol": + typeFlag = 3; + break; + case "function": + typeFlag = 4; + break; + } + this.mem.setUint32(addr + 4, nanHead | typeFlag, true); + this.mem.setUint32(addr, id, true); + } + + const loadSlice = (addr) => { + const array = getInt64(addr + 0); + const len = getInt64(addr + 8); + return new Uint8Array(this._inst.exports.mem.buffer, array, len); + } + + const loadSliceOfValues = (addr) => { + const array = getInt64(addr + 0); + const len = getInt64(addr + 8); + const a = new Array(len); + for (let i = 0; i < len; i++) { + a[i] = loadValue(array + i * 8); + } + return a; + } + + const loadString = (addr) => { + const saddr = getInt64(addr + 0); + const len = getInt64(addr + 8); + return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len)); + } + + const timeOrigin = Date.now() - performance.now(); + this.importObject = { + go: { + // Go's SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters) + // may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported + // function. A goroutine can switch to a new stack if the current stack is too small (see morestack function). + // This changes the SP, thus we have to update the SP used by the imported function. + + // func wasmExit(code int32) + "runtime.wasmExit": (sp) => { + const code = this.mem.getInt32(sp + 8, true); + this.exited = true; + delete this._inst; + delete this._values; + delete this._goRefCounts; + delete this._ids; + delete this._idPool; + this.exit(code); + }, + + // func wasmWrite(fd uintptr, p unsafe.Pointer, n int32) + "runtime.wasmWrite": (sp) => { + const fd = getInt64(sp + 8); + const p = getInt64(sp + 16); + const n = this.mem.getInt32(sp + 24, true); + fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n)); + }, + + // func resetMemoryDataView() + "runtime.resetMemoryDataView": (sp) => { + this.mem = new DataView(this._inst.exports.mem.buffer); + }, + + // func nanotime1() int64 + "runtime.nanotime1": (sp) => { + setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000); + }, + + // func walltime1() (sec int64, nsec int32) + "runtime.walltime1": (sp) => { + const msec = (new Date).getTime(); + setInt64(sp + 8, msec / 1000); + this.mem.setInt32(sp + 16, (msec % 1000) * 1000000, true); + }, + + // func scheduleTimeoutEvent(delay int64) int32 + "runtime.scheduleTimeoutEvent": (sp) => { + const id = this._nextCallbackTimeoutID; + this._nextCallbackTimeoutID++; + this._scheduledTimeouts.set(id, setTimeout( + () => { + this._resume(); + while (this._scheduledTimeouts.has(id)) { + // for some reason Go failed to register the timeout event, log and try again + // (temporary workaround for https://github.com/golang/go/issues/28975) + console.warn("scheduleTimeoutEvent: missed timeout event"); + this._resume(); + } + }, + getInt64(sp + 8) + 1, // setTimeout has been seen to fire up to 1 millisecond early + )); + this.mem.setInt32(sp + 16, id, true); + }, + + // func clearTimeoutEvent(id int32) + "runtime.clearTimeoutEvent": (sp) => { + const id = this.mem.getInt32(sp + 8, true); + clearTimeout(this._scheduledTimeouts.get(id)); + this._scheduledTimeouts.delete(id); + }, + + // func getRandomData(r []byte) + "runtime.getRandomData": (sp) => { + crypto.getRandomValues(loadSlice(sp + 8)); + }, + + // func finalizeRef(v ref) + "syscall/js.finalizeRef": (sp) => { + const id = this.mem.getUint32(sp + 8, true); + this._goRefCounts[id]--; + if (this._goRefCounts[id] === 0) { + const v = this._values[id]; + this._values[id] = null; + this._ids.delete(v); + this._idPool.push(id); + } + }, + + // func stringVal(value string) ref + "syscall/js.stringVal": (sp) => { + storeValue(sp + 24, loadString(sp + 8)); + }, + + // func valueGet(v ref, p string) ref + "syscall/js.valueGet": (sp) => { + const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16)); + sp = this._inst.exports.getsp(); // see comment above + storeValue(sp + 32, result); + }, + + // func valueSet(v ref, p string, x ref) + "syscall/js.valueSet": (sp) => { + Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32)); + }, + + // func valueDelete(v ref, p string) + "syscall/js.valueDelete": (sp) => { + Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16)); + }, + + // func valueIndex(v ref, i int) ref + "syscall/js.valueIndex": (sp) => { + storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16))); + }, + + // valueSetIndex(v ref, i int, x ref) + "syscall/js.valueSetIndex": (sp) => { + Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24)); + }, + + // func valueCall(v ref, m string, args []ref) (ref, bool) + "syscall/js.valueCall": (sp) => { + try { + const v = loadValue(sp + 8); + const m = Reflect.get(v, loadString(sp + 16)); + const args = loadSliceOfValues(sp + 32); + const result = Reflect.apply(m, v, args); + sp = this._inst.exports.getsp(); // see comment above + storeValue(sp + 56, result); + this.mem.setUint8(sp + 64, 1); + } catch (err) { + storeValue(sp + 56, err); + this.mem.setUint8(sp + 64, 0); + } + }, + + // func valueInvoke(v ref, args []ref) (ref, bool) + "syscall/js.valueInvoke": (sp) => { + try { + const v = loadValue(sp + 8); + const args = loadSliceOfValues(sp + 16); + const result = Reflect.apply(v, undefined, args); + sp = this._inst.exports.getsp(); // see comment above + storeValue(sp + 40, result); + this.mem.setUint8(sp + 48, 1); + } catch (err) { + storeValue(sp + 40, err); + this.mem.setUint8(sp + 48, 0); + } + }, + + // func valueNew(v ref, args []ref) (ref, bool) + "syscall/js.valueNew": (sp) => { + try { + const v = loadValue(sp + 8); + const args = loadSliceOfValues(sp + 16); + const result = Reflect.construct(v, args); + sp = this._inst.exports.getsp(); // see comment above + storeValue(sp + 40, result); + this.mem.setUint8(sp + 48, 1); + } catch (err) { + storeValue(sp + 40, err); + this.mem.setUint8(sp + 48, 0); + } + }, + + // func valueLength(v ref) int + "syscall/js.valueLength": (sp) => { + setInt64(sp + 16, parseInt(loadValue(sp + 8).length)); + }, + + // valuePrepareString(v ref) (ref, int) + "syscall/js.valuePrepareString": (sp) => { + const str = encoder.encode(String(loadValue(sp + 8))); + storeValue(sp + 16, str); + setInt64(sp + 24, str.length); + }, + + // valueLoadString(v ref, b []byte) + "syscall/js.valueLoadString": (sp) => { + const str = loadValue(sp + 8); + loadSlice(sp + 16).set(str); + }, + + // func valueInstanceOf(v ref, t ref) bool + "syscall/js.valueInstanceOf": (sp) => { + this.mem.setUint8(sp + 24, (loadValue(sp + 8) instanceof loadValue(sp + 16)) ? 1 : 0); + }, + + // func copyBytesToGo(dst []byte, src ref) (int, bool) + "syscall/js.copyBytesToGo": (sp) => { + const dst = loadSlice(sp + 8); + const src = loadValue(sp + 32); + if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) { + this.mem.setUint8(sp + 48, 0); + return; + } + const toCopy = src.subarray(0, dst.length); + dst.set(toCopy); + setInt64(sp + 40, toCopy.length); + this.mem.setUint8(sp + 48, 1); + }, + + // func copyBytesToJS(dst ref, src []byte) (int, bool) + "syscall/js.copyBytesToJS": (sp) => { + const dst = loadValue(sp + 8); + const src = loadSlice(sp + 16); + if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) { + this.mem.setUint8(sp + 48, 0); + return; + } + const toCopy = src.subarray(0, dst.length); + dst.set(toCopy); + setInt64(sp + 40, toCopy.length); + this.mem.setUint8(sp + 48, 1); + }, + + "debug": (value) => { + console.log(value); + }, + } + }; + } + + async run(instance) { + this._inst = instance; + this.mem = new DataView(this._inst.exports.mem.buffer); + this._values = [ // JS values that Go currently has references to, indexed by reference id + NaN, + 0, + null, + true, + false, + global, + this, + ]; + this._goRefCounts = new Array(this._values.length).fill(Infinity); // number of references that Go has to a JS value, indexed by reference id + this._ids = new Map([ // mapping from JS values to reference ids + [0, 1], + [null, 2], + [true, 3], + [false, 4], + [global, 5], + [this, 6], + ]); + this._idPool = []; // unused ids that have been garbage collected + this.exited = false; // whether the Go program has exited + + // Pass command line arguments and environment variables to WebAssembly by writing them to the linear memory. + let offset = 4096; + + const strPtr = (str) => { + const ptr = offset; + const bytes = encoder.encode(str + "\0"); + new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes); + offset += bytes.length; + if (offset % 8 !== 0) { + offset += 8 - (offset % 8); + } + return ptr; + }; + + const argc = this.argv.length; + + const argvPtrs = []; + this.argv.forEach((arg) => { + argvPtrs.push(strPtr(arg)); + }); + argvPtrs.push(0); + + const keys = Object.keys(this.env).sort(); + keys.forEach((key) => { + argvPtrs.push(strPtr(`${key}=${this.env[key]}`)); + }); + argvPtrs.push(0); + + const argv = offset; + argvPtrs.forEach((ptr) => { + this.mem.setUint32(offset, ptr, true); + this.mem.setUint32(offset + 4, 0, true); + offset += 8; + }); + + this._inst.exports.run(argc, argv); + if (this.exited) { + this._resolveExitPromise(); + } + await this._exitPromise; + } + + _resume() { + if (this.exited) { + throw new Error("Go program has already exited"); + } + this._inst.exports.resume(); + if (this.exited) { + this._resolveExitPromise(); + } + } + + _makeFuncWrapper(id) { + const go = this; + return function () { + const event = { id: id, this: this, args: arguments }; + go._pendingEvent = event; + go._resume(); + return event.result; + }; + } + } + + if ( + global.require && + global.require.main === module && + global.process && + global.process.versions && + !global.process.versions.electron + ) { + if (process.argv.length < 3) { + console.error("usage: go_js_wasm_exec [wasm binary] [arguments]"); + process.exit(1); + } + + const go = new Go(); + go.argv = process.argv.slice(2); + go.env = Object.assign({ TMPDIR: require("os").tmpdir() }, process.env); + go.exit = process.exit; + WebAssembly.instantiate(fs.readFileSync(process.argv[2]), go.importObject).then((result) => { + process.on("exit", (code) => { // Node.js exits if no event handler is pending + if (code === 0 && !go.exited) { + // deadlock, make Go print error and stack traces + go._pendingEvent = { id: 0 }; + go._resume(); + } + }); + return go.run(result.instance); + }).catch((err) => { + console.error(err); + process.exit(1); + }); + } +})(); diff --git a/docs/assets/wasm/arithmetic.wasm b/docs/assets/wasm/arithmetic.wasm new file mode 100755 index 0000000..2651d62 Binary files /dev/null and b/docs/assets/wasm/arithmetic.wasm differ diff --git a/docs/attributions/index.html b/docs/attributions/index.html new file mode 100644 index 0000000..b964081 --- /dev/null +++ b/docs/attributions/index.html @@ -0,0 +1,106 @@ + + + + + + +Attributions - The Hitchhiker's Guide to Compression + + +Attributions | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+

Attributions

+

This non-exhaustive list of wonderful projects, frameworks, tools, and libraries were used to help build this website.

+ +
+ +
+
+
+ + diff --git a/docs/contributing/index.html b/docs/contributing/index.html new file mode 100644 index 0000000..a6bb2bd --- /dev/null +++ b/docs/contributing/index.html @@ -0,0 +1,99 @@ + + + + + + +Contributing - The Hitchhiker's Guide to Compression + + +Contributing | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+

Contributing

+

This site is intended to be used as living documentation that is constantly updated by the community, if you feel like something’s missing or would simply like to contribute, please create an issue or create a pull request.

+

The best way to ask a question is to file an issue and we’ll try to get back to you as soon as possible.

+
+ +
+
+
+ + diff --git a/docs/getting_started/index.html b/docs/getting_started/index.html new file mode 100644 index 0000000..14a552d --- /dev/null +++ b/docs/getting_started/index.html @@ -0,0 +1,101 @@ + + + + + + +Getting Started - The Hitchhiker's Guide to Compression + + +Getting Started | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+

Getting Started

+

When jumping into this guide, it’s important to identify what you want to gain from it. For example, if you’d simply like to familiarize yourself with different compression algorithms, you could just skim over the different algorithms and play with the interactive algorithms. However, if you’re interested in understanding each algorithm at a deep level and creating your implementations, you’d likely want to take more time to read each page section-by-section.

+

Though as a general guide, it’s a good idea to get started in the interactive algorithms section to get an idea of how each algorithm works visually by experimenting. After taking some time to see how each algorithm works, it’s a good idea to dive into the overview of algorithms and get started with an algorithm that interests you (Lempel-Ziv is a good starting choice).

+

Lastly, you should familiarize yourself with the reference section and skim over any subjects you feel unfamiliar with. This section acts as a quick reference about different subjects that will inevitably come into play during the understanding and implementing of compression algorithms.

+

Or, if you’d like to dive right in, you should start with Lempel-Ziv and Lempel-Ziv-Storer-Szymanski.

+
+ +
+
+
+ + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..e6af086 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,143 @@ + + + + + + +Overview - The Hitchhiker's Guide to Compression + + +Overview | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+

The Hitchhiker’s Guide to Compression

+

Far out in the uncharted backwaters of the unfashionable end of the western spiral arm of the Galaxy lies a small unregarded yellow sun.

+

Orbiting this at a distance of roughly ninety-two million miles is an utterly insignificant little blue green planet whose ape-descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea.

+

This planet has a problem, which was this: files are too big. Many solutions were suggested for solving this problem via lossless compression, such as Lempel-Ziv and Huffman coding, but most of these were implemented into common compression utilities and promptly forgotten. Today, much of the relevant work to compression is in an obscure corner of the internet between lengthy PhD thesis papers and hard-to-find gems.

+

Why compression

+

Lossless file compression, and file compression in general has become a lost art. The modern developer community has moved on from working on compression algorithms to bigger and better problems, such as creating the next major NodeJS framework. However, compression as it stands in the computer science aspect is still as interesting as it was in 1980s, possibly even more so today with an estimated 463 Exabytes of data to be created everyday in 2025.

+

It’s no secret that the internet is growing rapidly, and with it more people are becoming connected. From urban dwellers to rural farmers, fast internet speeds are not a given. To counter this, there are numerous projects focused on improving internet speeds for rural users, but there are far fewer projects focused on the other half of improving internet access: compressing data.

+

These claims about the “lost of art of compression” may seem a bit unsubstantiated, as there are new and actively developed compression projects out there today, such as, but not limited to:

+ +

There are also some other notable projects which I’ve included at the end, but either they aren’t active or universal enough to be included in this short list.

+

However this argument still holds true, compression isn’t really mainstream, and I don’t know why it isn’t. Internet speeds are a real problem for much of the world and better compression stands as a promising solution. The possibilities of better compression are truly endless:

+
    +
  • Faster 4k video streaming
  • +
  • Faster download speeds
  • +
  • Faster upload speeds
  • +
  • Faster website and content loading speeds
  • +
  • Better accessibility to services in regions with poor internet connections
  • +
  • Higher quality video and voice calls
  • +
  • Less expensive deep data storage costs
  • +
  • and more
  • +
+

The Goal

+

The goal of this project, and by extension, the goal of all resources here is to help people learn about compression algorithms and encourage people to tinker, build, and experiment with their own algorithms and implementations. Afterall, the best way to innovate in tech is to get a bunch of developers interested in something and let them lead the way.

+

Additionally, this project itself is intended to be a community-sourced resource for people interested in compression algorithms. The idea is that anyone can contribute to this website through GitHub so that this can be a constantly improving and expanding resource for others.

+

With all of that said, if you’re interested in learning more about the world of compression, you should get started.

+

Forewarning

+

As a forewarning it should be noted that although this project is intended to be comprehensive, it is not. This is because the two primary authors, myself, Phillip Cutter, and Arnav Chawla, are currently high school seniors who are working on finishing college applications, schoolwork, internships, and other commitments and do not have the time to continue this project, and Raisin, at the same rate that they did over the first three months. However, both of us are committed to maintaining this project and improving it for the forseeable future.

+

Notable Compression Project Mentions

+

Notable mentions:

+ +
+ +
+
+
+ + diff --git a/docs/interactive/arithmetic/index.html b/docs/interactive/arithmetic/index.html new file mode 100644 index 0000000..aed132a --- /dev/null +++ b/docs/interactive/arithmetic/index.html @@ -0,0 +1,135 @@ + + + + + + +Arithmetic Encoder - The Hitchhiker's Guide to Compression + + +Arithmetic Encoder | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+
+

Arithmetic Encoder

+ + + + + +
Enter text to encode +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Delay: ms
+
+
+
+
+
+
+
+
+
+

Output:

+

+
+
+ +
+
+
+
+ + diff --git a/docs/interactive/interactive/index.html b/docs/interactive/interactive/index.html new file mode 100644 index 0000000..36f669f --- /dev/null +++ b/docs/interactive/interactive/index.html @@ -0,0 +1,106 @@ + + + + + + +Interactive Algorithms - The Hitchhiker's Guide to Compression + + +Interactive Algorithms | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+

Interactive Algorithms

+

This section serves as a collection of interactive algorithms that make it easier to experiment and visually see how an data compression algorithm works.

+
+

Table of contents

+ +
+ +
+
+
+ + diff --git a/docs/interactive/lz/fullscreen_decoder/index.html b/docs/interactive/lz/fullscreen_decoder/index.html new file mode 100644 index 0000000..cab3663 --- /dev/null +++ b/docs/interactive/lz/fullscreen_decoder/index.html @@ -0,0 +1,112 @@ + + + + + + +Fullscreen Decoder - The Hitchhiker's Guide to Compression + + +Fullscreen Decoder | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+

Fullscreen Decoder

+

The fullscreen version:

+
    +
  • Does not resize content to fit your canvas
  • +
  • Allows you to pan and zoom
  • +
  • Has a larger canvas window
  • +
+ + + + + +

Decoder

+
Enter text to decode +
+
+
+
+
+
+
+
+
+
Delay: ms
+
+
+
+
+
+
+
+
+
+

Output:

+

+
+
+ + diff --git a/docs/interactive/lz/fullscreen_encoder/index.html b/docs/interactive/lz/fullscreen_encoder/index.html new file mode 100644 index 0000000..a789f1c --- /dev/null +++ b/docs/interactive/lz/fullscreen_encoder/index.html @@ -0,0 +1,117 @@ + + + + + + +Fullscreen Encoder - The Hitchhiker's Guide to Compression + + +Fullscreen Encoder | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+

Fullscreen Encoder

+

The fullscreen version:

+
    +
  • Does not resize content to fit your canvas
  • +
  • Allows you to pan and zoom
  • +
  • Has a larger canvas window
  • +
+ + + + + +

Encoder

+
Enter text to encode +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Delay: ms
+
+
+
+
+
+
+
+
+
+

Output:

+

+
+
+ + diff --git a/docs/interactive/lz/lz/index.html b/docs/interactive/lz/lz/index.html new file mode 100644 index 0000000..d2a7bf9 --- /dev/null +++ b/docs/interactive/lz/lz/index.html @@ -0,0 +1,168 @@ + + + + + + +LZ77/LZSS - The Hitchhiker's Guide to Compression + + +LZ77/LZSS | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+
+

LZ77/LZSS

+ + + + + +

Encoder

+
Enter text to encode +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Delay: ms
+
+
+
+
+
+
+
+
+
+

Output:

+

+
+

Decoder

+
Enter text to decode +
+
+
+
+
+
+
+
+
+
Delay: ms
+
+
+
+
+
+
+
+
+
+

Output:

+

+
+
+

Table of contents

+ +
+ +
+
+
+
+ + diff --git a/docs/reference/bytes/index.html b/docs/reference/bytes/index.html new file mode 100644 index 0000000..d03005f --- /dev/null +++ b/docs/reference/bytes/index.html @@ -0,0 +1,354 @@ + + + + + + +Bytes and Binary - The Hitchhiker's Guide to Compression + + +Bytes and Binary | The Hitchhiker’s Guide to Compression + + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+
+

Bytes and Binary

+

When it comes to working with computers, one thing becomes very apparently: there’s a lot of data. Now naturally, when you have a lot of data you have to figure out how you want to store the data. Just like how leftover Christmas decorations are stored in bins inside of garages, data is stored inside of bytes inside of a file. So what is a byte?

+

Bytes are a term used to represent 8 bits, simply a 1 or a 0. So, a byte might look something like this: 00111010.

+

Binary

+

These ones and zeroes are used in something called binary. Now, in most of the world you count with a base-10 decimal number system. One is 1, two is 2, all the way up to 10 being 10, and so forth. The number system is based around 10 being the base.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
BasePowerDecimal
1001
10110
102100
1031,000
+

Now binary works the same way, except the base is actually 2, not 10.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BasePowerDecimalBinary
2010001
2120010
2240100
2381000
+

With this simple example, you start to see a simple pattern emerge. The right-most bit (the 1 or 0) represents 2^0, left of that is 2^1, left of that is 2^2, etc. Using this simple system we can represent any number using 1s and 0s, which is precisely what a computer uses to store numbers.

+

Let’s take a look at a few more examples because unless you have a PhD in mathematics or computer science, the entire “different number base” thing might be still be a bit confusing.

+

So let’s take the binary number 0110010, and convert it to decimal so our human minds can understand what it means. Now remember, the right most bit (also known as the least significant bit) represents 2^0, which is 1. This means that if the right most bit is a 1, then we add 1 to the result, otherwise we add 0. The next bit to the left represents 2^1, which is 2, so if it’s a 1, then we add a 2, otherwise we add a 0. Hopefully the pattern is starting to become clear:

+
+ + + + + + + + + + + + + + + + + + + + +
Binary0110010
Decimal6432168421
+

Then we can add our decimal numbers together:

+
+ + + + + + + + + + + + + + + + + + + + +
0*641*321*160*80*41*20*1 
0 +32 +16 +0 +0 +2 +0= 50
+

And we get 50!

+

If it’s still a bit cloudy or you would just like some more practice, make sure to search online for information about “binary numbers”, or check out some of these great resources:

+ +

So now that you understand binary, where do they fit within bytes and how do they store text?

+

Bytes

+

Bytes are the answer to storing text, and basically everything, on a computer. A byte is essentially a chunk of bits (1s and 0s), generally 8. Bytes are used nearly everywhere in a computer, they’re used to store variables in memory, to transfer data over wires or the internet, and most importantly to compression, to store data in files.

+

Every character in English is stored as a byte in a file. And as we know a byte is 8 bits. So, from our knowledge we know that the largest number an 8 bit binary number can store is 2^8, or 256. This means that a single byte can store exactly 256 different numbers, or in our case, 256 unique characters.

+

In 1960 computers are still brand new and largely used by English speaking countries, so there was a need for a system to represent English characters, without worrying about any other language. The answer to this is ASCII. While there’s a massive amount of history behind ASCII and all of the other computer history being created at the time, the basis is simple. The English alphabet, and generally every other special character English uses can be assigned a number from 0-255 (remember the largest 8 bit number is 11111111, which is only 255 in decimal, but 00000000 represents 0, so there are 256 possibilities).

+

Let’s take a look at the ASCII codes for capital A-F on the alphabet:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LetterASCII CodeBinary Code
A6501000001
B6601000010
C6701000011
D6801000100
E6901000101
F7001000110
+

For a complete table, check out the RapidTables ASCII Table.

+

These binary representations of each character would then be stored in a file. Later when you wanted to read the file again, your computer would take each chunk of 8 bits, lookup the letter it represents in an ASCII table, and output the represented character before moving on. This system worked perfectly for a while until more people started using computers.

+

Now as it turns out, there are a lot of people who want to use computers who don’t speak English and need to represent characters that we don’t have in English (Arabic, Spanish, French, Chinese, etc.). The solution to this is using a different type of encoding rather than ASCII, referred to as file encodings.

+

However, the most common encoding, UTF-8, simply extends ASCII to add extra characters because ASCII does not use all 256 numbers, it only uses around 127. So, in a modern day file, the word “Hello” would be represents as follows:

+
Text: Hello
+UTF-8 Decimal: 72 101 108 108 111
+UTF-8 Binary: 01001000 01100101 01101100 01101100 01101111
+
+

To try this out on your own, check out Online Utf8 Tools.

+

Endianness

+

When working with bytes and storing them in memory you run into a problem. How do you store a sequency of bytes in memory? So, for example, let’s say we have the following bytes:

+
+ + +
1111000001011010
+

And let’s save we have some memory allocated for our 2 bytes that looks like this:

+
+ + +
(empty byte)(empty byte)
+

How do you want to store the bytes in memory?

+

Looking at it like this, the simple solution is to just store them sequentially with the first byte being stored in the first byte of memory, and the second byte in the second byte of memory.

+

Our memory would then look like this:

+
+ + +
1111000001011010
+

This approach is called big endian ordering. The other approach is called little endian ordering which, you guessed it, is the opposite. If we were to store the same two bytes with little endian ordering in memory, it would look like this:

+
+ + +
0101101011110000
+

Now using big vs little endian ordering doesn’t make a large difference in practice, it’s just important that all of the software and hardware interacting with the memory knows which endian ordering it’s using. It’s also important to ensure that other computers receiving data know what endian ordering the data is being transmitted with so the other computer can correctly interpret the bytes.

+

If endianness still doesn’t make complete sense or you’re interested in learning more, you should check out Computerphile’s video about endianness or the article about it on Wikipedia.

+

Kilobytes, Megabytes, and Beyond

+

When dealing with data in the real world, you’ll often encounter files larger than a few hundreds bytes. Often these files can reach into the thousands, millions, and even billions of bytes. Luckily, rather than saying that a file of 1,000,000 bytes is 1,000,000 bytes, we can simply say it is 1 megabyte. This is the same reason we say the Moon is 384,400 km away from the Earth, not 384,400,000 meters. Bytes use standard metric prefixes, so any metric prefix means the same thing when talking about meters, bytes, or any other metric measurement.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameBase 10Decimal
Kilobyte$ 10 ^ 3 $1,000
Megabyte$ 10 ^ 6 $1,000,000
Gigabyte$ 10 ^ 9 $1,000,000,000
Terabyte$ 10 ^ {12} $1,000,000,000,000
Petabyte$ 10 ^ {15} $1,000,000,000,000,000
+

You can learn more about binary prefixes on Wikipedia.

+

Resources

+

If you want to learn more about bytes and binary in general, check out some of these great resources:

+ +
+ +
+
+
+
+ + diff --git a/docs/reference/compression_ratios/index.html b/docs/reference/compression_ratios/index.html new file mode 100644 index 0000000..576e5cc --- /dev/null +++ b/docs/reference/compression_ratios/index.html @@ -0,0 +1,115 @@ + + + + + + +Compression Ratios - The Hitchhiker's Guide to Compression + + +Compression Ratios | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+
+

Compression Ratios

+

Compression ratios are generally used to represent how good a compression algorithm is at compressing. Generally, this is represented as the uncompressed size divided by the compressed size, yielding a number (hopefully) greater than 1. The higher the compression ratio, the better the compression algorithm is.

+

Compression Ratio Equation

+

Equation from Wikipedia

+

It should also be noted that a better compression ratio does not always indicate a better compression algorithm. Some algorithms are designed to give a moderate compression ratio with very good speed, while others are focused on good compression ratios and moderate speed. The use case of a compression algorithm are what determines what factors of a compression algorithm are favorable. For example, when streaming video you must be able to decode each frame relatively quickly, but when downloading a large game it may be preferable to download a smaller file and take time to decode the compressed files.

+

Resources

+

Some good resources to learn more about compression algorithms include:

+ +
+ +
+
+
+
+ + diff --git a/docs/reference/encodings/index.html b/docs/reference/encodings/index.html new file mode 100644 index 0000000..39ad579 --- /dev/null +++ b/docs/reference/encodings/index.html @@ -0,0 +1,119 @@ + + + + + + +Character Encodings - The Hitchhiker's Guide to Compression + + +Character Encodings | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+
+

Character Encodings

+

When it comes to encoding every character that we use as a number there are many different ways we can do it. For example, how many bytes should a character represent? Should byte length be dynamic based on the character? Should you prioritize shorter encodings for more frequent characters?

+

These are the types of questions that are answered with the many different character encodings that exist today. The most popular of these are arguably UTF-8 and UTF-16, both encodings for Unicode.

+

UTF-8 and UTF-16

+

UTF-8 is covered briefly in the the reference on bytes and binary, but generally the first 127 numbers in UTF-8 are the same as the ASCII encoding which makes transitioning between the two formats very easy. Additionally because of this property, UTF-8 results in smaller file sizes for primarily English data which is another contributing factor in it’s popularity.

+

In order for UTF-8 to replicate ASCII encodings, it must use anywhere from one to four bytes to represent all 1,112,064 different characters defined by Unicode. This means that a single rendered character could take up 4 bytes which can be inefficient depending on what data you are encoding.

+

The largest alternative encoding is UTF-16 which is very similar to UTF-8 except that it uses one or two 16-bit units, essentially two bytes or four bytes, never one or three. The advantage of doing this is that in some cases where a large range of non-English characters are being encoded, such as Mandarin or emoji characters, it can be more efficient than UTF-8 encodings.

+

Other Encodings

+

Aside from UTF-8 and UTF-16 many different types of file encodings exist such as UTF-32, ISO standardized encodings, Mac OS Roman, Windows encodings, and more. Luckily however, Unicode has risen in popularity to the point that there is generally great support and standardization around Unicode encodings like UTF-8 and UTF-16. If you are interested in checking out some other file encodings, you should check out Wikipedia’s list on common character encodings.

+

Resources

+

If you’re interested in learning more about Unicode and other character encodings, check out some of these great resources:

+ +
+ +
+
+
+
+ + diff --git a/docs/reference/magic_numbers/index.html b/docs/reference/magic_numbers/index.html new file mode 100644 index 0000000..da0651b --- /dev/null +++ b/docs/reference/magic_numbers/index.html @@ -0,0 +1,125 @@ + + + + + + +Unix Magic Numbers - The Hitchhiker's Guide to Compression + + +Unix Magic Numbers | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+
+

Unix Magic Numbers

+

Unix magic types, also known as magic numbers, or format indicators are a small sequence of bytes at the beginning of a file used to identify the file type.

+

Here are just a few examples of file magic numbers from Wikipedia:

+
    +
  • GIFs: GIF89a +
  • +
  • Unix scripts: #! +
  • +
  • PDFs: 25 50 44 46 +
  • +
  • JPEGs: FF D8 +
  • +
+

Magic numbers are important to understand if you start writing and reading compressed files. Written compressed files should include your own custom magic number that represents your compression format and doesn’t conflict with any other magic number. You can also read these magic types to determine the format of a compressed file.

+

These magic numbers and the corresponding file type are generally stored in a file called the magic patterns, also known as the magic database or magic data. This file is used by Unix systems to lookup the file type based off of a file’s magic numbers.

+

For a more complete list of different magic numbers, check out the Wikipedia entry for a list of file extensions.

+

Resources

+

To learn more about magic numbers, check out these resources:

+ +
+ +
+
+
+
+ + diff --git a/docs/reference/raisin/index.html b/docs/reference/raisin/index.html new file mode 100644 index 0000000..682ae95 --- /dev/null +++ b/docs/reference/raisin/index.html @@ -0,0 +1,104 @@ + + + + + + +Raisin - The Hitchhiker's Guide to Compression + + +Raisin | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+
+

Raisin

+

Raisin is a compression project that myself, Phillip Cutter, and Arnav Chawla built under the guidance of our mentor, Skip Tavakkolian. This project spanned 6 weeks and encompasses our work in implementing various compression algorithms in Go along with an easy-to-use CLI interface. This website is the project encompassing our learning along our journey of researching and implementing lossless compression algorithms.

+

Most compression algorithm documents on this site should be implemented within this project in a performant manner, though if not, you should check the examples repo.

+
+ +
+
+
+
+ + diff --git a/docs/reference/reference/index.html b/docs/reference/reference/index.html new file mode 100644 index 0000000..4313b61 --- /dev/null +++ b/docs/reference/reference/index.html @@ -0,0 +1,112 @@ + + + + + + +Reference - The Hitchhiker's Guide to Compression + + +Reference | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+

Reference

+

This section serves to be a reference to topics that aren’t directly related to compression, but inveitably come into play. A basic understanding of these concepts are invaluable when building your own implementation or algorithm or simply understanding how these algorithms work.

+
+

Table of contents

+ +
+ +
+
+
+ + diff --git a/docs/resources/index.html b/docs/resources/index.html new file mode 100644 index 0000000..1dcefd7 --- /dev/null +++ b/docs/resources/index.html @@ -0,0 +1,109 @@ + + + + + + +Resources - The Hitchhiker's Guide to Compression + + +Resources | The Hitchhiker’s Guide to Compression + + + + + + + + + + Link + Search + Menu + Expand + Document + +
+ +
+

Resources

+

This is a list of great resources for learning about compression in a broad sense. If you’re looking for other places to learn more about data compression then any of these entries are a great start.

+ +

Know another great resource not included on this list? Consider contributing.

+
+ +
+
+
+ + diff --git a/getting_started.md b/getting_started.md deleted file mode 100644 index 854138d..0000000 --- a/getting_started.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Getting Started -nav_order: 2 ---- - -# Getting Started - -This article is currently a stub. diff --git a/gulpfile.js b/gulpfile.js index 579d061..c494d18 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -5,7 +5,7 @@ var browserSync = require("browser-sync").create(); // Task for building blog when something changed: gulp.task( "build", - shell.task(["bundle exec jekyll serve --watch --incremental"]) + shell.task(["bundle exec jekyll serve --config _config-dev.yml"]) ); // If you don't use bundle: // gulp.task('build', shell.task(['jekyll serve'])); @@ -14,9 +14,14 @@ gulp.task( // Task for serving blog with Browsersync gulp.task("serve", function () { - browserSync.init({ server: { baseDir: "_site/" }, open: false }); + browserSync.init({ + server: { + baseDir: "_site/" + }, + open: false + }); // Reloads page when some of the already built files changed: gulp.watch("_site/**/*.*").on("change", browserSync.reload); }); -gulp.task("default", gulp.parallel(["build", "serve"])); +gulp.task("default", gulp.parallel(["build", "serve"])); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8054354..a4da0b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,11 +10,19 @@ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, + "abab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", + "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==", + "dev": true, + "optional": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "dev": true, + "optional": true }, "accepts": { "version": "1.3.7", @@ -26,6 +34,40 @@ "negotiator": "0.6.2" } }, + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "dev": true, + "optional": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "optional": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true, + "optional": true + } + } + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true, + "optional": true + }, "after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", @@ -37,6 +79,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", "dev": true, + "optional": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -44,12 +87,6 @@ "uri-js": "^4.2.2" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, "ansi-colors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", @@ -109,7 +146,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "dev": true, + "optional": true }, "archy": { "version": "1.0.0", @@ -122,6 +160,7 @@ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, + "optional": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -169,11 +208,12 @@ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", "dev": true }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true, + "optional": true }, "array-initial": { "version": "1.1.0", @@ -252,6 +292,7 @@ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, + "optional": true, "requires": { "safer-buffer": "~2.1.0" } @@ -260,7 +301,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "dev": true, + "optional": true }, "assign-symbols": { "version": "1.0.0", @@ -298,12 +340,6 @@ "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", "dev": true }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, "async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", @@ -323,7 +359,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "dev": true, + "optional": true }, "atob": { "version": "2.1.2", @@ -331,32 +368,19 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "dev": true, + "optional": true }, "aws4": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", - "dev": true + "dev": true, + "optional": true }, "axios": { "version": "0.19.0", @@ -501,6 +525,7 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, + "optional": true, "requires": { "tweetnacl": "^0.14.3" } @@ -526,15 +551,6 @@ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "dev": true }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -554,6 +570,13 @@ "fill-range": "^7.0.1" } }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true, + "optional": true + }, "browser-sync": { "version": "2.26.12", "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.12.tgz", @@ -618,18 +641,6 @@ "stream-throttle": "^0.1.3" } }, - "browserslist": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", - "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001111", - "electron-to-chromium": "^1.3.523", - "escalade": "^3.0.2", - "node-releases": "^1.1.60" - } - }, "bs-recipes": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", @@ -689,35 +700,24 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "canvas": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.6.1.tgz", + "integrity": "sha512-S98rKsPcuhfTcYbtF53UIJhcbgIAK533d1kJKMwsMwAIFgfd58MOyxRud3kktlzWiEkFliaJtvyZCBtud/XVEA==", "dev": true, + "optional": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } + "nan": "^2.14.0", + "node-pre-gyp": "^0.11.0", + "simple-get": "^3.0.3" } }, - "caniuse-lite": { - "version": "1.0.30001116", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz", - "integrity": "sha512-f2lcYnmAI5Mst9+g0nkMIznFGsArRmZ0qU+dnq8l91hymdc2J3SFbiPhOJEeDqC1vtE8nc1qNQyklzB8veJefQ==", - "dev": true - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "dev": true, + "optional": true }, "chalk": { "version": "1.1.3", @@ -732,12 +732,6 @@ "supports-color": "^2.0.0" } }, - "child_process": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz", - "integrity": "sha1-sffn/HPSXn/R1FWtyU4UODAYK1o=", - "dev": true - }, "chokidar": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", @@ -754,6 +748,13 @@ "readdirp": "~3.4.0" } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "optional": true + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -882,17 +883,12 @@ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -978,7 +974,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "dev": true, + "optional": true }, "convert-source-map": { "version": "1.7.0", @@ -1017,23 +1014,30 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } + "optional": true }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, + "optional": true, "requires": { - "array-find-index": "^1.0.1" + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "optional": true + } } }, "d": { @@ -1051,10 +1055,23 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, + "optional": true, "requires": { "assert-plus": "^1.0.0" } }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "optional": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -1076,6 +1093,30 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dev": true, + "optional": true, + "requires": { + "mimic-response": "^2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true, + "optional": true + }, "default-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", @@ -1153,13 +1194,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "dev": true, + "optional": true }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true + "dev": true, + "optional": true }, "depd": { "version": "1.1.2", @@ -1179,12 +1222,29 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, "dev-ip": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", "dev": true }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "optional": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -1230,6 +1290,7 @@ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, + "optional": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -1241,12 +1302,6 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "electron-to-chromium": { - "version": "1.3.539", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.539.tgz", - "integrity": "sha512-rM0LWDIstdqfaRUADZetNrL6+zd/0NBmavbMEhBXgc2u/CC1d1GaDyN5hho29fFvBiOVFwrSWZkzmNcZnCEDog==", - "dev": true - }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -1416,12 +1471,6 @@ "es6-symbol": "^3.1.1" } }, - "escalade": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", - "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", - "dev": true - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1434,6 +1483,50 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "optional": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "optional": true + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "optional": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "optional": true + }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -1618,7 +1711,18 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "dev": true, + "optional": true + }, + "fabric": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/fabric/-/fabric-4.1.0.tgz", + "integrity": "sha512-reykTv08IiTHzsr46hv6xSqFuV5jn2itU51DXv5N7iPgmUjbcjjNHNFA/yJJeAxDGOR+5k0N07CfEoL+qVo7oA==", + "dev": true, + "requires": { + "canvas": "^2.6.1", + "jsdom": "^15.2.1" + } }, "fancy-log": { "version": "1.3.3", @@ -1636,13 +1740,15 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "optional": true }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "optional": true }, "fast-levenshtein": { "version": "1.1.4", @@ -1877,13 +1983,15 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "dev": true, + "optional": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, + "optional": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -1916,6 +2024,16 @@ "universalify": "^0.1.0" } }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, "fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -1939,18 +2057,6 @@ "dev": true, "optional": true }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -1962,6 +2068,7 @@ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, + "optional": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -1978,6 +2085,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -1987,6 +2095,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -1995,27 +2104,12 @@ } } }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -2027,6 +2121,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, + "optional": true, "requires": { "assert-plus": "^1.0.0" } @@ -2341,17 +2436,6 @@ "which": "^1.2.14" } }, - "globule": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", - "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, "glogg": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", @@ -2509,141 +2593,47 @@ } } }, - "gulp-autoprefixer": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-7.0.1.tgz", - "integrity": "sha512-QJGEmHw+bEt7FSqvmbAUTxbCuNLJYx4sz3ox9WouYqT/7j5FH5CQ8ZnpL1M7H5npX1bUJa7lUVY1w20jXxhOxg==", + "gulp-shell": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/gulp-shell/-/gulp-shell-0.8.0.tgz", + "integrity": "sha512-wHNCgmqbWkk1c6Gc2dOL5SprcoeujQdeepICwfQRo91DIylTE7a794VEE+leq3cE2YDoiS5ulvRfKVIEMazcTQ==", "dev": true, "requires": { - "autoprefixer": "^9.6.1", - "fancy-log": "^1.3.2", + "chalk": "^3.0.0", + "fancy-log": "^1.3.3", + "lodash.template": "^4.5.0", "plugin-error": "^1.0.1", - "postcss": "^7.0.17", "through2": "^3.0.1", - "vinyl-sourcemaps-apply": "^0.2.1" + "tslib": "^1.10.0" }, "dependencies": { - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" } - } - } - }, - "gulp-sass": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-4.1.0.tgz", - "integrity": "sha512-xIiwp9nkBLcJDpmYHbEHdoWZv+j+WtYaKD6Zil/67F3nrAaZtWYN5mDwerdo7EvcdBenSAj7Xb2hx2DqURLGdA==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "lodash": "^4.17.11", - "node-sass": "^4.8.3", - "plugin-error": "^1.0.1", - "replace-ext": "^1.0.0", - "strip-ansi": "^4.0.0", - "through2": "^2.0.0", - "vinyl-sourcemaps-apply": "^0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "gulp-shell": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/gulp-shell/-/gulp-shell-0.8.0.tgz", - "integrity": "sha512-wHNCgmqbWkk1c6Gc2dOL5SprcoeujQdeepICwfQRo91DIylTE7a794VEE+leq3cE2YDoiS5ulvRfKVIEMazcTQ==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "fancy-log": "^1.3.3", - "lodash.template": "^4.5.0", - "plugin-error": "^1.0.1", - "through2": "^3.0.1", - "tslib": "^1.10.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" + "color-name": "~1.1.4" } }, "color-name": { @@ -2686,13 +2676,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true + "dev": true, + "optional": true }, "har-validator": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, + "optional": true, "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -2738,7 +2730,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true + "dev": true, + "optional": true }, "has-value": { "version": "1.0.0", @@ -2813,6 +2806,16 @@ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "optional": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, "http-errors": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", @@ -2850,6 +2853,7 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, + "optional": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -2865,27 +2869,22 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", "dev": true }, - "in-publish": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", - "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -2926,6 +2925,13 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true, + "optional": true + }, "is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", @@ -3040,12 +3046,6 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -3104,7 +3104,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "dev": true, + "optional": true }, "is-unc-path": { "version": "1.0.0", @@ -3161,31 +3162,73 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", - "dev": true + "dev": true, + "optional": true }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true + "dev": true, + "optional": true + }, + "jsdom": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", + "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", + "dev": true, + "optional": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "ws": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", + "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", + "dev": true, + "optional": true + } + } }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "dev": true, + "optional": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "optional": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -3197,7 +3240,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "dev": true, + "optional": true }, "jsonfile": { "version": "3.0.1", @@ -3213,6 +3257,7 @@ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -3269,6 +3314,17 @@ "flush-write-stream": "^1.0.2" } }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "optional": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, "liftoff": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", @@ -3364,6 +3420,13 @@ "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", "dev": true }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true, + "optional": true + }, "lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -3383,26 +3446,6 @@ "lodash._reinterpolate": "^3.0.0" } }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, "make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -3418,12 +3461,6 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -3577,24 +3614,6 @@ } } }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, "micromatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", @@ -3626,6 +3645,13 @@ "mime-db": "1.44.0" } }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "dev": true, + "optional": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -3639,7 +3665,29 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } }, "mitt": { "version": "1.2.0", @@ -3673,6 +3721,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, + "optional": true, "requires": { "minimist": "^1.2.5" } @@ -3693,7 +3742,8 @@ "version": "2.14.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", - "dev": true + "dev": true, + "optional": true }, "nanomatch": { "version": "1.2.13", @@ -3714,6 +3764,30 @@ "to-regex": "^3.0.1" } }, + "needle": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz", + "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -3726,72 +3800,34 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", - "dev": true - }, - "node-sass": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", - "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", + "node-pre-gyp": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", "dev": true, + "optional": true, "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash": "^4.17.15", - "meow": "^3.7.0", + "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", - "nan": "^2.13.2", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "2.2.5", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "dev": true, + "optional": true, "requires": { - "abbrev": "1" + "abbrev": "1", + "osenv": "^0.1.4" } }, "normalize-package-data": { @@ -3812,11 +3848,10 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true + "nouislider": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-14.6.1.tgz", + "integrity": "sha512-S6KvYTqhGVJQfLhbyTFATzRGNzGdDZMkWdi0To8ouAtHbgXaDHLzZZlPD8o7yb7cMiZ8+PTojEXYDc8ysLwXXQ==" }, "now-and-later": { "version": "2.0.1", @@ -3827,11 +3862,41 @@ "once": "^1.3.2" } }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, + "optional": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -3839,29 +3904,32 @@ "set-blocking": "~2.0.0" } }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true, + "optional": true + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "dev": true, + "optional": true }, "object-component": { "version": "0.0.3", @@ -4013,6 +4081,30 @@ "is-wsl": "^1.1.0" } }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "optional": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "dependencies": { + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true, + "optional": true + } + } + }, "ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", @@ -4026,7 +4118,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "dev": true, + "optional": true }, "os-locale": { "version": "1.4.0", @@ -4041,13 +4134,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "dev": true, + "optional": true }, "osenv": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, + "optional": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -4109,6 +4204,13 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true, + "optional": true + }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", @@ -4193,7 +4295,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "dev": true, + "optional": true }, "picomatch": { "version": "2.2.2", @@ -4234,6 +4337,13 @@ "extend-shallow": "^3.0.2" } }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true, + "optional": true + }, "portscanner": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", @@ -4250,76 +4360,12 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true + "optional": true }, "pretty-hrtime": { "version": "1.0.3", @@ -4333,17 +4379,12 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true + "dev": true, + "optional": true }, "pump": { "version": "2.0.1", @@ -4370,7 +4411,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "dev": true, + "optional": true }, "qs": { "version": "6.2.3", @@ -4396,6 +4438,19 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -4479,16 +4534,6 @@ "resolve": "^1.1.6" } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -4546,15 +4591,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, "replace-ext": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", @@ -4577,6 +4613,7 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, + "optional": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -4604,7 +4641,54 @@ "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "dev": true, + "optional": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "optional": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "optional": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "dev": true, + "optional": true, + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "optional": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } } } }, @@ -4698,6 +4782,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, + "optional": true, "requires": { "glob": "^7.1.3" } @@ -4738,57 +4823,21 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "sass-graph": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", - "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, - "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^13.3.2" - }, - "dependencies": { - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - } - } + "optional": true }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", "dev": true, + "optional": true, "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "xmlchars": "^2.1.1" } }, "semver": { @@ -4993,7 +5042,27 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true + "dev": true, + "optional": true + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "optional": true + }, + "simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "dev": true, + "optional": true, + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } }, "snapdragon": { "version": "0.8.2", @@ -5363,6 +5432,7 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, + "optional": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -5408,14 +5478,12 @@ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", "dev": true }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } + "optional": true }, "stream-exhaust": { "version": "1.0.2", @@ -5494,14 +5562,12 @@ "is-utf8": "^0.2.0" } }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } + "optional": true }, "supports-color": { "version": "2.0.0", @@ -5525,15 +5591,27 @@ "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", "dev": true }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "optional": true + }, "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "dev": true, + "optional": true, "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" } }, "tfunk": { @@ -5651,28 +5729,25 @@ "dev": true }, "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", "dev": true, + "optional": true, "requires": { + "ip-regex": "^2.1.0", "psl": "^1.1.28", "punycode": "^2.1.1" } }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, + "optional": true, "requires": { - "glob": "^7.1.2" + "punycode": "^2.1.0" } }, "tslib": { @@ -5686,6 +5761,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.0.1" } @@ -5694,7 +5770,8 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true + "dev": true, + "optional": true }, "type": { "version": "1.2.0", @@ -5702,6 +5779,16 @@ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", "dev": true }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "optional": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -5841,6 +5928,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, + "optional": true, "requires": { "punycode": "^2.1.0" } @@ -5873,7 +5961,8 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true + "dev": true, + "optional": true }, "v8flags": { "version": "3.2.0", @@ -5905,6 +5994,7 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, + "optional": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -5976,13 +6066,62 @@ } } }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "optional": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "dev": true, + "optional": true, + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true, + "optional": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, + "optional": true, "requires": { - "source-map": "^0.5.1" + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true, + "optional": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "optional": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, "which": { @@ -6005,6 +6144,7 @@ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, + "optional": true, "requires": { "string-width": "^1.0.2 || 2" }, @@ -6013,13 +6153,15 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "dev": true, + "optional": true }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "optional": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -6030,12 +6172,20 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, + "optional": true, "requires": { "ansi-regex": "^3.0.0" } } } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "optional": true + }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", @@ -6088,6 +6238,20 @@ "async-limiter": "~1.0.0" } }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true, + "optional": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "optional": true + }, "xmlhttprequest-ssl": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", @@ -6107,10 +6271,11 @@ "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "optional": true }, "yargs": { "version": "15.4.1", diff --git a/package.json b/package.json index f45dbfd..9ccc43f 100644 --- a/package.json +++ b/package.json @@ -17,9 +17,13 @@ }, "homepage": "https://github.com/go-compression/go-compression.github.io#readme", "devDependencies": { + "fabric": "^4.1.0", "browser-sync": "^2.26.12", "gulp": "^4.0.2", "gulp-shell": "^0.8.0", "lodash": "^4.17.20" + }, + "dependencies": { + "nouislider": "^14.6.1" } } diff --git a/site/_includes/head_custom.html b/site/_includes/head_custom.html new file mode 100644 index 0000000..dd11737 --- /dev/null +++ b/site/_includes/head_custom.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/_includes/inputs/arithmetic.html b/site/_includes/inputs/arithmetic.html new file mode 100644 index 0000000..fb70c10 --- /dev/null +++ b/site/_includes/inputs/arithmetic.html @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/site/_includes/inputs/arithmetic_encode.html b/site/_includes/inputs/arithmetic_encode.html new file mode 100644 index 0000000..1ec1c35 --- /dev/null +++ b/site/_includes/inputs/arithmetic_encode.html @@ -0,0 +1,36 @@ +
+
+ Enter text to encode +
+ + +
+
+
+ +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ Delay: ms +
+
+
+ +
+
\ No newline at end of file diff --git a/site/_includes/inputs/lzss.html b/site/_includes/inputs/lzss.html new file mode 100644 index 0000000..f23fafc --- /dev/null +++ b/site/_includes/inputs/lzss.html @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/site/_includes/inputs/lzss_decode.html b/site/_includes/inputs/lzss_decode.html new file mode 100644 index 0000000..0ad3666 --- /dev/null +++ b/site/_includes/inputs/lzss_decode.html @@ -0,0 +1,31 @@ +

Decoder

+
+
+ Enter text to decode +
+ + +
+
+
+ +
+
+
+
+ +
+ +
+
+
+
+
+ Delay: ms +
+
+
+ +
+
\ No newline at end of file diff --git a/site/_includes/inputs/lzss_encode.html b/site/_includes/inputs/lzss_encode.html new file mode 100644 index 0000000..16de2ad --- /dev/null +++ b/site/_includes/inputs/lzss_encode.html @@ -0,0 +1,37 @@ +

Encoder

+
+
+ Enter text to encode +
+ + +
+
+
+ +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ Delay: ms +
+
+
+ +
+
\ No newline at end of file diff --git a/site/_includes/js/custom.js b/site/_includes/js/custom.js new file mode 100644 index 0000000..e69de29 diff --git a/site/_layouts/arithmetic/interactive.html b/site/_layouts/arithmetic/interactive.html new file mode 100644 index 0000000..9e61b65 --- /dev/null +++ b/site/_layouts/arithmetic/interactive.html @@ -0,0 +1,33 @@ +--- +layout: default +--- + +{{ content }} + +{% include inputs/arithmetic.html %} + +{% include inputs/arithmetic_encode.html %} + + + + + + +
+ +
+ +
+ + + +
+ +
+

Output:

+

+
\ No newline at end of file diff --git a/site/_layouts/base.html b/site/_layouts/base.html new file mode 100644 index 0000000..8ad9cde --- /dev/null +++ b/site/_layouts/base.html @@ -0,0 +1,97 @@ +--- +layout: table_wrappers +--- + + + + + +{% include head.html %} + + + + + Link + + + + + + + Search + + + + + + + Menu + + + + + + + + Expand + + + + + + Document + + + + + + + + +
+ {{ content }} +
+ + + \ No newline at end of file diff --git a/site/_layouts/lzss/fullscreen_decoder.html b/site/_layouts/lzss/fullscreen_decoder.html new file mode 100644 index 0000000..bfdf1fa --- /dev/null +++ b/site/_layouts/lzss/fullscreen_decoder.html @@ -0,0 +1,31 @@ +--- +layout: base +--- + +{{ content }} + +{% include inputs/lzss.html %} + +{% include inputs/lzss_decode.html %} + + + + +
+ +
+ +
+ + + +
+ +
+

Output:

+

+
\ No newline at end of file diff --git a/site/_layouts/lzss/fullscreen_encoder.html b/site/_layouts/lzss/fullscreen_encoder.html new file mode 100644 index 0000000..ebadf75 --- /dev/null +++ b/site/_layouts/lzss/fullscreen_encoder.html @@ -0,0 +1,26 @@ +--- +layout: base +--- + +{{ content }} + +{% include inputs/lzss.html %} + +{% include inputs/lzss_encode.html %} + + + +
+ +
+ +
+ + + +
+ +
+

Output:

+

+
\ No newline at end of file diff --git a/site/_layouts/lzss/interactive.html b/site/_layouts/lzss/interactive.html new file mode 100644 index 0000000..fd49b9e --- /dev/null +++ b/site/_layouts/lzss/interactive.html @@ -0,0 +1,50 @@ +--- +layout: default +--- + +{{ content }} + +{% include inputs/lzss.html %} + +{% include inputs/lzss_encode.html %} + + + +
+ +
+ +
+ + + +
+ +
+

Output:

+

+
+ +{% include inputs/lzss_decode.html %} + + + + +
+ +
+ +
+ + + +
+ +
+

Output:

+

+
\ No newline at end of file diff --git a/site/_sass/custom/custom.scss b/site/_sass/custom/custom.scss new file mode 100644 index 0000000..6daf3ca --- /dev/null +++ b/site/_sass/custom/custom.scss @@ -0,0 +1,148 @@ +$sidebar_width: 364px; + +.site-header { + height: 90px; + max-height: 90px; +} + +@media (max-width: 90rem) and (min-width: 50rem) { + .site-nav, + .site-header, + .site-footer { + width: $sidebar_width; + } + + $sidebar_width_offset: calc((100%) / 2 - #{$sidebar_width}); + + .side-bar { + width: $sidebar_width; + } + + .main { + margin-left: $sidebar_width; + } +} + +@media (min-width: 90rem) { + .site-nav, + .site-header, + .site-footer { + width: $sidebar_width; + } + + $sidebar_width_offset: calc((100%) / 2 - #{$sidebar_width}); + + .side-bar { + width: $sidebar_width_offset; + } + + .main { + margin-left: $sidebar_width_offset; + } + + .side-left { + width: $sidebar_width; + } +} + +$margin: 6px; +$margin-left: $margin; +$margin-right: $margin; + +.main-fs { + margin-left: $margin-left; + margin-right: $margin-right; + max-width: initial; + height: calc(100% - 14rem); +} + +.main-fs { + padding-top: 2rem; +} + +.main-fs { + padding-top: 1rem; +} + +@media (min-width: 50rem) and (max-width: 90rem) { + $margin: 20px; + $margin-left: $sidebar_width + $margin; + $margin-right: $margin; + + .main-fs { + margin-left: $margin-left; + margin-right: $margin-right; + width: calc(100% - #{$margin-left} - #{$margin-right}); + max-width: initial; + height: calc(100% - 14rem); + } + + .main-fs { + padding-top: 2rem; + } +} + +@media (min-width: 90rem) { + $margin: 80px; + $margin-left: $sidebar_width + $margin; + $margin-right: $margin; + + .main-fs { + margin-left: $margin-left; + margin-right: $margin-right; + width: calc(100% - #{$margin-left} - #{$margin-right}); + max-width: initial; + height: calc(100% - 14rem); + } + + .main-fs { + padding-top: 4rem; + } +} + +// body, +// html { +// height: 100%; +// } + +.canvas-container-jtd { + margin-top: 4px; + border: 2px solid gray; + border-radius: 4px; + width: 100%; + height: 600px; +} + +.container-jtd-fs { + border: 2px solid gray; + border-radius: 4px; + width: 100%; +} + +.canvas-container-jtd:not(.container-jtd-fs):not(.pointer-events) { + pointer-events: none; +} + +.pure-button { + border-radius: 4px !important; +} + +.pure-label { + padding-left: 4px !important; +} + +.pure-checkbox { + display: inline !important; + margin-right: 4px !important; +} + +.slider-container { + padding-left: 16px; + padding-right: 16px; +} + +th, +td { + min-width: auto; + text-align: center; +} diff --git a/site/algorithms/arithmetic.md b/site/algorithms/arithmetic.md new file mode 100644 index 0000000..f575377 --- /dev/null +++ b/site/algorithms/arithmetic.md @@ -0,0 +1,88 @@ +--- +title: Arithmetic Coding +layout: default +parent: Overview of Algorithms +nav_order: 5 +has_children: false +--- + +# Arithmetic Coding + +In the world of dictionary coding and probability based encoding, the floating point weirdness that is arithmetic coding is a refreshing and surprisingly efficient lossless compression algorithm. The algorithm takes the form of two stages, the first stage translates a string into a floating point range and the second stage translates this into a binary sequence. Let's take a look at how each stage works. + +## Stage 1: Floating Point Ranges + +At a very broad level arithmetic coding works by taking a character and assigning it a frequency to a table. This frequency is then mapped to a number line between 0 and 1. So, if we have the character frequency table as shown below for the word "HELLO", we would end up with our number line shown below. + +| Character | Frequency | Probability | +| --------- | --------- | ----------- | +| H | 1 | 20% | +| E | 1 | 20% | +| L | 2 | 40% | +| O | 1 | 20% | + +![Arithmetic number line](/assets/arithmetic1.png) + +To do the encoding, we need a floating point range representing our encoded string. So, for example, let's encode "HELLO". We start out by encoding just the letter "H", which would give us the range of 0 to 0.2. However, we're not just encoding "H" so, we need to encode "E". To encode "E" we take the range from encoding "H", 0 to 0.2, and apply our same frequency table to that. You can see this represented below. + +![Arithmetic number line with two frequency tables](/assets/arithmetic2.png) + +Blown up, you can see that we're essentially copying the number line down, but fitting it within the range of 0 to 0.2 instead of 0 to 1. + +![Arithmetic number line with the range of 0-0.2](/assets/arithmetic3.png) + +Now, we'll encode the letter "E", and we can see it falls within the range of 0.04 to 0.08. + +![Arithmetic number line with the range of 0-0.2 with "HE" encoded](/assets/arithmetic4.png) + +As we move through this process, this copying of the number line and fitting it within the previous range continues until we encode our entire string. Though, if you're familiar with floating point arithmetic in computers, you know that [computers aren't good with decimals](https://stackoverflow.com/questions/21895756/why-are-floating-point-numbers-inaccurate), especially long ones. There are [some workarounds](https://softwareengineering.stackexchange.com/questions/167147/why-dont-computers-store-decimal-numbers-as-a-second-whole-number) to this, but generally floating point math is too inefficient or innaccurate to make arithmetic coding work quickly or properly for compression. + +The answer to this issue is called finite-precision arithmetic coding, with the above approach of fitting the number line within a range known as the infinite-precision version because we (supposedly) have an infinite amount of precision. + +Now if we continue this process, we get a range representing 0.06368 to 0.06496. The difference between these two numbers is just 0.00128, a big difference from the 0.2 difference when encoding just "H". You can imagine that larger files will have an even smaller difference between the two ranges, spelling out the need for finite-precision arithmetic coding. + +## Stage 2: Binary Search + +The next, and luckily final, stage is to run a binary search-like algorithm over the table to find a binary range that lays within our range from the first stage. + +The way this works is actually quite simple. We take our number line from 0 to 1, and lay it out. + +![Arithmetic number line](/assets/arithmetic1.png) + +Then, we plot our range on the number line, and place our current target in the middle of the range: 0.5. + +![Arithmetic number line with target and range](/assets/arithmetic5.png) + +The trick is to see whether our range falls on the **left** or **right** side of our target (0.5). In this case, our range pretty clearly falls on the left hand side so we output a 0. If it fell on the right hand side we would output a 1. + +Now here's where things get interesting. We change the top end of our range from 1 to 0.5, so now we're looking at the range from 0 to 0.5, with out target at 0.25 (0.25 is in between 0 and 0.5). + +![Arithmetic number line with target and range from 0-0.5](/assets/arithmetic6.png) + +You can see the range moves closer to our target and the area between gets a little larger. It's important to note we're not changing the range, just looking at it magnified. Our range is still below 0.25 so we'll output a 0 and repeat this process for the range of 0-0.25. + +This continues until you're left with a binary sequence that represents a target, just like the 0.5 and 0.25 from earlier examples, that lays within our encoded range from stage 1. This binary stream is the coded version (the compressed version) as we can use it to get back to the original string with the right frequency table. + +## Infinite vs. Finite Precision + +Infinite precision is the process that we just went over with two stages. However as we saw, the more characters we encode, the smaller the difference between our range floor and ceiling gets. This means that as we encode more and more characters the top and bottom sections of the range will eventually meet and represent the same value because a typical 32-bit system cannot represent infinite precision. There are ways around this, such as increasing the size of the floating point number's precision or using infinite precision, but these solutions don't work for all data or are very inefficient respectively. + +The harder solution is to combine these steps in one stage, which is called finite-precision arithmetic coding because it only requires a finite amount of precision to operate. This version works by encoding the first character, then immediately trying to see if the range falls above or below 0.5. If so, it will output the binary number representing which half it lays within and will "blow up" the range so that it doesn't lose precision. There is also an important corner-case of encoding a "10" or "01" if the range lays within 0.25-0.75 which requires memory to be carried over from each encoding. + +To put it simply, infinite-precision arithmetic coding is a simple and easy way to understand arithmetic coding while finite-precision arithmetic coding is more complicated but scalable and efficient. + +Now unfortunately I can't explain how to implement your own version of finite-precision arithmetic coding well enough to be comprehensive, so I'll redirect you to a [wonderful article by Mark Nelson](https://marknelson.us/posts/2014/10/19/data-compression-with-arithmetic-coding.html) that explains how to write an arithmetic coder with infinite and finite precision. There are also some wonderful online lectures by mathematicalmonk on YouTube that go into detail about [finite-precision coding](https://www.youtube.com/watch?v=-7i6HaYhyW4) in a visual way. If anything in this article doesn't make sense to you then I can't recommend mathematicalmonk's YouTube lectures and Mark Nelson's article. [Arithmetic Compression from Compressor Head](https://www.youtube.com/watch?v=FdMoL3PzmSA) on YouTube is also a great and enjoyable primer on the topic. + +## Adaptive Arithmetic Coding + +One last variation of arithmetic coding worth mentioning is the idea of adaptive arithmetic coding. This version works in mostly the same way as typical arithmetic coding except that rather than building a frequency table from the source, it builds the frequency table as it encodes each character. + +This means if you were encoding "HELLO", it would start with "H" representing 100% of the table. When it encoded the "E", it would update the frequency table so "H" would represent 50% of the table and "E" representing the remaining 50%. This concept allows arithmetic coding to adapt to the content as it's encoding which allows it to achieve a higher [compression ratio]({% link reference/compression_ratios.md %}). + +## Resources + +If you're interested in learning more about arithmetic coding, check out these great resources: + +- [Mark Nelson - Data Compression With Arithmetic Coding](https://marknelson.us/posts/2014/10/19/data-compression-with-arithmetic-coding.html) +- [Arithmetic Compression from Compressor Head](https://www.youtube.com/watch?v=FdMoL3PzmSA) +- [mathematicalmonk - Arithmetic Coding](https://www.youtube.com/watch?v=-7i6HaYhyW4) diff --git a/site/algorithms/dictionary.md b/site/algorithms/dictionary.md new file mode 100644 index 0000000..3ba8833 --- /dev/null +++ b/site/algorithms/dictionary.md @@ -0,0 +1,105 @@ +--- +title: Dictionary Coding +layout: default +parent: Overview of Algorithms +nav_order: 2 +has_children: false +--- + +# Dictionary Coding + +Dictionary coding is one of the most primitive and powerful forms of compression that exists currently. In fact, we use it everyday in English. I've actually used it already. Did you catch that? + +The contraction "I've" is technically a form of dictionary coding because when we read the word we automatically expand it to "I have" in our mind. This simple concept is used everywhere from spoken languages, mathematic functions, to file encodings. + +More advanced forms of dictionary coding form the basis for many different compression algorithms aside from a simple search-and-replace step such as [LZ]({% link algorithms/lz.md %}), [Huffman]({% link algorithms/huffman.md %}), and more. + +## The Concept + +Let's get an idea of how you could use dictionary coding to compress data. + +So let's say we're working in a restaurant and we have to communicate to the chefs what food we need to be prepared on paper. Now our restaurant has three things on the menu: + +- Pizza +- Fries +- Milkshakes + +Rather than writing down "pizza" or "fries" everytime someone order's pizza or fries, we can assign each item a unique code. + +- **1** - Pizza +- **2** - Fries +- **3** - Milkshake + +Now when we're preparing order tickets for the kitchen, we can simply write 1, 2, or 3. This simple concept is used to improve upon the most advanced modern compression algorithms. + +## Implementation + +Implementing a dictionary coder and decoder is actually **very** simple. All we're really doing is replacing the long text with corresponding codes to encode it, and replacing codes with the text it represents to decode it. + +Here's a sample: + +```python +text = "Order: pizza, fries, milkshake" +encoded = text.replace("pizza", "1").replace("fries", "2").replace("milkshake", "3") +print(encoded) +# Order: 1, 2, 3 +``` + +Decoding is the same, just in reverse: + +```python +text = "Order: 1, 2, 3" +decoded = text.replace("1", "pizza").replace("2", "fries").replace("3", "milkshake") +print(decoded) +# Order: pizza, fries, milkshake +``` + +If we want to get a bit fancier we can even use a **dictionary** to dynamically pull codes and values from: + +```python +codes = {"pizza": "1", "fries": "2", "milkshake": "3"} +text = "Order: pizza, fries, milkshake" + +encoded = text + +for value, code in codes.items(): + encoded = encoded.replace(value, code) + +print(encoded) +# Order: 1, 2, 3 +``` + +And to decode: + +```python +codes = {"pizza": "1", "fries": "2", "milkshake": "3"} +text = "Order: 1, 2, 3" + +decoded = text + +for value, code in codes.items(): + decoded = decoded.replace(code, value) + +print(decoded) +# Order: pizza, fries, milkshake +``` + +## Caveats + +The key to dictionary coding is that it solves a different problem than general-purpose encoders. A dictionary coder must be built with a known list of words (or bytes) that are very common to be able to see any real difference. For example, you could build a dictionary coder with the most common English character and encode Shakespeare, which would probably give you a good [compression ratio]({% link reference/compression_ratios.md %}). But if you were to use the same dictionary to encode a PDF or HTML file you would get much worse results. You also have to make sure that both the coder and decoder have the same dictionaries, otherwise the encoded text will be useless. + +## Common Usage + +While dictionary coders may sound imperfect and niche, they're quite the opposite. Web compression algorithms like [Brotli](https://brotli.io/) use a dictionary with the most common words, HTML tags, JavaScript tokens, and CSS properties to encode web assets. [This dictionary](https://gist.github.com/klauspost/2900d5ba6f9b65d69c8e), while large, is insignificant compared to the savings they provide to each file they decode. + +Here's some modern algorithms that employ dictionary coding: + +- [Brotli](https://brotli.io/) +- [Zstandard](https://facebook.github.io/zstd/) + +## Resources + +If you're interested in learning more about dictionary coding, check out some of these great resources: + +- [Dictionary coder on Wikipedia](https://en.wikipedia.org/wiki/Dictionary_coder) +- [University of Washington Dictionary Coding](https://courses.cs.washington.edu/courses/csep521/09au/DictionaryCoding.pdf) diff --git a/site/algorithms/dmc.md b/site/algorithms/dmc.md new file mode 100644 index 0000000..1158232 --- /dev/null +++ b/site/algorithms/dmc.md @@ -0,0 +1,41 @@ +--- +title: Dynamic Markov Compression +layout: default +parent: Overview of Algorithms +nav_order: 4 +has_children: false +--- + +# Dynamic Markov Compression + +Dynamic Markov Compression is an obscure form of compression that uses [Markov chains](https://en.wikipedia.org/wiki/Markov_chain) to model the patterns represented in a file. + +## Markov Chains + +Markov Chains are a simple way to model the transitions between states based on a measureable probability. For example, we could use a Markov Chain to model the weather and the probability that it will become sunny if it's already raining, or vice-versa. + +![Markov Chain diagram for sunny and rainy states](/assets/MarkovChains.png) + +Each circle represents a **state**, and each arrow represents a **transition**. In this example, we have two states, raining and sunny, a perfect representation of true weather. Each state has two possible transitions, it can transition to itself again or it can transition to another state. The likelihood of each transition is defined by a percentage representing the probability that the transition occurs. + +Now let's say it's sunny and we're following this model. According to the model there's a 50% chance it's sunny **again** tomorrow or a 50% chance it's rainy tomorrow. If it becomes rainy, then there's a 25% chance it's rainy the day after that or a 75% chance it's sunny the day after that. + +Markov Chains may sound scary but the essence of how they work is quite simple. Markov Chains are the statistical model behind a lot of the technology we use today from Google's PageRank search algorithm to predictive text on smartphone keyboards. If you'd like to learn more, check out this [wonderful article](https://setosa.io/ev/markov-chains/) by Victor Powell and Lewis Lehe that goes into depth about how Markov Chains work. They also have a wonderful [interactive demo](https://setosa.io/markov). + +## Markov Chain Powered Compression + +Dynamic Markov Compression is a very obscure and complicated subject when it comes to implementation, and unfortunately I cannot claim to understand it well enough to explain it myself. Though, I have written a similar algorithm from my own trial-and-error that employs stateful Markov chains that model a file. You can find the source code within the [Raisin project]({% link reference/raisin.md %}) under the [`compressor/mcc` package](https://github.com/go-compression/raisin/blob/master/compressor/mcc). This code is un-optimized and a bit messy as it exists only as a research project to learn more about DMC. + +If you have a better understanding of DMC and would like to contribute to this article, we would appreciate any and all [contributions]({% link contributing.md %})! + +## Resources + +If you're interested in trying to implement DMC yourself or are just interested in the algorithm, here's a few helpful resources as a jumping-off point: + +- [Dynamic Markov Compression on Wikipedia](https://en.wikipedia.org/wiki/Dynamic_Markov_compression) +- [An Exploration of Dynamic Markov Compression Thesis](https://ir.canterbury.ac.nz/bitstream/handle/10092/9572/whitehead_thesis.pdf?sequence=1) +- [The structure of DMC](https://ieeexplore.ieee.org/document/515497) (Paywall) +- [Original Paper](https://academic.oup.com/comjnl/article-pdf/30/6/541/935458/30-6-541.pdf) +- [Original C Implementation](https://web.archive.org/web/20070630111546/http://plg.uwaterloo.ca/~ftp/dmc/dmc.c) by Gordon Cormack +- [Markov Chain Compression - Compressor Head](https://www.youtube.com/watch?v=05RFEGWNxts) +- [Markov Chains](https://setosa.io/ev/markov-chains/) diff --git a/site/algorithms/huffam-program.md b/site/algorithms/huffam-program.md new file mode 100644 index 0000000..6de23e8 --- /dev/null +++ b/site/algorithms/huffam-program.md @@ -0,0 +1,16 @@ +--- +title: Tree Building Implementation +layout: default +parent: Huffman +grand_parent: Overview of Algorithms +nav_order: 1 +--- + +# How To Build a Tree (Programmatically) + +## General Implementation +Push an array of huffman leaf objects containing each character and its associated frequency into a priority queue. To start building the tree, pop two leafs from the queue and assign them as the left and right leafs for a node. + +Using this new node, push the node into the priority queue. + +Continue this process until the size of the queue is 1. diff --git a/site/algorithms/huffman.md b/site/algorithms/huffman.md new file mode 100644 index 0000000..cc295b7 --- /dev/null +++ b/site/algorithms/huffman.md @@ -0,0 +1,100 @@ +--- +title: Huffman +layout: default +parent: Overview of Algorithms +nav_order: 3 +has_children: true +--- + +# Huffman + +Since it's creation by David A. Huffman in 1952, Huffman coding has been regarded as one of the most efficient and optimal methods of compression. Huffman's optimal compression ratios are made possible through it's character counting functionality. Unlike many algorithms in the Lempel-Ziv suite, Huffman encoders scan the file and generate a frequency table and tree before begining the true compression process. Before discussing different implementations, lets dive deeper into how the algorithm works. + +# The Algorithm + +Although huffman encoding may seem confusing from an outside view, we can break it into three simple steps: + +- [Frequency Counting](#frequency-counting) + +- [Tree Building](#tree-Building) + +- [Character Encoding](#character-Encoding) + +## Frequency Counting + +Let's start out by going over the frequency counting step. Throughout all of the examples, I will be using the following sample input string: + +``` +I AM SAM. I AM SAM. SAM I AM. +THAT SAM-I-AM! THAT SAM-I-AM! I DO NOT LIKE THAT SAM-I-AM! +``` + +The huffman encoder starts out by going over the inputted text and outputing a table correlating each character to the number of time it appears in the text. For the sample input, the table would look this: + +| Frequency | Character | +| --------- | --------- | +| 1 | N | +| 1 | \n | +| 1 | K | +| 1 | D | +| 1 | L | +| 1 | E | +| 2 | O | +| 3 | H | +| 3 | ! | +| 3 | . | +| 6 | - | +| 6 | S | +| 7 | T | +| 8 | I | +| 12 | M | +| 15 | A | +| 17 | | + +As displayed above, the table is sorted to ensure consistency in each step of the compression process. + +## Tree Building + +Once the frequency table is created, the huffman encoder builds a huffman tree. A huffman tree follows the same structure as a normal binary tree, containing nodes and leafs. Each Huffman Leaf contains two values, the character and it's corresponding frequency. + +To build the tree, we traverse our table of frequencies and characters, and push the characters with the highest frequencies to the top of tree. Continuing the traversal until each table value is represented on a Huffman Leaf. + +That might be confusing, so lets break it down step by step. + +Huffman compression works by taking existing 8 bit characters and assigning them to a smaller number of bits. To optimize the compression, the characters with the highest frequency are given smaller bit values. + +A Huffman Tree helps us assign and visualize the new bit value assigned to existing characters. Similar to a binary tree, if we start at the root node, we can traverse the tree by using 1 to move to the right and 0 to move to the left. The position of a leaf node relative the root node is used to determine it's new bit value. + +A huffman tree for our example is depicted below: +![Sample Huffman Tree](https://i.ibb.co/jyPPwnw/Screen-Shot-2020-08-31-at-10-34-00-AM.png) + +As shown in the image, Huffman trees can get very large and complicated very easily. To see a sample tree for any text go to url. + +To understand more about the programatic implementation of tree building, [click here]({% link algorithms/huffam-program.md %}). + +## Character Encoding + +Character encoding is the final step for most huffman encoders. Once a tree and frequency table has built, the final step is to encode the characters from the initial file and write the encoded bytes to a new file. + +This can be done in two ways. + +- [Tree Traversal](#tree-traversal) +- [Array Indexing](#array-indexing) + +### Tree Traversal + +Tree traversal is the first way of encoding the input of a huffman encoder. For each character, the tree is traversed recursively until a leaf with a matching character is found. + +This method can easily get complicated and very inefficient as the tree has to be traversed multiple times. + +For a simpler and quicker solution, we can use [Array Indexing](#array-indexing) + +### Array Indexing + +When compared to the previous tree traversal method, array indexing is much less complicated and significantly faster. + +Before encoding the characters, the tree is traversed once and the values for each leaf are outputted in two corresponding arrays. The first array contains the value of each character, while the second contains its updated bit value. + +Once created, the arrays are traversed and each character in the input is replaced with its updated bit value. + +Once a new output text is generated, it is encoded as a byte array and written to the output file. diff --git a/site/algorithms/lz.md b/site/algorithms/lz.md new file mode 100644 index 0000000..45a870f --- /dev/null +++ b/site/algorithms/lz.md @@ -0,0 +1,38 @@ +--- +title: Lempel-Ziv +layout: default +parent: Overview of Algorithms +nav_order: 1 +has_children: true +--- + +# Lempel-Ziv + +Lempel-Ziv, commonly referred to as LZ77/LZ78 depending on the variant, is one of the oldest, most simplistic, and widespread compression algorithms out there. Its power comes from its simplicity, speed, and decent compression rates. Now before we dive into an implementation, let's understand the concept behind Lempel-Ziv and the various algorithms it has spawned. + +## The Algorithm(s) + +Lempel-Ziv at its core is very simple. It works by taking an input string of characters, finding repetitive characters, and outputting an "encoded" version. To get an idea of it, here's an example. + +``` +Original: Hello everyone! Hello world! +Encoded: Hello everyone! <16,6>world! +``` + +As you can see, the algorithm simply takes an input string, in this case, "Hello everyone! Hello world!", and encodes it character by character. If it tries to encode a character it has already seen it will check to see if it has seen the next character. This repeats until it the character it's checking hasn't been seen before, following the characters it's currently encoding, at this point it outputs a "token", which is `<16,6>` in this example, and continues. + +The `<16,6>` token is quite simple to understand too, it consists of two numbers and some syntactic sugar to make it easy to understand. The first number corresponds to how many characters it should look **backwards**, and the next number tells it how many characters to **go forwards and copy**. This means that in our example, `<16,6>` expands into "Hello " as it goes 16 characters backwards, and copies the next 6 characters. + +This is the essential idea behind the algorithm, however it should be noted that there are many variations of this algorithm with different names. For example, in some implementations, the first number means go **forwards from the beginning** instead of **backwards from the current position**. Small (and big) differences like these are the reason for so many variations: + +- [LZSS]({% link algorithms/lzss.md %}) - Lempel-Ziv-Storer-Szymanski +- LZW - Lempel-Ziv-Welch +- LZMA - Lempel–Ziv–Markov chain algorithm +- LZ77 - Lempel-Ziv 77 +- LZ78 - Lempel-Ziv 78 + +It's also important to understand the difference between LZ77 and LZ78, the first two Lempel-Ziv algorithms. LZ77 works very similarly to the example above, using a token to represent an offset and length, while LZ78 uses a more complicated dictionary approach. For a more in-depth explanation, make sure to check out [this wonderful article](https://towardsdatascience.com/how-data-compression-works-exploring-lz78-e97e539138) explaining LZ78. + +## Implementations + +Now because there are so many different variations of Lempel-Ziv algorithms, there isn't a single "LZ" implementation. WIth that being said, if you are interested in implementing a Lempel-Ziv algorithm yourself, you'll have to choose an algorithm to start with. [LZSS]({% link algorithms/lzss.md %}) is a great jumping-off point as it's a basic evolution of LZ77 and can be implemented very easily while achieving a respectable compression ratio. If you're interested in another algorithm, head back to [the algorithms](#the-algorithms) overview. diff --git a/site/algorithms/lzss.md b/site/algorithms/lzss.md new file mode 100644 index 0000000..fc3f5a9 --- /dev/null +++ b/site/algorithms/lzss.md @@ -0,0 +1,658 @@ +--- +title: LZSS +layout: default +parent: Lempel-Ziv +grand_parent: Overview of Algorithms +nav_order: 1 +--- + +# Lempel-Ziv-Storer-Szymanski + +Lempel-Ziv-Storer-Szymanski, which we'll refer to as LZSS, is a simple variation of the common [LZ77]({% link algorithms/lz.md %}) algorithm. It uses the same token concept with an offset and length to tell the decoder where to copy the text, except it only places the token when the token is shorter than the text it is replacing. + +The idea behind this is that it will never increase the size of a file by adding tokens everywhere for repeated letters. You can imagine that LZ77 would easily increase the file size if it simply encoded every repeated letter "e" or "i" as a token, which may take at least 5 bytes depending on the file and implementation instead of just 1 for LZSS. + +## Implementing an Encoder + +Let's take a look at some examples, so we can _see_ exactly how it works. The [wikipedia article for LZSS](https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Storer%E2%80%93Szymanski) has a great example for this, which I'll use here, and it's worth a read as an introduction to LZSS. + +So let's encode an excerpt of Dr. Seuss's Green Eggs and Ham with LZSS (credit to Wikipedia for this example). + +``` +I AM SAM. I AM SAM. SAM I AM. + +THAT SAM-I-AM! THAT SAM-I-AM! I DO NOT LIKE THAT SAM-I-AM! + +DO WOULD YOU LIKE GREEN EGGS AND HAM? + +I DO NOT LIKE THEM,SAM-I-AM. +I DO NOT LIKE GREEN EGGS AND HAM. +``` + +This text takes up 192 bytes in a typical UTF-8 encoding. Let's take a look at the LZSS encoded version. + +``` +I AM SAM. <10,10>SAM I AM. + +THAT SAM-I-AM! T<15,14>I DO NOT LIKE<29,15> + +DO WOULD YOU LIKE GREEN EGGS AND HAM? + +I<69,15>EM,<113,8>.<29,15>GR<64,16>. +``` + +This encoded, or compressed, version only takes 148 bytes to store (without a [magic type](https://linux.die.net/man/5/magic) to describe the file type), which is 77% of the original file size, or a compression ratio of 1.3. Not bad! + +### Analysis + +Now let's take a second to understand what's happening before you start trying to conquer the world with LZSS. + +As we can see, the "tokens" are reducing the size of the file by referencing pieces of text that are longer than the actual token. Let's look at the first line: + +``` +I AM SAM. <10,10>SAM I AM. +``` + +The encoder works character by character. On the first character, 'I', it checks it's search buffer to see if it's already seen an 'I'. The search buffer is essentially the encoder's memory, for every character it encodes, it adds it into the search buffer so it can "remember" it. Because it hasn't seen an 'I' already (the search buffer is empty), it just outputs an 'I', adds it to the search buffer, and moves to the next character. The next character is ' ' (a space). The encoder checks the search buffer to see if it's seen a space before, and it hasn't so it outputs the space and moves forward. + +Once it gets to the second space (after "I AM"), LZ77 comes into play. It's already seen a space before because it's in the search buffer so it's ready to output a token, but first it tries to maximize how much text the token is referencing. If it didn't do this you could imagine that for every character it's already seen it would output something similar to `<5,1>`, which is 5 times larger than any character. So once it finds a character that it's already seen, it moves on to the next character and checks if it's already seen the next character directly after the previous character. Once it finds a sequence of characters that it hasn't already seen, then it goes back one character to the sequence of characters it's already seen and prepares the token. + +Once the token is ready, the difference between LZ77 and LZSS starts to shine. At this point LZ77 simply outputs the token, adds the characters to the search buffer and continues. LZSS does something a little smarter, it will check to see if the size of the outputted token is larger than the text it's representing. If so, it will output the text it represents, not the token, add the text to the search buffer, and continue. If not, it will output the token, add the text it represents to the search buffer and continue. + +![](/assets/LZ1.png) + +Coming back to our example, the space character has already been seen, but a space followed by an "S" hasn't been seen yet (" S"), so we prepare the token representing the space. The token in our case would be "<3,1>", which means go back three characters and copy 1 character(s). Next we check to see if our token is longer than our text, and "<3,1>" is indeed longer than " ", so it wouldn't make sense to output the token, so we output the space, add it to our search buffer, and continue. + +This entire process continues until we get to the "I AM SAM. ". At this point we've already seen an "I AM SAM. " but haven't seen an "I AM SAM. S" so we know our token will represent "I AM SAM. ". Then we check to see if "I AM SAM. " is longer than "<10,10>", which it is, so we output the token, add the text to our search buffer and continue along. + +![](/assets/LZ2.png) + +This process continues, encoding tokens and adding text to the search buffer character by character until it's finished encoding everything. + +### Takeaways + +There's a lot of information to unpack here, but the algorithm at a high level is quite simple: + +- Loop character by character +- Check if it's seen the character before + - If so, check the next character and prepare a token to be outputted + - If the token is longer than the text it's representing, don't output a token + - Add the text to the search buffer and continue + - If not, add the character to the search buffer and continue + +It's important to remember that no matter the outcome, token or no token, the text is always appended to the search buffer so it can always "remember" the text it's already seen. + +## Implementation + +Now let's take a stab at building our very own version so we can understand it more deeply. + +As with most of these algorithms, we have an implementation written in Go in our [raisin project](https://github.com/go-compression/raisin). If you're interested in what a more performant or real-world example of these algorithms looks like, be sure to check it out. However for this guide we'll use Python to make it more approachable so we can focus on understanding the algorithm and not the nuances of the language. + +### Character Loop + +Let's get started with a simple loop that goes over each character for encoding. As we can see from our [takeaways](#takeaways), the character-by-character loop is what powers LZSS. + +```python +text = "HELLO" +encoding = "utf-8" + +text_bytes = text.encode(encoding) + +for char in text_bytes: + print(bytes([char]).decode(encoding)) # Print the character +``` + +Output: + +``` +H +E +L +L +O +``` + +Although the code is functionally pretty simple, there's a few important things going on here. You can see that looping character-by-character isn't as simple as `for char in text`, first we have to encode it and then loop over the encoding. This is because it converts our string into an array of [bytes]({% link reference/reference.md %}), represented as a Python object called `bytes`. When we print the character out, we have to convert it from a byte (represented as a Python `int`) back to a string so we can see it. + +The reason we do this is because a byte is really just a number from 0-255 as it is represented in your computer as 8 1's and 0's, called [binary](https://en.wikipedia.org/wiki/Binary_code). If you don't already have a basic understanding of how computers store our language, you should get acquainted with it on our [encodings]({% link +reference/encodings.md %}) page. + +### Search Buffers + +Great, we have a basic program working which can loop over our text and print it out, but that's pretty far off from compression so let's keep going. The next step to our program is to implement our "memory" so the program can check to see if its already seen a character. + +```python +text = "HELLO" +encoding = "utf-8" + +text_bytes = text.encode(encoding) + +search_buffer = [] # Array of integers, representing bytes + +for char in text_bytes: + print(bytes([char]).decode(encoding)) # Print the character + search_buffer.append(char) # Add the character to our search buffer +``` + +We no longer need to output anything as we're just adding each character to the search buffer with the `append` method. + +### Checking Our Search buffer + +Now let's try to implement the LZ part of LZSS, we need to start looking **backwards** for characters we've already seen. This can accomplished quite easily using the `list.index` method. + +```python +for char in text_bytes: + if char in search_buffer: + print(f"Found at {search_buffer.index(char)}") + + print(bytes([char]).decode(encoding)) # Print the character + search_buffer.append(char) # Add the character to our search buffer +``` + +Output: + +``` +H +E +L +Found at 2 +L +O +``` + +Notice the `if char in search_buffer`, without this Python will throw an `IndexError` if the value is not in the list. + +### Building Tokens + +Now let's build a token and output it when we find the character. + +```python +i = 0 +for char in text_bytes: + if char in search_buffer: + index = search_buffer.index(char) # The index where the character appears in our search buffer + offset = i - index # Calculate the relative offset + length = 1 # Set the length of the token (how many character it represents) + + print(f"<{offset},{length}>") # Build and print our token + else: + print(bytes([char]).decode(encoding)) # Print the character + + search_buffer.append(char) # Add the character to our search buffer + + i += 1 +``` + +Output: + +``` +H +E +L +<1,1> +O +``` + +We're nearly there! This is actually a rough implementation of LZ77, however there's one issue. If we have a word that repeats twice, it will copy each character instead of the **entire word**. + +``` +text = "SAM SAM" +``` + +Output + +``` +S +A +M + +<4,1> +<4,1> +<4,1> +``` + +> Note: `<4,1>` is technically correct as each character is represented 4 characters behind the beginning of the token. + +That's not exactly right, we should see `<4,3>` instead of three `<4,1>` tokens. So let's write some code that can check our search buffer for more than one character. + +### Checking the Search Buffer for More Characters + +Let's modify our code to check the search buffer for more than one character. + +```python +def elements_in_array(check_elements, elements): + i = 0 + offset = 0 + for element in elements: + if len(check_elements) <= offset: + # All of the elements in check_elements are in elements + return i - len(check_elements) + + if check_elements[offset] == element: + offset += 1 + else: + offset = 0 + + i += 1 + return -1 + +text = "SAM SAM" +encoding = "utf-8" + +text_bytes = text.encode(encoding) + +search_buffer = [] # Array of integers, representing bytes +check_characters = [] # Array of integers, representing bytes + +i = 0 +for char in text_bytes: + check_characters.append(char) + index = elements_in_array(check_characters, search_buffer) # The index where the characters appears in our search buffer + + if index == -1 or i == len(text_bytes) - 1: + if len(check_characters) > 1: + index = elements_in_array(check_characters[:-1], search_buffer) + offset = i - index - len(check_characters) + 1 # Calculate the relative offset + length = len(check_characters) # Set the length of the token (how many character it represents) + + print(f"<{offset},{length}>") # Build and print our token + else: + print(bytes([char]).decode(encoding)) # Print the character + + check_characters = [] + + search_buffer.append(char) # Add the character to our search buffer + + i += 1 +``` + +Output: + +``` +S +A +M + +<4,3> +``` + +It works! But there's quite a lot to unpack here so let's go through it line by line. + +The first and largest addition is the `elements_in_array` function. The code here essentially checks to see if specific elements are within an array in an exact order. If so, it will return the index in the array where the elements start, and if not it will return -1. + +Moving on to our main function loop we can see now have `check_characters` defined at the top. This variable tracks what characters we're looking for in our `search_buffer`. As we loop through, we use `check_characters.append(char)` to add the current character to the characters we're searching. Then we check to see if `check_characters` can be found within `search_buffer` with `elements_in_array`. + +Now we have the best part: the logic. If we couldn't find a match or it's the last character we want to output something. If we couldn't find more than one character in the `search_buffer` then that means `check_characters` minus the last character was found, so we'll output a token representing `check_characters` minus the last character. Otherwise, we couldn't find a match for a single character so let's just output that character. + +And that's essentially LZ77! Try it out for yourself with some different strings to see for yourself. However, you might notice that we're trying to implement LZSS, not LZ77, so we have one more piece to implement. + +### Comparing Token Sizes + +This crucial piece is the process described earlier of comparing the size of tokens versus the text it represents. Essentially we're saying, if the token takes up more space than the text it's representing then don't output a token, just output the text. +![](/assets/LZ1.png) + +Lucky for us this is a pretty simple change. Our main loop now looks like so: + +```python +for char in text_bytes: + check_characters.append(char) + index = elements_in_array(check_characters, search_buffer) # The index where the characters appears in our search buffer + + if index == -1 or i == len(text_bytes) - 1: + if len(check_characters) > 1: + index = elements_in_array(check_characters[:-1], search_buffer) + offset = i - index - len(check_characters) + 1 # Calculate the relative offset + length = len(check_characters) # Set the length of the token (how many character it represents) + + token = f"<{offset},{length}>" # Build our token + + if len(token) > length: + # Length of token is greater than the length it represents, so output the character + print(bytes(check_characters).decode(encoding)) # Print the characters + else: + print(token) # Print our token + else: + print(bytes([char]).decode(encoding)) # Print the character + + check_characters = [] + + search_buffer.append(char) # Add the character to our search buffer + + i += 1 +``` + +Output: + +``` +S +A +M + +SAM +``` + +The key is the `len(token) > length` which checks if the length of the token is longer than the length of the text it's representing. If it is, it simply outputs the characters, otherwise it outputs the token. + +### Sliding Windows + +The last piece to the puzzle is something you might have noticed if you're already trying to compress large file: the search buffer gets **big**. Let's say we're compressing a 1 Gb file. After we go over each character, we add it to the search buffer and continue, though each iteration we also search the entire search buffer for certain characters. This quickly adds up for larger files. In our 1 Gb file scenario, near the end we'll have to search almost 1 billion bytes to **encode a single character**. + +It should be pretty obvious that this _very inefficient_. And unfortunately, there is no magic solution. You have to make a tradeoff. With every compression algorithm you have to decide between speed and compression ratio. Do you want a fast algorithm that can't reduce the file size very much, or a slow algorithm that reduces the file size more? The answer is: it depends. And so, the tradeoff in LZ77's case is to create a "sliding window". +![](/assets/LZ3.png) + +The "sliding window" is actually quite simple, all you do is cap off the maximum size of the search buffer. When you add a character to the search buffer that makes it larger than the maximum size of the sliding window then you remove the first character. That way the window is "sliding" as you move through the file, and the algorithm doesn't slow down! + +```python +max_sliding_window_size = 4096 + +... + +for char in text_bytes: + + ... + + search_buffer.append(char) # Add the character to our search buffer + + if len(search_buffer) > max_sliding_window_size: # Check to see if it exceeds the max_sliding_window_size + search_buffer = search_buffer[1:] # Remove the first element from the search_buffer + + ... +``` + +These changes should be pretty self-explanatory. We're just checking to see if the length of the `search_buffer` is greater than the `max_sliding_window_size`, and if so we pop the first element off of the `search_buffer`. + +Keep in mind that while a maximum sliding window size of 4096 character is typical, it may be hard to use during testing, try setting it much lower (like 3-4) and test it with some different strings to see how it works. + +### Putting it all together + +That's everything that makes up LZSS, but for the sake of completing our example, let's clean it up so we can call a function with some text, an optional `max_sliding_window_size`, and have it return the encoded text, rather than just printing it out. + +```python +encoding = "utf-8" + +def encode(text, max_sliding_window_size=4096): + text_bytes = text.encode(encoding) + + search_buffer = [] # Array of integers, representing bytes + check_characters = [] # Array of integers, representing bytes + output = [] # Output array + + i = 0 + for char in text_bytes: + check_characters.append(char) + index = elements_in_array(check_characters, search_buffer) # The index where the characters appears in our search buffer + + if index == -1 or i == len(text_bytes) - 1: + if len(check_characters) > 1: + index = elements_in_array(check_characters[:-1], search_buffer) + offset = i - index - len(check_characters) + 1 # Calculate the relative offset + length = len(check_characters) # Set the length of the token (how many character it represents) + + token = f"<{offset},{length}>" # Build our token + + if len(token) > length: + # Length of token is greater than the length it represents, so output the character + output.extend(check_characters) # Output the characters + else: + output.extend(token.encode(encoding)) # Output our token + else: + output.extend(check_characters) # Output the character + + check_characters = [] + + search_buffer.append(char) # Add the character to our search buffer + + if len(search_buffer) > max_sliding_window_size: # Check to see if it exceeds the max_sliding_window_size + search_buffer = search_buffer[1:] # Remove the first element from the search_buffer + + i += 1 + + return bytes(output) + +print(encode("SAM SAM", 1).decode(encoding)) +print(encode("supercalifragilisticexpialidocious supercalifragilisticexpialidocious", 1024).decode(encoding)) +print(encode("LZSS will take over the world!", 256).decode(encoding)) +print(encode("It even works with 😀s thanks to UTF-8", 16).decode(encoding)) +``` + +The function definition is pretty simple, we can just move our `text` and `max_sliding_window_size` outside of the function and wrap our code in a function definition. Then we simply call it with some different values to test it, and that's it! + +The finished code can be found in [lzss.py](https://github.com/go-compression/examples/blob/master/lz/lzss/lzss_encoder.py) in the examples GitHub repo. + +Lastly, there's a few bugs in our program that we encounter with larger files. If we have some text, for example: + +``` +ISAM YAM SAM +``` + +When the encoder gets to the space right before the "SAM", it will look for a space in the search buffer which it finds. Then it will search for a space and an "S" (" S") which it doesn't find, so it continues and starts looking for an "A". The issue here is that it skips looking for an "S" and continues to encode the "AM" not the "SAM". + +In some rare circumstances the code may generate a reference with a length that is larger than its offset which will result in an error. + +To fix this, we'll need to rewrite the logic in our encoder a little bit. + +```python +for char in text_bytes: + index = elements_in_array(check_characters, search_buffer) # The index where the characters appears in our search buffer + + if elements_in_array(check_characters + [char], search_buffer) == -1 or i == len(text_bytes) - 1: + if i == len(text_bytes) - 1 and elements_in_array(check_characters + [char], search_buffer) != -1: + # Only if it's the last character then add the next character to the text the token is representing + check_characters.append(char) + + if len(check_characters) > 1: + index = elements_in_array(check_characters, search_buffer) + offset = i - index - len(check_characters) # Calculate the relative offset + length = len(check_characters) # Set the length of the token (how many character it represents) + + token = f"<{offset},{length}>" # Build our token + + if len(token) > length: + # Length of token is greater than the length it represents, so output the characters + output.extend(check_characters) # Output the characters + else: + output.extend(token.encode(encoding)) # Output our token + + search_buffer.extend(check_characters) # Add the characters to our search buffer + else: + output.extend(check_characters) # Output the character + search_buffer.extend(check_characters) # Add the characters to our search buffer + + check_characters = [] + + check_characters.append(char) + + if len(search_buffer) > max_sliding_window_size: # Check to see if it exceeds the max_sliding_window_size + search_buffer = search_buffer[1:] # Remove the first element from the search_buffer + + i += 1 +``` + +To fix the first issue we add the current `char` to `check_characters` only at the end and check to see if `check_characters + [char]` is found. If not we know that `check_characters` is found so we can continue as normal, and `check_characters` gets cleared before `char` is added onto `check_characters` for the next iteration. We also implement a check on the last iteration to add the current `char` to `check_characters` as otherwise our logic wouldn't be run on the last character and a token wouldn't be created. + +To resolve the other problem we simply have to move the `search_buffer.append(char)` calls up into our logic and change them to `search_buffer.extend(check_characters)`. This way we only update our search buffer when we've already tried to find a token. + +## Implementing a Decoder + +What's the use of encoding something some text if we can't decode it? For that we'll need to build ourselves a decoder. + +Luckily for us, building a decoder is actually much simpler than an encoder because all it needs to know how to do is convert a token ("<5,2>") into the literal text it represents. The decoder doesn't care about search buffers, sliding windows, or token lengths, it has only one job. + +So, let's get started. We're going to decode character-by-character just like our encoder so we'll start with our main loop inside of a function. We'll also need to encode and decode the strings so we'll keep the `encoding = "utf-8"`. + +```python +encoding = "utf-8" + +def decode(text): + + text_bytes = text.encode(encoding) # The text encoded as bytes + output = [] # The output characters + + for char in text_bytes: + output.append(char) # Add the character to our output + + return bytes(output) + +print(decode("supercalifragilisticexpialidocious <35,34>").decode(encoding)) +``` + +Here we're setting up the structure for the rest of our decoder by setting up our main loop and declaring everything within a neat self-contained function. + +### Identifying Tokens + +The next step is to start doing some actual decoding. The goal of our decoder is to convert a token into text, so we need to first identify a token and extract our `offset` and `length` before we can convert it into text. +![](/assets/LZ4.png) + +> Notice the various components of a token that need to be identified and extracted so we can find the text they represent + +Let's make a small change so we can identify the start and end of a token. + +```python +for char in text_bytes: + if char == "<".encode(encoding)[0]: + print("Found opening of a token") + elif char == ">".encode(encoding)[0]: + print("Found closing of a token") + + output.append(char) # Add the character to our output + + return bytes(output) +``` + +Because we're going character-by-character we can simply check to see if the character is a token opening character or closing character to tell if we're inside a token. Let's add some more code to track the numbers between the comma, our seperator. + +```python +inside_token = False +scanning_offset = True + +length = [] # Length number encoded as bytes +offset = [] # Offset number encoded as bytes + +for char in text_bytes: + if char == "<".encode(encoding)[0]: + inside_token = True # We're now inside a token + scanning_offset = True # We're now looking for the length number + elif char == ",".encode(encoding)[0]: + scanning_offset = False + elif char == ">".encode(encoding)[0] and inside_token: + inside_token = False # We're no longer inside a token + + # Convert length and offsets to an integer + length_num = int(bytes(length).decode(encoding)) + offset_num = int(bytes(offset).decode(encoding)) + + print(f"Found token with length: {length_num}, offset: {offset_num}") + + # Reset length and offset + length, offset = [], [] + elif inside_token: + if scanning_offset: + offset.append(char) + else: + length.append(char) + + output.append(char) # Add the character to our output +``` + +Output: + +``` +Found token with length: 34, offset: 35 +supercalifragilisticexpialidocious <35,34> +``` + +We now have a bunch of `if` statements that give our loop some more control flow. Let's go over the changes. + +First off we have four new variables outside of the loop: + +- `inside_token` - Tracks whether or not we're inside a token +- `scanning_offset` - Tracks whether we're currently scanning for the offset number or the length number (1st or 2nd number in the token) +- `length` - Used to store the bytes (or characters) that represent the token's length +- `offset`- Used to store the bytes (or characters) that represent the token's offset + +Inside of the loop, we check if the character is a `<`, `,`, or a `>` and modify the variables accordingly to track where we are. If the character isn't any of those **and we're inside a token** then we want to add the character to either the offset or length because that means the character is an offset or length. + +Lastly, if the character is a `>`, that means we're exiting the token, so let's convert our `length` and `offset` into a Python `int`. We have to do this because they're currently represented as a list of bytes, so we need to convert those bytes into a Python string and convert that string into an `int`. Then we finally print that we've found a token. + +### Translating Tokens + +Now we have one last step left: translating tokens into the text they represent. Thanks to [Python list slicing](https://stackoverflow.com/questions/509211/understanding-slice-notation) this is quite simple. + +```python +for char in text_bytes: + if char == "<".encode(encoding)[0]: + inside_token = True # We're now inside a token + scanning_offset = True # We're now looking for the length number + token_start = i + elif char == ",".encode(encoding)[0]: + scanning_offset = False + elif char == ">".encode(encoding)[0] and inside_token: + inside_token = False # We're no longer inside a token + + # Convert length and offsets to an integer + length_num = int(bytes(length).decode(encoding)) + offset_num = int(bytes(offset).decode(encoding)) + + # Get text that the token represents + referenced_text = output[-offset_num:][:length_num] + + output.extend(referenced_text) # referenced_text is a list of bytes so we use extend to add each one to output + + # Reset length and offset + length, offset = [], [] + elif inside_token: + if scanning_offset: + offset.append(char) + else: + length.append(char) + else: + output.append(char) # Add the character to our output + + +return bytes(output) +``` + +Output: + +``` +supercalifragilisticexpialidocious supercalifragilisticexpialidocious +``` + +In order to calculate the piece of text that a token is referencing we can simply use our offset and length to find the text from the current output. We use a negative slice to grab all the characters backwards from `offset_num` and grab up to `length_num` elements. This results in a `referenced_text` that represents the token references. Finally we add the `referenced_text` to our output and we're finished. + +Lastly, we'll only want to add a character to the output **if we're not in a token** so we add an `else` to the end of our logic which only runs if we're not in a token. + +And that's it! We now have a LZSS decoder, and by extension, an LZ77 decoder as decoders don't need to worry about outputting a token only if it's greater than the referenced text. + +## Implementation Conclusion + +We've gone through step-by-step building an encoder and decoder and learned the purpose of each component. Let's do some basic benchmarks to see how well it works. + +```python +if __name__ == "__main__": + encoded = encode(text).decode(encoding) + decoded = decode(encoded).decode(encoding) + + print(f"Original: {len(text)}, Encoded: {len(encoded)}, Decoded: {len(decoded)}") + print(f"Lossless: {text == decoded}") + print(f"Compressed size: {(len(encoded)/len(text)) * 100}%") +``` + +Using the `text` as [Green Eggs and Ham by Doctor Seuss](https://www.site.uottawa.ca/~lucia/courses/2131-02/A2/trythemsource.txt), we see the output: + +``` +Original: 3463 bytes, Encoded: 1912 bytes, Decoded: 3463 bytes +Lossless: True +Compressed size: 55.21224371931851% +``` + +LZSS just reduced the file size by 45%, not bad! + +One thing to keep in mind is that when we refer to a "character", we really mean a "byte". Our loop runs byte-by-byte, not character-by-character. This distinction is minor but significant. In the world of encodings, not every character is a single byte. For example in `utf-8`, any english letter or symbol is a single byte, but more complicated characters like arabic, mandarin, or emoji characters require multiple bytes despite being a single "character". + +- 4 bytes - 😀 +- 1 byte - H +- 3 bytes - 话 +- 6 bytes - يَّ + +If you're interested in learning more about how bytes work, check out the Wikipedia articles on [Bytes](https://en.wikipedia.org/wiki/Byte) and [Unicode](https://en.wikipedia.org/wiki/Unicode) or our reference page on [bytes]({% link reference/bytes.md %}). diff --git a/algorithms/overview.md b/site/algorithms/overview.md similarity index 67% rename from algorithms/overview.md rename to site/algorithms/overview.md index 4b9d5e8..6dd6e39 100644 --- a/algorithms/overview.md +++ b/site/algorithms/overview.md @@ -11,15 +11,16 @@ The following is intended to be a comprehensive list of lossless compression alg - Run-length Coding - Range Coding -- Lempel-Ziv +- [Lempel-Ziv]({% link algorithms/lz.md %}) - LZ77 - LZ78 - - LZSS + - [LZSS]({% link algorithms/lz.md %}) - LZW +- [Dictionary Coding]({% link algorithms/dictionary.md %}) - Variable-length Coding -- Huffman Coding -- Arithmetic Coding -- Dynamic Markov Compression +- [Huffman Coding]({% link algorithms/huffman.md %}) +- [Arithmetic Coding]({% link algorithms/arithmetic.md %}) +- [Dynamic Markov Compression]({% link algorithms/dmc.md %}) - FLATE For a more complete list, check out these Wikipedia pages on [lossless algorithms](https://en.wikipedia.org/wiki/Category:Lossless_compression_algorithms) and [lossy algorithms](https://en.wikipedia.org/wiki/Category:Lossy_compression_algorithms). diff --git a/site/assets/CompressionRatio.svg b/site/assets/CompressionRatio.svg new file mode 100644 index 0000000..a249e4a --- /dev/null +++ b/site/assets/CompressionRatio.svg @@ -0,0 +1,81 @@ + +{\displaystyle {\rm {Compression\;Ratio}}={\frac {\rm {Uncompressed\;Size}}{\rm {Compressed\;Size}}}} + + + \ No newline at end of file diff --git a/site/assets/LZ1.png b/site/assets/LZ1.png new file mode 100644 index 0000000..34e4a9b Binary files /dev/null and b/site/assets/LZ1.png differ diff --git a/site/assets/LZ2.png b/site/assets/LZ2.png new file mode 100644 index 0000000..8a22433 Binary files /dev/null and b/site/assets/LZ2.png differ diff --git a/site/assets/LZ3.png b/site/assets/LZ3.png new file mode 100644 index 0000000..04b008a Binary files /dev/null and b/site/assets/LZ3.png differ diff --git a/site/assets/LZ4.png b/site/assets/LZ4.png new file mode 100644 index 0000000..23a886c Binary files /dev/null and b/site/assets/LZ4.png differ diff --git a/site/assets/MarkovChains.png b/site/assets/MarkovChains.png new file mode 100644 index 0000000..a9b3f8e Binary files /dev/null and b/site/assets/MarkovChains.png differ diff --git a/site/assets/arithmetic1.png b/site/assets/arithmetic1.png new file mode 100644 index 0000000..9491ace Binary files /dev/null and b/site/assets/arithmetic1.png differ diff --git a/site/assets/arithmetic2.png b/site/assets/arithmetic2.png new file mode 100644 index 0000000..d8375db Binary files /dev/null and b/site/assets/arithmetic2.png differ diff --git a/site/assets/arithmetic3.png b/site/assets/arithmetic3.png new file mode 100644 index 0000000..0881c1c Binary files /dev/null and b/site/assets/arithmetic3.png differ diff --git a/site/assets/arithmetic4.png b/site/assets/arithmetic4.png new file mode 100644 index 0000000..b90429a Binary files /dev/null and b/site/assets/arithmetic4.png differ diff --git a/site/assets/arithmetic5.png b/site/assets/arithmetic5.png new file mode 100644 index 0000000..437f69f Binary files /dev/null and b/site/assets/arithmetic5.png differ diff --git a/site/assets/arithmetic6.png b/site/assets/arithmetic6.png new file mode 100644 index 0000000..ce1ff03 Binary files /dev/null and b/site/assets/arithmetic6.png differ diff --git a/site/assets/css/interactive.css b/site/assets/css/interactive.css new file mode 100644 index 0000000..85429ba --- /dev/null +++ b/site/assets/css/interactive.css @@ -0,0 +1,28 @@ +.button-success, +.button-error, +.button-warning, +.button-secondary { + color: white; + border-radius: 4px; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); +} + +.button-success { + background: rgb(28, 184, 65); + /* this is a green */ +} + +.button-error { + background: rgb(202, 60, 60); + /* this is a maroon */ +} + +.button-warning { + background: rgb(223, 117, 20); + /* this is an orange */ +} + +.button-secondary { + background: rgb(66, 184, 221); + /* this is a light blue */ +} diff --git a/site/assets/css/nouislider.min.css b/site/assets/css/nouislider.min.css new file mode 100644 index 0000000..a6b0ef8 --- /dev/null +++ b/site/assets/css/nouislider.min.css @@ -0,0 +1,2 @@ +/*! nouislider - 14.6.1 - 8/17/2020 */ +.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-ms-touch-action:none;touch-action:none;-ms-user-select:none;-moz-user-select:none;user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-target{position:relative}.noUi-base,.noUi-connects{width:100%;height:100%;position:relative;z-index:1}.noUi-connects{overflow:hidden;z-index:0}.noUi-connect,.noUi-origin{will-change:transform;position:absolute;z-index:1;top:0;right:0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;-webkit-transform-style:preserve-3d;transform-origin:0 0;transform-style:flat}.noUi-connect{height:100%;width:100%}.noUi-origin{height:10%;width:10%}.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin{left:0;right:auto}.noUi-vertical .noUi-origin{width:0}.noUi-horizontal .noUi-origin{height:0}.noUi-handle{-webkit-backface-visibility:hidden;backface-visibility:hidden;position:absolute}.noUi-touch-area{height:100%;width:100%}.noUi-state-tap .noUi-connect,.noUi-state-tap .noUi-origin{-webkit-transition:transform .3s;transition:transform .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;right:-17px;top:-6px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;right:-6px;top:-17px}.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle{left:-17px;right:auto}.noUi-target{background:#FAFAFA;border-radius:4px;border:1px solid #D3D3D3;box-shadow:inset 0 1px 1px #F0F0F0,0 3px 6px -5px #BBB}.noUi-connects{border-radius:3px}.noUi-connect{background:#3FB8AF}.noUi-draggable{cursor:ew-resize}.noUi-vertical .noUi-draggable{cursor:ns-resize}.noUi-handle{border:1px solid #D9D9D9;border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #EBEBEB,0 3px 6px -3px #BBB}.noUi-active{box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #DDD,0 3px 6px -3px #BBB}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#E8E7E6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect{background:#B8B8B8}[disabled] .noUi-handle,[disabled].noUi-handle,[disabled].noUi-target{cursor:not-allowed}.noUi-pips,.noUi-pips *{-moz-box-sizing:border-box;box-sizing:border-box}.noUi-pips{position:absolute;color:#999}.noUi-value{position:absolute;white-space:nowrap;text-align:center}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{position:absolute;background:#CCC}.noUi-marker-sub{background:#AAA}.noUi-marker-large{background:#AAA}.noUi-pips-horizontal{padding:10px 0;height:80px;top:100%;left:0;width:100%}.noUi-value-horizontal{-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}.noUi-rtl .noUi-value-horizontal{-webkit-transform:translate(50%,50%);transform:translate(50%,50%)}.noUi-marker-horizontal.noUi-marker{margin-left:-1px;width:2px;height:5px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{padding:0 10px;height:100%;top:0;left:100%}.noUi-value-vertical{-webkit-transform:translate(0,-50%);transform:translate(0,-50%);padding-left:25px}.noUi-rtl .noUi-value-vertical{-webkit-transform:translate(0,50%);transform:translate(0,50%)}.noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}.noUi-tooltip{display:block;position:absolute;border:1px solid #D9D9D9;border-radius:3px;background:#fff;color:#000;padding:5px;text-align:center;white-space:nowrap}.noUi-horizontal .noUi-tooltip{-webkit-transform:translate(-50%,0);transform:translate(-50%,0);left:50%;bottom:120%}.noUi-vertical .noUi-tooltip{-webkit-transform:translate(0,-50%);transform:translate(0,-50%);top:50%;right:120%}.noUi-horizontal .noUi-origin>.noUi-tooltip{-webkit-transform:translate(50%,0);transform:translate(50%,0);left:auto;bottom:10px}.noUi-vertical .noUi-origin>.noUi-tooltip{-webkit-transform:translate(0,-18px);transform:translate(0,-18px);top:auto;right:28px} \ No newline at end of file diff --git a/site/assets/css/pretty-checkbox.min.css b/site/assets/css/pretty-checkbox.min.css new file mode 100644 index 0000000..394fa2c --- /dev/null +++ b/site/assets/css/pretty-checkbox.min.css @@ -0,0 +1,12 @@ +/** + * pretty-checkbox.css + * + * A pure CSS library to beautify checkbox and radio buttons + * + * Source: https://github.com/lokesh-coder/pretty-checkbox + * Demo: https://lokesh-coder.github.io/pretty-checkbox + * + * Copyright (c) 2017 Lokesh rajendran + */ + +.pretty *{box-sizing:border-box}.pretty input:not([type=checkbox]):not([type=radio]){display:none}.pretty{position:relative;display:inline-block;margin-right:1em;white-space:nowrap;line-height:1}.pretty input{position:absolute;left:0;top:0;min-width:1em;width:100%;height:100%;z-index:2;opacity:0;margin:0;padding:0;cursor:pointer}.pretty .state label{position:initial;display:inline-block;font-weight:400;margin:0;text-indent:1.5em;min-width:calc(1em + 2px)}.pretty .state label:after,.pretty .state label:before{content:'';width:calc(1em + 2px);height:calc(1em + 2px);display:block;box-sizing:border-box;border-radius:0;border:1px solid transparent;z-index:0;position:absolute;left:0;top:calc((0% - (100% - 1em)) - 8%);background-color:transparent}.pretty .state label:before{border-color:#bdc3c7}.pretty .state.p-is-hover,.pretty .state.p-is-indeterminate{display:none}@-webkit-keyframes zoom{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}@keyframes zoom{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}@-webkit-keyframes tada{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:scale(7);transform:scale(7)}38%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;opacity:1;-webkit-transform:scale(1);transform:scale(1)}55%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.5);transform:scale(1.5)}72%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}81%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.24);transform:scale(1.24)}89%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}95%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.04);transform:scale(1.04)}100%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}}@keyframes tada{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:scale(7);transform:scale(7)}38%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;opacity:1;-webkit-transform:scale(1);transform:scale(1)}55%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.5);transform:scale(1.5)}72%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}81%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.24);transform:scale(1.24)}89%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}95%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:scale(1.04);transform:scale(1.04)}100%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes jelly{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}40%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}50%{-webkit-transform:scale3d(.85,1.15,1);transform:scale3d(.85,1.15,1)}65%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}75%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes jelly{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}40%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}50%{-webkit-transform:scale3d(.85,1.15,1);transform:scale3d(.85,1.15,1)}65%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}75%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@-webkit-keyframes rotate{0%{opacity:0;-webkit-transform:translateZ(-200px) rotate(-45deg);transform:translateZ(-200px) rotate(-45deg)}100%{opacity:1;-webkit-transform:translateZ(0) rotate(0);transform:translateZ(0) rotate(0)}}@keyframes rotate{0%{opacity:0;-webkit-transform:translateZ(-200px) rotate(-45deg);transform:translateZ(-200px) rotate(-45deg)}100%{opacity:1;-webkit-transform:translateZ(0) rotate(0);transform:translateZ(0) rotate(0)}}@-webkit-keyframes pulse{0%{box-shadow:0 0 0 0 #bdc3c7}100%{box-shadow:0 0 0 1.5em rgba(189,195,199,0)}}@keyframes pulse{0%{box-shadow:0 0 0 0 #bdc3c7}100%{box-shadow:0 0 0 1.5em rgba(189,195,199,0)}}.pretty.p-default.p-fill .state label:after{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.pretty.p-default .state label:after{-webkit-transform:scale(.6);-ms-transform:scale(.6);transform:scale(.6)}.pretty.p-default input:checked~.state label:after{background-color:#bdc3c7!important}.pretty.p-default.p-thick .state label:after,.pretty.p-default.p-thick .state label:before{border-width:calc(1em / 7)}.pretty.p-default.p-thick .state label:after{-webkit-transform:scale(.4)!important;-ms-transform:scale(.4)!important;transform:scale(.4)!important}.pretty.p-icon .state .icon{position:absolute;font-size:1em;width:calc(1em + 2px);height:calc(1em + 2px);left:0;z-index:1;text-align:center;line-height:normal;top:calc((0% - (100% - 1em)) - 8%);border:1px solid transparent;opacity:0}.pretty.p-icon .state .icon:before{margin:0;width:100%;height:100%;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1}.pretty.p-icon input:checked~.state .icon{opacity:1}.pretty.p-icon input:checked~.state label:before{border-color:#5a656b}.pretty.p-svg .state .svg{position:absolute;font-size:1em;width:calc(1em + 2px);height:calc(1em + 2px);left:0;z-index:1;text-align:center;line-height:normal;top:calc((0% - (100% - 1em)) - 8%);border:1px solid transparent;opacity:0}.pretty.p-svg .state svg{margin:0;width:100%;height:100%;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1}.pretty.p-svg input:checked~.state .svg{opacity:1}.pretty.p-image .state img{opacity:0;position:absolute;width:calc(1em + 2px);height:calc(1em + 2px);top:0;top:calc((0% - (100% - 1em)) - 8%);left:0;z-index:0;text-align:center;line-height:normal;-webkit-transform:scale(.8);-ms-transform:scale(.8);transform:scale(.8)}.pretty.p-image input:checked~.state img{opacity:1}.pretty.p-switch input{min-width:2em}.pretty.p-switch .state{position:relative}.pretty.p-switch .state:before{content:'';border:1px solid #bdc3c7;border-radius:60px;width:2em;box-sizing:unset;height:calc(1em + 2px);position:absolute;top:0;top:calc((0% - (100% - 1em)) - 16%);z-index:0;transition:all .5s ease}.pretty.p-switch .state label{text-indent:2.5em}.pretty.p-switch .state label:after,.pretty.p-switch .state label:before{transition:all .5s ease;border-radius:100%;left:0;border-color:transparent;-webkit-transform:scale(.8);-ms-transform:scale(.8);transform:scale(.8)}.pretty.p-switch .state label:after{background-color:#bdc3c7!important}.pretty.p-switch input:checked~.state:before{border-color:#5a656b}.pretty.p-switch input:checked~.state label:before{opacity:0}.pretty.p-switch input:checked~.state label:after{background-color:#5a656b!important;left:1em}.pretty.p-switch.p-fill input:checked~.state:before{border-color:#5a656b;background-color:#5a656b!important}.pretty.p-switch.p-fill input:checked~.state label:before{opacity:0}.pretty.p-switch.p-fill input:checked~.state label:after{background-color:#fff!important;left:1em}.pretty.p-switch.p-slim .state:before{height:.1em;background:#bdc3c7!important;top:calc(50% - .1em)}.pretty.p-switch.p-slim input:checked~.state:before{border-color:#5a656b;background-color:#5a656b!important}.pretty.p-has-hover input:hover~.state:not(.p-is-hover){display:none}.pretty.p-has-hover input:hover~.state.p-is-hover{display:block}.pretty.p-has-hover input:hover~.state.p-is-hover .icon{display:block}.pretty.p-has-focus input:focus~.state label:before{box-shadow:0 0 3px 0 #bdc3c7}.pretty.p-has-indeterminate input[type=checkbox]:indeterminate~.state:not(.p-is-indeterminate){display:none}.pretty.p-has-indeterminate input[type=checkbox]:indeterminate~.state.p-is-indeterminate{display:block}.pretty.p-has-indeterminate input[type=checkbox]:indeterminate~.state.p-is-indeterminate .icon{display:block;opacity:1}.pretty.p-toggle .state.p-on{opacity:0;display:none}.pretty.p-toggle .state .icon,.pretty.p-toggle .state .svg,.pretty.p-toggle .state img,.pretty.p-toggle .state.p-off{opacity:1;display:inherit}.pretty.p-toggle .state.p-off .icon{color:#bdc3c7}.pretty.p-toggle input:checked~.state.p-on{opacity:1;display:inherit}.pretty.p-toggle input:checked~.state.p-off{opacity:0;display:none}.pretty.p-plain input:checked~.state label:before,.pretty.p-plain.p-toggle .state label:before{content:none}.pretty.p-plain.p-plain .icon{-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}.pretty.p-round .state label:after,.pretty.p-round .state label:before{border-radius:100%}.pretty.p-round.p-icon .state .icon{border-radius:100%;overflow:hidden}.pretty.p-round.p-icon .state .icon:before{-webkit-transform:scale(.8);-ms-transform:scale(.8);transform:scale(.8)}.pretty.p-curve .state label:after,.pretty.p-curve .state label:before{border-radius:20%}.pretty.p-smooth .icon,.pretty.p-smooth .svg,.pretty.p-smooth label:after,.pretty.p-smooth label:before{transition:all .5s ease}.pretty.p-smooth input:checked+.state label:after{transition:all .3s ease}.pretty.p-smooth input:checked+.state .icon,.pretty.p-smooth input:checked+.state .svg,.pretty.p-smooth input:checked+.state img{-webkit-animation:zoom .2s ease;animation:zoom .2s ease}.pretty.p-smooth.p-default input:checked+.state label:after{-webkit-animation:zoom .2s ease;animation:zoom .2s ease}.pretty.p-smooth.p-plain input:checked+.state label:before{content:'';-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);transition:all .5s ease}.pretty.p-tada:not(.p-default) input:checked+.state .icon,.pretty.p-tada:not(.p-default) input:checked+.state .svg,.pretty.p-tada:not(.p-default) input:checked+.state img,.pretty.p-tada:not(.p-default) input:checked+.state label:after,.pretty.p-tada:not(.p-default) input:checked+.state label:before{-webkit-animation:tada .7s cubic-bezier(.25,.46,.45,.94) 1 alternate;animation:tada .7s cubic-bezier(.25,.46,.45,.94) 1 alternate;opacity:1}.pretty.p-jelly:not(.p-default) input:checked+.state .icon,.pretty.p-jelly:not(.p-default) input:checked+.state .svg,.pretty.p-jelly:not(.p-default) input:checked+.state img,.pretty.p-jelly:not(.p-default) input:checked+.state label:after,.pretty.p-jelly:not(.p-default) input:checked+.state label:before{-webkit-animation:jelly .7s cubic-bezier(.25,.46,.45,.94);animation:jelly .7s cubic-bezier(.25,.46,.45,.94);opacity:1}.pretty.p-jelly:not(.p-default) input:checked+.state label:before{border-color:transparent}.pretty.p-rotate:not(.p-default) input:checked~.state .icon,.pretty.p-rotate:not(.p-default) input:checked~.state .svg,.pretty.p-rotate:not(.p-default) input:checked~.state img,.pretty.p-rotate:not(.p-default) input:checked~.state label:after,.pretty.p-rotate:not(.p-default) input:checked~.state label:before{-webkit-animation:rotate .7s cubic-bezier(.25,.46,.45,.94);animation:rotate .7s cubic-bezier(.25,.46,.45,.94);opacity:1}.pretty.p-rotate:not(.p-default) input:checked~.state label:before{border-color:transparent}.pretty.p-pulse:not(.p-switch) input:checked~.state label:before{-webkit-animation:pulse 1s;animation:pulse 1s}.pretty input[disabled]{cursor:not-allowed;display:none}.pretty input[disabled]~*{opacity:.5}.pretty.p-locked input{display:none;cursor:not-allowed}.pretty input:checked~.state.p-primary label:after,.pretty.p-toggle .state.p-primary label:after{background-color:#428bca!important}.pretty input:checked~.state.p-primary .icon,.pretty input:checked~.state.p-primary .svg,.pretty.p-toggle .state.p-primary .icon,.pretty.p-toggle .state.p-primary .svg{color:#fff;stroke:#fff}.pretty input:checked~.state.p-primary-o label:before,.pretty.p-toggle .state.p-primary-o label:before{border-color:#428bca}.pretty input:checked~.state.p-primary-o label:after,.pretty.p-toggle .state.p-primary-o label:after{background-color:transparent}.pretty input:checked~.state.p-primary-o .icon,.pretty input:checked~.state.p-primary-o .svg,.pretty input:checked~.state.p-primary-o svg,.pretty.p-toggle .state.p-primary-o .icon,.pretty.p-toggle .state.p-primary-o .svg,.pretty.p-toggle .state.p-primary-o svg{color:#428bca;stroke:#428bca}.pretty.p-default:not(.p-fill) input:checked~.state.p-primary-o label:after{background-color:#428bca!important}.pretty.p-switch input:checked~.state.p-primary:before{border-color:#428bca}.pretty.p-switch.p-fill input:checked~.state.p-primary:before{background-color:#428bca!important}.pretty.p-switch.p-slim input:checked~.state.p-primary:before{border-color:#245682;background-color:#245682!important}.pretty input:checked~.state.p-info label:after,.pretty.p-toggle .state.p-info label:after{background-color:#5bc0de!important}.pretty input:checked~.state.p-info .icon,.pretty input:checked~.state.p-info .svg,.pretty.p-toggle .state.p-info .icon,.pretty.p-toggle .state.p-info .svg{color:#fff;stroke:#fff}.pretty input:checked~.state.p-info-o label:before,.pretty.p-toggle .state.p-info-o label:before{border-color:#5bc0de}.pretty input:checked~.state.p-info-o label:after,.pretty.p-toggle .state.p-info-o label:after{background-color:transparent}.pretty input:checked~.state.p-info-o .icon,.pretty input:checked~.state.p-info-o .svg,.pretty input:checked~.state.p-info-o svg,.pretty.p-toggle .state.p-info-o .icon,.pretty.p-toggle .state.p-info-o .svg,.pretty.p-toggle .state.p-info-o svg{color:#5bc0de;stroke:#5bc0de}.pretty.p-default:not(.p-fill) input:checked~.state.p-info-o label:after{background-color:#5bc0de!important}.pretty.p-switch input:checked~.state.p-info:before{border-color:#5bc0de}.pretty.p-switch.p-fill input:checked~.state.p-info:before{background-color:#5bc0de!important}.pretty.p-switch.p-slim input:checked~.state.p-info:before{border-color:#2390b0;background-color:#2390b0!important}.pretty input:checked~.state.p-success label:after,.pretty.p-toggle .state.p-success label:after{background-color:#5cb85c!important}.pretty input:checked~.state.p-success .icon,.pretty input:checked~.state.p-success .svg,.pretty.p-toggle .state.p-success .icon,.pretty.p-toggle .state.p-success .svg{color:#fff;stroke:#fff}.pretty input:checked~.state.p-success-o label:before,.pretty.p-toggle .state.p-success-o label:before{border-color:#5cb85c}.pretty input:checked~.state.p-success-o label:after,.pretty.p-toggle .state.p-success-o label:after{background-color:transparent}.pretty input:checked~.state.p-success-o .icon,.pretty input:checked~.state.p-success-o .svg,.pretty input:checked~.state.p-success-o svg,.pretty.p-toggle .state.p-success-o .icon,.pretty.p-toggle .state.p-success-o .svg,.pretty.p-toggle .state.p-success-o svg{color:#5cb85c;stroke:#5cb85c}.pretty.p-default:not(.p-fill) input:checked~.state.p-success-o label:after{background-color:#5cb85c!important}.pretty.p-switch input:checked~.state.p-success:before{border-color:#5cb85c}.pretty.p-switch.p-fill input:checked~.state.p-success:before{background-color:#5cb85c!important}.pretty.p-switch.p-slim input:checked~.state.p-success:before{border-color:#357935;background-color:#357935!important}.pretty input:checked~.state.p-warning label:after,.pretty.p-toggle .state.p-warning label:after{background-color:#f0ad4e!important}.pretty input:checked~.state.p-warning .icon,.pretty input:checked~.state.p-warning .svg,.pretty.p-toggle .state.p-warning .icon,.pretty.p-toggle .state.p-warning .svg{color:#fff;stroke:#fff}.pretty input:checked~.state.p-warning-o label:before,.pretty.p-toggle .state.p-warning-o label:before{border-color:#f0ad4e}.pretty input:checked~.state.p-warning-o label:after,.pretty.p-toggle .state.p-warning-o label:after{background-color:transparent}.pretty input:checked~.state.p-warning-o .icon,.pretty input:checked~.state.p-warning-o .svg,.pretty input:checked~.state.p-warning-o svg,.pretty.p-toggle .state.p-warning-o .icon,.pretty.p-toggle .state.p-warning-o .svg,.pretty.p-toggle .state.p-warning-o svg{color:#f0ad4e;stroke:#f0ad4e}.pretty.p-default:not(.p-fill) input:checked~.state.p-warning-o label:after{background-color:#f0ad4e!important}.pretty.p-switch input:checked~.state.p-warning:before{border-color:#f0ad4e}.pretty.p-switch.p-fill input:checked~.state.p-warning:before{background-color:#f0ad4e!important}.pretty.p-switch.p-slim input:checked~.state.p-warning:before{border-color:#c77c11;background-color:#c77c11!important}.pretty input:checked~.state.p-danger label:after,.pretty.p-toggle .state.p-danger label:after{background-color:#d9534f!important}.pretty input:checked~.state.p-danger .icon,.pretty input:checked~.state.p-danger .svg,.pretty.p-toggle .state.p-danger .icon,.pretty.p-toggle .state.p-danger .svg{color:#fff;stroke:#fff}.pretty input:checked~.state.p-danger-o label:before,.pretty.p-toggle .state.p-danger-o label:before{border-color:#d9534f}.pretty input:checked~.state.p-danger-o label:after,.pretty.p-toggle .state.p-danger-o label:after{background-color:transparent}.pretty input:checked~.state.p-danger-o .icon,.pretty input:checked~.state.p-danger-o .svg,.pretty input:checked~.state.p-danger-o svg,.pretty.p-toggle .state.p-danger-o .icon,.pretty.p-toggle .state.p-danger-o .svg,.pretty.p-toggle .state.p-danger-o svg{color:#d9534f;stroke:#d9534f}.pretty.p-default:not(.p-fill) input:checked~.state.p-danger-o label:after{background-color:#d9534f!important}.pretty.p-switch input:checked~.state.p-danger:before{border-color:#d9534f}.pretty.p-switch.p-fill input:checked~.state.p-danger:before{background-color:#d9534f!important}.pretty.p-switch.p-slim input:checked~.state.p-danger:before{border-color:#a02622;background-color:#a02622!important}.pretty.p-bigger .icon,.pretty.p-bigger .img,.pretty.p-bigger .svg,.pretty.p-bigger label:after,.pretty.p-bigger label:before{font-size:1.2em!important;top:calc((0% - (100% - 1em)) - 35%)!important}.pretty.p-bigger label{text-indent:1.7em}@media print{.pretty .state .icon,.pretty .state label:after,.pretty .state label:before,.pretty .state:before{color-adjust:exact;-webkit-print-color-adjust:exact;print-color-adjust:exact}} diff --git a/site/assets/js/arithmetic/encode.js b/site/assets/js/arithmetic/encode.js new file mode 100644 index 0000000..cfd9be8 --- /dev/null +++ b/site/assets/js/arithmetic/encode.js @@ -0,0 +1,531 @@ + +class Arithmetic { + + delay = 500; + autostep = false; + autostepElement; + + resize = false; + + TopTextSize = 48; + TopTextColor = "#132743" + + TopTextHighlight = "#407088" + + BarPadding = 80; + BarColor = "#407088" + BarBorderColor = "#70adb5" + + BarSelectedColor = "#ffcbcb" + + RangeText = 16; + RangeColor = "#70adb5" + + CharText = 24; + CharColor = "#132743" + + RectPadding = 24; + + wasmReady = false; + + constructor({ ns = "encode-", fs = false }) { + this.idNamespace = ns; + this.fullscreen = fs; + + var _this = this; + window.addEventListener("load", function () { _this.load(); }); + if (document.readyState === "complete") { this.load(); } + } + + load() { + var _this = this; + document.getElementById(this.idNamespace + "form").onsubmit = function () { + _this.process(); + return false; + }; + + this.canvas = new fabric.Canvas(this.idNamespace + "canvas", { + selection: false, + evented: false, + enableRetinaScaling: true, + allowTouchScrolling: true + }) + + this.setupPanning(); + + this.canvas.setDimensions({ + width: document.getElementById(this.idNamespace + "canvas-container-jtd").offsetWidth - 2, + height: document.getElementById(this.idNamespace + "canvas-container-jtd").offsetHeight - 2, + }); + + this.stepBtn = document.getElementById(this.idNamespace + "step"); + + this.stepBtn.addEventListener("click", function () { + _this.stepThrough(); + }); + + var slider = document.getElementById(this.idNamespace + 'speed-slider'); + + noUiSlider.create(slider, { + start: [150], + range: { + 'min': [0], + 'max': [2500] + }, + step: 50, + connect: true, + }); + + var sliderValueElement = document.getElementById(this.idNamespace + 'slider-range-value'); + + slider.noUiSlider.on('update', function (values, handle) { + _this.delay = values[handle]; + sliderValueElement.innerHTML = values[handle]; + }); + + this.autostepElement = document.getElementById(this.idNamespace + "autostep"); + this.autostepElement.addEventListener('change', function () { _this.checkAutostep(); }); + + this.resizeElement = document.getElementById(this.idNamespace + "resize"); + this.resizeElement.addEventListener('change', function () { _this.checkResize(); }); + this.checkResize(); + + + if (WebAssembly) { + // WebAssembly.instantiateStreaming is not currently available in Safari + if (WebAssembly && !WebAssembly.instantiateStreaming) { // polyfill + WebAssembly.instantiateStreaming = async (resp, importObject) => { + const source = await (await resp).arrayBuffer(); + return await WebAssembly.instantiate(source, importObject); + }; + } + + const go = new Go(); + WebAssembly.instantiateStreaming(fetch("/assets/wasm/arithmetic.wasm"), go.importObject).then((result) => { + go.run(result.instance); + _this.wasmReady = true; + }); + } else { + console.log("WebAssembly is not supported in this browser") + } + + this.process(); + } + + checkAutostep() { + if (this.autostepElement.checked) { + this.autostep = true; + if (!this.stepBtn.disabled) { + this.stepThrough(); + } + } else { + this.autostep = false; + } + } + + checkResize() { + if (this.resizeElement.checked) { + this.resize = true; + } else { + this.resize = false; + this.displayBase = 0; + this.displayModifier = 1; + } + } + + process() { + this.canvas.clear(); + + var input = document.getElementById(this.idNamespace + "input-text").value; + + this.topText = new fabric.Text(input, { + top: 5, + fill: this.TopTextColor, + fontSize: this.TopTextSize, + fontFamily: "Roboto Mono", + selectable: false + }) + + this.canvas.add(this.topText) + + this.topText.centerH(); + + this.step = 0; + this.input = input; + + var rect = new fabric.Rect({ + width: this.canvas.width - this.BarPadding, + height: 20, + left: this.BarPadding / 2, + top: 120, + visible: false, + selectable: false + }) + + this.canvas.add(rect) + this.lastRect = rect; + + this.modifier = 1; + this.base = 0; + + this.displayModifier = 1; + this.displayBase = 0; + + var freqs = this.freqTable(input) + + var last = 0; + freqs.forEach((value, key, map) => { + this.createRange(rect, key, last, last + value, 1); + this.canvas.renderAll(); + last += value; + }); + + this.freqs = freqs; + + this.stepBtn.disabled = false; + + var _this = this; + + this.checkAutostep(); + + // var output = arithmeticEncode(input); + + // document.getElementById(this.idNamespace + "output-text").innerHTML = output; + } + + async stepThrough() { + this.highlight(this.topText, this.step, this.TopTextHighlight); + + var char = this.input.charAt(this.step); + + await this.sleep(this.delay); + + var start = 0; + var end = 0; + for (const [key, value] of this.freqs.entries()) { + if (key === char) { + this.selectRange(this.lastRect, key, start, start + value, this.modifier, this.base) + end = start + value; + break; + } + start += value; + } + + this.step++; + var rect; + + this.base = start * this.modifier + this.base; + this.modifier *= (end - start); + if (!this.resize) { + this.displayBase = start * this.displayModifier + this.displayBase; + this.displayModifier *= (end - start); + } + + if (this.resize) { + rect = new fabric.Rect({ + width: this.canvas.width - this.BarPadding, + height: 20, + left: this.BarPadding / 2, + top: this.lastRect.top + this.lastRect.height + this.CharText + this.RectPadding, + visible: false, + selectable: false + }) + } else { + rect = new fabric.Rect({ + width: (this.canvas.width - this.BarPadding) * this.displayModifier, + height: 20, + left: (this.BarPadding / 2) + (this.canvas.width - this.BarPadding) * this.displayBase, + top: this.lastRect.top + this.lastRect.height + this.CharText + this.RectPadding, + visible: false, + selectable: false + }) + } + + this.canvas.add(rect) + + this.drawLine(start, 0, rect) + this.drawLine(end, 1, rect) + + this.lastRect = rect; + + var last = 0; + this.freqs.forEach((value, key, map) => { + this.createRange(this.lastRect, key, last, last + value, this.modifier, this.base); + this.canvas.renderAll(); + last += value; + }); + + if (this.step >= this.input.length) { + this.stepBtn.disabled = true; + var output = "" + if (WebAssembly) { + var _this = this; + function outputEncoded() { + var r = arithmeticEncode(_this.topText.text) + var bot = r[0] + var top = r[1] + var output = bot + " - " + top + document.getElementById(_this.idNamespace + "output-text").innerHTML = output; + } + var i = 0; + function checkWasmReady() { + i++; + console.log(i); + if (i > 600) { + output = "WebAssembly is not loading"; + document.getElementById(_this.idNamespace + "output-text").innerHTML = output; + return + } + if (_this.wasmReady) { + outputEncoded(); + } else { + setTimeout(checkWasmReady, 50); + } + } + checkWasmReady(); + } else { + output = "WebAssembly unsupported"; + document.getElementById(this.idNamespace + "output-text").innerHTML = output; + } + } + + if (this.autostep && !this.stepBtn.disabled) { + this.stepThrough(); + } + } + + drawLine(from, to, targetRect) { + var fromX = this.lastRect.left + (this.lastRect.width * from); + var fromY = this.lastRect.top + this.lastRect.height; + + var toX = targetRect.left + (targetRect.width * to); + var toY = targetRect.top; + + var coords = [fromX, fromY, toX, toY] + + this.canvas.add(new fabric.Line(coords, { + fill: this.BarSelectedColor, + stroke: this.BarSelectedColor, + strokeWidth: this.resize ? 2 : 2 * this.displayModifier, + selectable: false + })); + } + + createRange(rect, char, start, end, modifier, base) { + this.drawRangeWithColors({ rect: rect, char: char, start: start, end: end, modifier: modifier, base: base }) + } + + selectRange(rect, char, start, end, modifier, base) { + var _this = this; + this.drawRangeWithColors({ rect: rect, char: char, start: start, end: end, BarColor: _this.BarSelectedColor, modifier: modifier, base: base, select: true }) + } + + drawRangeWithColors({ rect, char, start, end, BarColor = false, BarBorderColor = false, CharText = false, CharColor = false, RangeText = false, RangeColor = false, modifier = 1, base = 0, select = false }) { + var rangeLeft = rect.left + (start * rect.width); + var rangeWidth = (end - start) * rect.width; + + var range = new fabric.Rect({ + width: rangeWidth, + height: rect.height, + left: rangeLeft, + top: rect.top, + fill: BarColor ? BarColor : this.BarColor, + stroke: BarBorderColor ? BarBorderColor : this.BarBorderColor, + strokeWidth: 1 * this.displayModifier, + selectable: false + }) + + this.canvas.add(range) + + if (select) { return } + + var charFontSize = (modifier == 1 || this.resize) ? this.CharText : this.CharText * this.displayModifier * 2 + var char = new fabric.Text(char, { + left: rangeLeft + (0.5 * rangeWidth), + top: range.top - (CharText ? CharText : charFontSize), + fontSize: CharText ? CharText : charFontSize, + fill: CharColor ? CharColor : this.CharColor, + fontFamily: "Roboto Mono", + selectable: false + }) + + this.canvas.add(char) + + var rangeFontSize = (modifier == 1 || this.resize) ? this.RangeText : this.RangeText * this.displayModifier * 2 + var leftRangeText = new fabric.Text(this.roundDisplay(base + (start * modifier)).toString(), { + left: rangeLeft, + top: range.top - (RangeText ? RangeText : rangeFontSize) - 1, + fontSize: RangeText ? RangeText : rangeFontSize, + fill: RangeColor ? RangeColor : this.RangeColor, + fontFamily: "Roboto Mono", + selectable: false + }) + + leftRangeText.left -= leftRangeText.width / 2 + + this.canvas.add(leftRangeText) + + if (end === 1) { + var rightRangeText = new fabric.Text(this.roundDisplay(base + (end * modifier)).toString(), { + left: rangeLeft + rangeWidth - (this.RangeText / 2), + top: range.top - (RangeText ? RangeText : rangeFontSize) + 1, + fontSize: RangeText ? RangeText : rangeFontSize, + fill: RangeColor ? RangeColor : this.RangeColor, + fontFamily: "Roboto Mono", + selectable: false + }) + + this.canvas.add(rightRangeText) + } + } + + roundDisplay(num) { + return +(Math.round(num + "e+3") + "e-3"); + } + + freqTable(str) { + var chars = new Map(); + for (var i = 0; i < str.length; i++) { + var char = str.charAt(i); + if (!chars.get(char)) { + chars.set(char, 1) + } else { + chars.set(char, chars.get(char) + 1) + } + } + + chars.forEach((value, key, map) => { + map.set(key, value / str.length) + }) + + return chars + } + + setupPanning() { + this.canvas.defaultCursor = "all-scroll"; + this.canvas.hoverCursor = "all-scroll"; + this.canvas.on('mouse:down', function (opt) { + var evt = opt.e; + this.isDragging = true; + this.selection = false; + this.lastPosX = evt.clientX; + this.lastPosY = evt.clientY; + }); + this.canvas.on('mouse:move', function (opt) { + if (this.isDragging) { + var e = opt.e; + var vpt = this.viewportTransform; + vpt[4] += e.clientX - this.lastPosX; + vpt[5] += e.clientY - this.lastPosY; + this.requestRenderAll(); + this.lastPosX = e.clientX; + this.lastPosY = e.clientY; + } + }); + this.canvas.on('mouse:up', function (opt) { + // on mouse up we want to recalculate new interaction + // for all objects, so we call setViewportTransform + this.setViewportTransform(this.viewportTransform); + this.isDragging = false; + this.selection = true; + }); + + var isChrome = !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime); + var zoomRatio = 0.980; + if (isChrome) { zoomRatio = 0.999; } + + var _this = this; + this.canvas.on('mouse:wheel', function (opt) { + var delta = opt.e.deltaY; + var zoom = _this.canvas.getZoom(); + zoom *= zoomRatio ** delta; + if (zoom > 20) zoom = 20; + if (zoom < 0.01) zoom = 0.01; + _this.canvas.zoomToPoint({ x: opt.e.offsetX, y: opt.e.offsetY }, zoom); + opt.e.preventDefault(); + opt.e.stopPropagation(); + // this.texts.forEach(function (textObj) { + // console.log(textObj); + // this.canvas.remove(textObj); + // this.canvas.add(textObj); + // }); + }) + } + + getCharacterOfText(text, characterIndex) { + var x = text.left; + var y = text.top; + + y = y + text.fontSize; + + var characterWidth = text.width / text.text.length; + x = x + characterWidth * characterIndex; + + return [x, y]; + } + + clearHightlights(textObj) { + if (textObj.highlights) { + for (var i = 0; i < textObj.highlights.length; i++) { + this.canvas.remove(textObj.highlights[i]) + } + } + textObj.highlights = []; + + if (textObj.chars) { + for (var i = 0; i < textObj.chars.length; i++) { + this.canvas.remove(textObj.chars[i]) + } + } + textObj.chars = []; + } + + highlightRange(textObj, start, end, chars, color) { + this.clearHightlights(textObj); + + this.highlightRangeNoClear(textObj, start, end, chars, color) + } + + highlightRangeNoClear(textObj, start, end, chars, color) { + for (var i = start; i < end; i++) { + var positions = this.getCharacterOfText(textObj, i); + var rect = new fabric.Rect({ + width: textObj.fontSize / 2, + height: 6, + fill: color, + left: positions[0], + top: positions[1], + }); + this.canvas.add(rect); + textObj.highlights.push(rect); + + if (chars.length > (i - start)) { + var char = new fabric.Text(chars[i - start], { + fontFamily: "Roboto Mono", + fontSize: textObj.fontSize / 2, + left: positions[0], + top: positions[1] + textObj.fontSize / 2, + }) + char.left += char.width / 2 - 3; + char.setCoords() + this.canvas.add(char) + textObj.chars.push(char) + this.canvas.renderAll(); + } + } + } + + highlightNoClear(textObj, index, color) { + var upper = index + 1; + return this.highlightRangeNoClear(textObj, index, upper, "", color); + } + + highlight(textObj, index, color) { + var upper = index + 1; + return this.highlightRange(textObj, index, upper, "", color); + } + + sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } +} \ No newline at end of file diff --git a/site/assets/js/fabric.min.js b/site/assets/js/fabric.min.js new file mode 100644 index 0000000..be3012f --- /dev/null +++ b/site/assets/js/fabric.min.js @@ -0,0 +1 @@ +var fabric=fabric||{version:"3.6.6"};if("undefined"!=typeof exports?exports.fabric=fabric:"function"==typeof define&&define.amd&&define([],function(){return fabric}),"undefined"!=typeof document&&"undefined"!=typeof window)fabric.document=document instanceof("undefined"!=typeof HTMLDocument?HTMLDocument:Document)?document:document.implementation.createHTMLDocument(""),fabric.window=window;else{var jsdom=require("jsdom"),virtualWindow=new jsdom.JSDOM(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;fabric.document=virtualWindow.document,fabric.jsdomImplForWrapper=require("jsdom/lib/jsdom/living/generated/utils").implForWrapper,fabric.nodeCanvas=require("jsdom/lib/jsdom/utils").Canvas,fabric.window=virtualWindow,DOMParser=fabric.window.DOMParser}fabric.isTouchSupported="ontouchstart"in fabric.window||"ontouchstart"in fabric.document||fabric.window&&fabric.window.navigator&&fabric.window.navigator.maxTouchPoints>0,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",fabric.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/gi,fabric.reNonWord=/[ \n\.,;!\?\-]/,fabric.fontPaths={},fabric.iMatrix=[1,0,0,1,0,0],fabric.svgNS="http://www.w3.org/2000/svg",fabric.perfLimitSizeTotal=2097152,fabric.maxCacheSideLimit=4096,fabric.minCacheSideLimit=256,fabric.charWidthsCache={},fabric.textureSize=2048,fabric.disableStyleCopyPaste=!1,fabric.enableGLFiltering=!0,fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,fabric.browserShadowBlurConstant=1,fabric.arcToSegmentsCache={},fabric.boundsOfCurveCache={},fabric.cachesBoundsOfCurve=!0,fabric.forceGLPutImageData=!1,fabric.initFilterBackend=function(){return fabric.enableGLFiltering&&fabric.isWebglSupported&&fabric.isWebglSupported(fabric.textureSize)?(console.log("max texture size: "+fabric.maxTextureSize),new fabric.WebglFilterBackend({tileSize:fabric.textureSize})):fabric.Canvas2dFilterBackend?new fabric.Canvas2dFilterBackend:void 0};"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=fabric);!function(){function e(e,i){if(this.__eventListeners[e]){var t=this.__eventListeners[e];i?t[t.indexOf(i)]=!1:fabric.util.array.fill(t,!1)}}function i(e,i){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var t in e)this.on(t,e[t]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(i);return this}function t(i,t){if(!this.__eventListeners)return this;if(0===arguments.length)for(i in this.__eventListeners)e.call(this,i);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in i)e.call(this,r,i[r]);else e.call(this,i,t);return this}function r(e,i){if(!this.__eventListeners)return this;var t=this.__eventListeners[e];if(!t)return this;for(var r=0,n=t.length;n>r;r++)t[r]&&t[r].call(this,i||{});return this.__eventListeners[e]=t.filter(function(e){return e!==!1}),this}fabric.Observable={observe:i,stopObserving:t,fire:r,on:i,off:t,trigger:r}}();fabric.Collection={_objects:[],add:function(){if(this._objects.push.apply(this._objects,arguments),this._onObjectAdded)for(var e=0,t=arguments.length;t>e;e++)this._onObjectAdded(arguments[e]);return this.renderOnAddRemove&&this.requestRenderAll(),this},insertAt:function(e,t,i){var r=this._objects;return i?r[t]=e:r.splice(t,0,e),this._onObjectAdded&&this._onObjectAdded(e),this.renderOnAddRemove&&this.requestRenderAll(),this},remove:function(){for(var e,t=this._objects,i=!1,r=0,n=arguments.length;n>r;r++)e=t.indexOf(arguments[r]),-1!==e&&(i=!0,t.splice(e,1),this._onObjectRemoved&&this._onObjectRemoved(arguments[r]));return this.renderOnAddRemove&&i&&this.requestRenderAll(),this},forEachObject:function(e,t){for(var i=this.getObjects(),r=0,n=i.length;n>r;r++)e.call(t,i[r],r,i);return this},getObjects:function(e){return"undefined"==typeof e?this._objects.concat():this._objects.filter(function(t){return t.type===e})},item:function(e){return this._objects[e]},isEmpty:function(){return 0===this._objects.length},size:function(){return this._objects.length},contains:function(e){return this._objects.indexOf(e)>-1},complexity:function(){return this._objects.reduce(function(e,t){return e+=t.complexity?t.complexity():0},0)}};fabric.CommonMethods={_setOptions:function(e){for(var t in e)this.set(t,e[t])},_initGradient:function(e,t){!e||!e.colorStops||e instanceof fabric.Gradient||this.set(t,new fabric.Gradient(e))},_initPattern:function(e,t,i){!e||!e.source||e instanceof fabric.Pattern?i&&i():this.set(t,new fabric.Pattern(e,i))},_initClipping:function(e){if(e.clipTo&&"string"==typeof e.clipTo){var t=fabric.util.getFunctionBody(e.clipTo);"undefined"!=typeof t&&(this.clipTo=new Function("ctx",t))}},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return"object"==typeof e?this._setObject(e):"function"==typeof t&&"clipTo"!==e?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,t){this[e]=t},toggle:function(e){var t=this.get(e);return"boolean"==typeof t&&this.set(e,!t),this},get:function(e){return this[e]}};!function(e){var t=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.PI/180,a=Math.PI/2;fabric.util={cos:function(e){if(0===e)return 1;0>e&&(e=-e);var t=e/a;switch(t){case 1:case 3:return 0;case 2:return-1}return Math.cos(e)},sin:function(e){if(0===e)return 0;var t=e/a,i=1;switch(0>e&&(i=-1),t){case 1:return i;case 2:return 0;case 3:return-i}return Math.sin(e)},removeFromArray:function(e,t){var i=e.indexOf(t);return-1!==i&&e.splice(i,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*n},radiansToDegrees:function(e){return e/n},rotatePoint:function(e,t,i){e.subtractEquals(t);var r=fabric.util.rotateVector(e,i);return new fabric.Point(r.x,r.y).addEquals(t)},rotateVector:function(e,t){var i=fabric.util.sin(t),r=fabric.util.cos(t),n=e.x*r-e.y*i,a=e.x*i+e.y*r;return{x:n,y:a}},transformPoint:function(e,t,i){return i?new fabric.Point(t[0]*e.x+t[2]*e.y,t[1]*e.x+t[3]*e.y):new fabric.Point(t[0]*e.x+t[2]*e.y+t[4],t[1]*e.x+t[3]*e.y+t[5])},makeBoundingBoxFromPoints:function(e,t){if(t)for(var i=0;ii;++i)a=a[r[i]];return a},loadImage:function(e,t,i,r){if(!e)return void(t&&t.call(i,e));var n=fabric.util.createImage(),a=function(){t&&t.call(i,n),n=n.onload=n.onerror=null};n.onload=a,n.onerror=function(){fabric.log("Error loading "+n.src),t&&t.call(i,null,!0),n=n.onload=n.onerror=null},0!==e.indexOf("data")&&r&&(n.crossOrigin=r),"data:image/svg"===e.substring(0,14)&&(n.onload=null,fabric.util.loadImageInDom(n,a)),n.src=e},loadImageInDom:function(e,t){var i=fabric.document.createElement("div");i.style.width=i.style.height="1px",i.style.left=i.style.top="-100%",i.style.position="absolute",i.appendChild(e),fabric.document.querySelector("body").appendChild(i),e.onload=function(){t(),i.parentNode.removeChild(i),i=null}},enlivenObjects:function(e,t,i,r){function n(){++o===c&&t&&t(a.filter(function(e){return e}))}e=e||[];var a=[],o=0,c=e.length;return c?void e.forEach(function(e,t){if(!e||!e.type)return void n();var o=fabric.util.getKlass(e.type,i);o.fromObject(e,function(i,o){o||(a[t]=i),r&&r(e,i,o),n()})}):void(t&&t(a))},enlivenPatterns:function(e,t){function i(){++n===a&&t&&t(r)}e=e||[];var r=[],n=0,a=e.length;return a?void e.forEach(function(e,t){e&&e.source?new fabric.Pattern(e,function(e){r[t]=e,i()}):(r[t]=e,i())}):void(t&&t(r))},groupSVGElements:function(e,t,i){var r;return e&&1===e.length?e[0]:(t&&(t.width&&t.height?t.centerPoint={x:t.width/2,y:t.height/2}:(delete t.width,delete t.height)),r=new fabric.Group(e,t),"undefined"!=typeof i&&(r.sourcePath=i),r)},populateWithProperties:function(e,t,i){if(i&&"[object Array]"===Object.prototype.toString.call(i))for(var r=0,n=i.length;n>r;r++)i[r]in e&&(t[i[r]]=e[i[r]])},drawDashedLine:function(e,r,n,a,o,c){var s=a-r,f=o-n,u=t(s*s+f*f),l=i(f,s),d=c.length,h=0,b=!0;for(e.save(),e.translate(r,n),e.moveTo(0,0),e.rotate(l),r=0;u>r;)r+=c[h++%d],r>u&&(r=u),e[b?"lineTo":"moveTo"](r,0),b=!b;e.restore()},createCanvasElement:function(){return fabric.document.createElement("canvas")},copyCanvasElement:function(e){var t=fabric.util.createCanvasElement();return t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),t},toDataURL:function(e,t,i){return e.toDataURL("image/"+t,i)},createImage:function(){return fabric.document.createElement("img")},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t,i){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],i?0:e[0]*t[4]+e[2]*t[5]+e[4],i?0:e[1]*t[4]+e[3]*t[5]+e[5]]},qrDecompose:function(e){var a=i(e[1],e[0]),o=r(e[0],2)+r(e[1],2),c=t(o),s=(e[0]*e[3]-e[2]*e[1])/c,f=i(e[0]*e[2]+e[1]*e[3],o);return{angle:a/n,scaleX:c,scaleY:s,skewX:f/n,skewY:0,translateX:e[4],translateY:e[5]}},calcRotateMatrix:function(e){if(!e.angle)return fabric.iMatrix.concat();var t=fabric.util.degreesToRadians(e.angle),i=fabric.util.cos(t),r=fabric.util.sin(t);return[i,r,-r,i,0,0]},calcDimensionsMatrix:function(e){var t="undefined"==typeof e.scaleX?1:e.scaleX,i="undefined"==typeof e.scaleY?1:e.scaleY,r=[e.flipX?-t:t,0,0,e.flipY?-i:i,0,0],n=fabric.util.multiplyTransformMatrices,a=fabric.util.degreesToRadians;return e.skewX&&(r=n(r,[1,0,Math.tan(a(e.skewX)),1],!0)),e.skewY&&(r=n(r,[1,Math.tan(a(e.skewY)),0,1],!0)),r},composeMatrix:function(e){var t=[1,0,0,1,e.translateX||0,e.translateY||0],i=fabric.util.multiplyTransformMatrices;return e.angle&&(t=i(t,fabric.util.calcRotateMatrix(e))),(e.scaleX||e.scaleY||e.skewX||e.skewY||e.flipX||e.flipY)&&(t=i(t,fabric.util.calcDimensionsMatrix(e))),t},customTransformMatrix:function(e,t,i){return fabric.util.composeMatrix({scaleX:e,scaleY:t,skewX:i})},resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.skewX=0,e.skewY=0,e.flipX=!1,e.flipY=!1,e.rotate(0)},saveObjectTransform:function(e){return{scaleX:e.scaleX,scaleY:e.scaleY,skewX:e.skewX,skewY:e.skewY,angle:e.angle,left:e.left,flipX:e.flipX,flipY:e.flipY,top:e.top}},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(e,t,i,r){r>0&&(t>r?t-=r:t=0,i>r?i-=r:i=0);var n,a,o=!0,c=e.getImageData(t,i,2*r||1,2*r||1),s=c.data.length;for(n=3;s>n&&(a=c.data[n],o=0>=a,o!==!1);n+=4);return c=null,o},parsePreserveAspectRatioAttribute:function(e){var t,i="meet",r="Mid",n="Mid",a=e.split(" ");return a&&a.length&&(i=a.pop(),"meet"!==i&&"slice"!==i?(t=i,i="meet"):a.length&&(t=a.pop())),r="none"!==t?t.slice(1,4):"none",n="none"!==t?t.slice(5,8):"none",{meetOrSlice:i,alignX:r,alignY:n}},clearFabricFontCache:function(e){e=(e||"").toLowerCase(),e?fabric.charWidthsCache[e]&&delete fabric.charWidthsCache[e]:fabric.charWidthsCache={}},limitDimsByArea:function(e,t){var i=Math.sqrt(t*e),r=Math.floor(t/i);return{x:Math.floor(i),y:r}},capValue:function(e,t,i){return Math.max(e,Math.min(t,i))},findScaleToFit:function(e,t){return Math.min(t.width/e.width,t.height/e.height)},findScaleToCover:function(e,t){return Math.max(t.width/e.width,t.height/e.height)},matrixToSVG:function(e){return"matrix("+e.map(function(e){return fabric.util.toFixed(e,fabric.Object.NUM_FRACTION_DIGITS)}).join(" ")+")"}}}("undefined"!=typeof exports?exports:this);!function(){function e(e,t,r,n,i,a,c,o,s,f,u){var l=fabric.util.cos(e),h=fabric.util.sin(e),d=fabric.util.cos(t),b=fabric.util.sin(t),m=r*i*d-n*a*b+c,p=n*i*d+r*a*b+o,v=f+s*(-r*i*h-n*a*l),g=u+s*(-n*i*h+r*a*l),y=m+s*(r*i*b+n*a*d),w=p+s*(n*i*b-r*a*d);return["C",v,g,y,w,m,p]}function t(t,n,i,a,c,o,s){var f=Math.PI,u=s*f/180,l=fabric.util.sin(u),h=fabric.util.cos(u),d=0,b=0;i=Math.abs(i),a=Math.abs(a);var m=-h*t*.5-l*n*.5,p=-h*n*.5+l*t*.5,v=i*i,g=a*a,y=p*p,w=m*m,x=v*g-v*y-g*w,_=0;if(0>x){var M=Math.sqrt(1-x/(v*g));i*=M,a*=M}else _=(c===o?-1:1)*Math.sqrt(x/(v*y+g*w));var C=_*i*p/a,P=-_*a*m/i,T=h*C-l*P+.5*t,O=l*C+h*P+.5*n,k=r(1,0,(m-C)/i,(p-P)/a),j=r((m-C)/i,(p-P)/a,(-m-C)/i,(-p-P)/a);0===o&&j>0?j-=2*f:1===o&&0>j&&(j+=2*f);for(var S=Math.ceil(Math.abs(j/f*2)),L=[],D=j/S,E=8/3*Math.sin(D/4)*Math.sin(D/4)/Math.sin(D/2),F=k+D,I=0;S>I;I++)L[I]=e(k,F,h,l,i,a,T,O,E,d,b),d=L[I][5],b=L[I][6],k=F,F+=D;return L}function r(e,t,r,n){var i=Math.atan2(t,e),a=Math.atan2(n,r);return a>=i?a-i:2*Math.PI-(i-a)}function n(e,t,r,n,i,a,c,o){var s;if(fabric.cachesBoundsOfCurve&&(s=_.call(arguments),fabric.boundsOfCurveCache[s]))return fabric.boundsOfCurveCache[s];var f,u,l,h,d,b,m,p,v=Math.sqrt,g=Math.min,y=Math.max,w=Math.abs,x=[],M=[[],[]];u=6*e-12*r+6*i,f=-3*e+9*r-9*i+3*c,l=3*r-3*e;for(var C=0;2>C;++C)if(C>0&&(u=6*t-12*n+6*a,f=-3*t+9*n-9*a+3*o,l=3*n-3*t),w(f)<1e-12){if(w(u)<1e-12)continue;h=-l/u,h>0&&1>h&&x.push(h)}else m=u*u-4*l*f,0>m||(p=v(m),d=(-u+p)/(2*f),d>0&&1>d&&x.push(d),b=(-u-p)/(2*f),b>0&&1>b&&x.push(b));for(var P,T,O,k=x.length,j=k;k--;)h=x[k],O=1-h,P=O*O*O*e+3*O*O*h*r+3*O*h*h*i+h*h*h*c,M[0][k]=P,T=O*O*O*t+3*O*O*h*n+3*O*h*h*a+h*h*h*o,M[1][k]=T;M[0][j]=e,M[1][j]=t,M[0][j+1]=c,M[1][j+1]=o;var S=[{x:g.apply(null,M[0]),y:g.apply(null,M[1])},{x:y.apply(null,M[0]),y:y.apply(null,M[1])}];return fabric.cachesBoundsOfCurve&&(fabric.boundsOfCurveCache[s]=S),S}function i(e,r,n){for(var i=n[1],a=n[2],c=n[3],o=n[4],s=n[5],f=n[6],u=n[7],l=t(f-e,u-r,i,a,o,s,c),h=0,d=l.length;d>h;h++)l[h][1]+=e,l[h][2]+=r,l[h][3]+=e,l[h][4]+=r,l[h][5]+=e,l[h][6]+=r;return l}function a(e){var t,r,n,a,c,o,s=0,f=0,u=e.length,l=0,h=0,d=[];for(r=0;u>r;++r){switch(n=!1,t=e[r].slice(0),t[0]){case"l":t[0]="L",t[1]+=s,t[2]+=f;case"L":s=t[1],f=t[2];break;case"h":t[1]+=s;case"H":t[0]="L",t[2]=f,s=t[1];break;case"v":t[1]+=f;case"V":t[0]="L",f=t[1],t[1]=s,t[2]=f;break;case"m":t[0]="M",t[1]+=s,t[2]+=f;case"M":s=t[1],f=t[2],l=t[1],h=t[2];break;case"c":t[0]="C",t[1]+=s,t[2]+=f,t[3]+=s,t[4]+=f,t[5]+=s,t[6]+=f;case"C":c=t[3],o=t[4],s=t[5],f=t[6];break;case"s":t[0]="S",t[1]+=s,t[2]+=f,t[3]+=s,t[4]+=f;case"S":"C"===a?(c=2*s-c,o=2*f-o):(c=s,o=f),s=t[3],f=t[4],t[0]="C",t[5]=t[3],t[6]=t[4],t[3]=t[1],t[4]=t[2],t[1]=c,t[2]=o,c=t[3],o=t[4];break;case"q":t[0]="Q",t[1]+=s,t[2]+=f,t[3]+=s,t[4]+=f;case"Q":c=t[1],o=t[2],s=t[3],f=t[4];break;case"t":t[0]="T",t[1]+=s,t[2]+=f;case"T":"Q"===a?(c=2*s-c,o=2*f-o):(c=s,o=f),t[0]="Q",s=t[1],f=t[2],t[1]=c,t[2]=o,t[3]=s,t[4]=f;break;case"a":t[0]="A",t[6]+=s,t[7]+=f;case"A":n=!0,d=d.concat(i(s,f,t)),s=t[6],f=t[7];break;case"z":case"Z":s=l,f=h}n||d.push(t),a=t[0]}return d}function c(e,t,r,n){return Math.sqrt((r-e)*(r-e)+(n-t)*(n-t))}function o(e){return e*e*e}function s(e){return 3*e*e*(1-e)}function f(e){return 3*e*(1-e)*(1-e)}function u(e){return(1-e)*(1-e)*(1-e)}function l(e,t,r,n,i,a,c,l){return function(h){var d=o(h),b=s(h),m=f(h),p=u(h);return{x:c*d+i*b+r*m+e*p,y:l*d+a*b+n*m+t*p}}}function h(e){return e*e}function d(e){return 2*e*(1-e)}function b(e){return(1-e)*(1-e)}function m(e,t,r,n,i,a){return function(c){var o=h(c),s=d(c),f=b(c);return{x:i*o+r*s+e*f,y:a*o+n*s+t*f}}}function p(e,t,r){var n,i,a={x:t,y:r},o=0;for(i=.01;1>=i;i+=.01)n=e(i),o+=c(a.x,a.y,n.x,n.y),a=n;return o}function v(e){for(var t,r,n,i=0,a=e.length,o=0,s=0,f=0,u=0,h=[],d=0;a>d;d++){switch(t=e[d],n={x:o,y:s,command:t[0]},t[0]){case"M":n.length=0,f=o=t[1],u=s=t[2];break;case"L":n.length=c(o,s,t[1],t[2]),o=t[1],s=t[2];break;case"C":r=l(o,s,t[1],t[2],t[3],t[4],t[5],t[6]),n.length=p(r,o,s),o=t[5],s=t[6];break;case"Q":r=m(o,s,t[1],t[2],t[3],t[4]),n.length=p(r,o,s),o=t[3],s=t[4];break;case"Z":case"z":n.destX=f,n.destY=u,n.length=c(o,s,f,u),o=f,s=u}i+=n.length,h.push(n)}return h.push({length:i,x:o,y:s}),h}function g(e,t,r){r||(r=v(e));for(var n=r[r.length-1]*t,i=0;n-r[i]>0&&iu;u++){for(t=a[u],i=t.slice(1).trim(),o.length=0;n=s.exec(i);)o.push(n[0]);f=[t.charAt(0)];for(var h=0,d=o.length;d>h;h++)r=parseFloat(o[h]),isNaN(r)||f.push(r);var b=f[0],m=M[b.toLowerCase()],p=C[b]||b;if(f.length-1>m)for(var v=1,g=f.length;g>v;v+=m)c.push([b].concat(f.slice(v,v+m))),b=p;else c.push(f)}return c}function w(e,r,i,a,c,o,s,f,u){for(var l,h=0,d=0,b=[],m=t(f-e,u-r,i,a,o,s,c),p=0,v=m.length;v>p;p++)l=n(h,d,m[p][1],m[p][2],m[p][3],m[p][4],m[p][5],m[p][6]),b.push({x:l[0].x+e,y:l[0].y+r}),b.push({x:l[1].x+e,y:l[1].y+r}),h=m[p][5],d=m[p][6];return b}function x(e,t,r,n){n=n.slice(0).unshift("X");var a=i(t,r,n);a.forEach(function(t){e.bezierCurveTo.apply(e,t.slice(1))})}var _=Array.prototype.join,M={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},C={m:"l",M:"L"};fabric.util.parsePath=y,fabric.util.makePathSimpler=a,fabric.util.getPathSegmentsInfo=v,fabric.util.fromArcToBeizers=i,fabric.util.getBoundsOfCurve=n,fabric.util.getPointOnPath=g,fabric.util.getBoundsOfArc=w,fabric.util.drawArc=x}();!function(){function t(t,e){for(var r=a.call(arguments,2),n=[],i=0,c=t.length;c>i;i++)n[i]=r.length?t[i][e].apply(t[i],r):t[i][e].call(t[i]);return n}function e(t,e){return i(t,e,function(t,e){return t>=e})}function r(t,e){return i(t,e,function(t,e){return e>t})}function n(t,e){for(var r=t.length;r--;)t[r]=e;return t}function i(t,e,r){if(t&&0!==t.length){var n=t.length-1,i=e?t[n][e]:t[n];if(e)for(;n--;)r(t[n][e],i)&&(i=t[n][e]);else for(;n--;)r(t[n],i)&&(i=t[n]);return i}}var a=Array.prototype.slice;fabric.util.array={fill:n,invoke:t,min:r,max:e}}();!function(){function e(t,r,n){if(n)if(!fabric.isLikelyNode&&r instanceof Element)t=r;else if(r instanceof Array){t=[];for(var i=0,a=r.length;a>i;i++)t[i]=e({},r[i],n)}else if(r&&"object"==typeof r)for(var c in r)"canvas"===c?t[c]=e({},r[c]):r.hasOwnProperty(c)&&(t[c]=e({},r[c],n));else t=r;else for(var c in r)t[c]=r[c];return t}function t(t,r){return e({},t,r)}fabric.util.object={extend:e,clone:t},fabric.util.object.extend(fabric.util,fabric.Observable)}();!function(){function e(e){return e.replace(/-+(.)?/g,function(e,t){return t?t.toUpperCase():""})}function t(e,t){return e.charAt(0).toUpperCase()+(t?e.slice(1):e.slice(1).toLowerCase())}function r(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function n(e){var t,r=0,n=[];for(r=0,t;rr||r>57343)return e.charAt(t);if(r>=55296&&56319>=r){if(e.length<=t+1)throw"High surrogate without following low surrogate";var n=e.charCodeAt(t+1);if(56320>n||n>57343)throw"High surrogate without following low surrogate";return e.charAt(t)+e.charAt(t+1)}if(0===t)throw"Low surrogate without preceding high surrogate";var i=e.charCodeAt(t-1);if(55296>i||i>56319)throw"Low surrogate without preceding high surrogate";return!1}fabric.util.string={camelize:e,capitalize:t,escapeXml:r,graphemeSplit:n}}();!function(){function t(){}function e(t){for(var e=null,r=this;r.constructor.superclass;){var i=r.constructor.superclass.prototype[t];if(r[t]!==i){e=i;break}r=r.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,n.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}function r(){function r(){this.initialize.apply(this,arguments)}var a=null,c=n.call(arguments,0);"function"==typeof c[0]&&(a=c.shift()),r.superclass=a,r.subclasses=[],a&&(t.prototype=a.prototype,r.prototype=new t,a.subclasses.push(r));for(var s=0,u=c.length;u>s;s++)o(r,c[s],a);return r.prototype.initialize||(r.prototype.initialize=i),r.prototype.constructor=r,r.prototype.callSuper=e,r}var n=Array.prototype.slice,i=function(){},a=function(){for(var t in{toString:1})if("toString"===t)return!1;return!0}(),o=function(t,e,r){for(var n in e)t.prototype[n]=n in t.prototype&&"function"==typeof t.prototype[n]&&(e[n]+"").indexOf("callSuper")>-1?function(t){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=e[t].apply(this,arguments);return this.constructor.superclass=n,"initialize"!==t?i:void 0}}(n):e[n],a&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=r}();!function(){function t(t){var e=t.changedTouches;return e&&e[0]?e[0]:t}var e=!!fabric.document.createElement("div").attachEvent;fabric.util.addListener=function(t,i,r,n){t&&t.addEventListener(i,r,e?!1:n)},fabric.util.removeListener=function(t,i,r,n){t&&t.removeEventListener(i,r,e?!1:n)},fabric.util.getPointer=function(e){var i=e.target,r=fabric.util.getScrollLeftTop(i),n=t(e);return{x:n.clientX+r.left,y:n.clientY+r.top}}}();!function(){function t(t,e){var r=t.style;if(!r)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?a(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var n in e)if("opacity"===n)a(t,e[n]);else{var i="float"===n||"cssFloat"===n?"undefined"==typeof r.styleFloat?"cssFloat":"styleFloat":n;r[i]=e[n]}return t}var e=fabric.document.createElement("div"),r="string"==typeof e.style.opacity,n="string"==typeof e.style.filter,i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,a=function(t){return t};r?a=function(t,e){return t.style.opacity=e,t}:n&&(a=function(t,e){var r=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(r.zoom=1),i.test(r.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",r.filter=r.filter.replace(i,e)):r.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}();!function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var r=fabric.document.createElement(t);for(var n in e)"class"===n?r.className=e[n]:"for"===n?r.htmlFor=e[n]:r.setAttribute(n,e[n]);return r}function r(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)}function n(t,r,n){return"string"==typeof r&&(r=e(r,n)),t.parentNode&&t.parentNode.replaceChild(r,t),r.appendChild(t),r}function i(t){for(var e=0,r=0,n=fabric.document.documentElement,i=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=i.scrollLeft||n.scrollLeft||0,r=i.scrollTop||n.scrollTop||0):(e+=t.scrollLeft||0,r+=t.scrollTop||0),1!==t.nodeType||"fixed"!==t.style.position););return{left:e,top:r}}function a(t){var e,r,n=t&&t.ownerDocument,a={left:0,top:0},o={left:0,top:0},c={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return o;for(var s in c)o[c[s]]+=parseInt(h(t,s),10)||0;return e=n.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(a=t.getBoundingClientRect()),r=i(t),{left:a.left+r.left-(e.clientLeft||0)+o.left,top:a.top+r.top-(e.clientTop||0)+o.top}}function o(t){var e=fabric.jsdomImplForWrapper(t);return e._canvas||e._image}function c(t){if(fabric.isLikelyNode){var e=fabric.jsdomImplForWrapper(t);e&&(e._image=null,e._canvas=null,e._currentSrc=null,e._attributes=null,e._classList=null)}}var s,u=Array.prototype.slice,f=function(t){return u.call(t,0)};try{s=f(fabric.document.childNodes)instanceof Array}catch(l){}s||(f=function(t){for(var e=new Array(t.length),r=t.length;r--;)e[r]=t[r];return e});var h;h=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var r=fabric.document.defaultView.getComputedStyle(t,null);return r?r[e]:void 0}:function(t,e){var r=t.style[e];return!r&&t.currentStyle&&(r=t.currentStyle[e]),r},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),n?t.style[n]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),n?t.style[n]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var r=fabric.document.documentElement.style,n="userSelect"in r?"userSelect":"MozUserSelect"in r?"MozUserSelect":"WebkitUserSelect"in r?"WebkitUserSelect":"KhtmlUserSelect"in r?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var r=fabric.document.getElementsByTagName("head")[0],n=fabric.document.createElement("script"),i=!0;n.onload=n.onreadystatechange=function(t){if(i){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;i=!1,e(t||fabric.window.event),n=n.onload=n.onreadystatechange=null}},n.src=t,r.appendChild(n)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=f,fabric.util.makeElement=e,fabric.util.addClass=r,fabric.util.wrapElement=n,fabric.util.getScrollLeftTop=i,fabric.util.getElementOffset=a,fabric.util.getElementStyle=h,fabric.util.getNodeCanvas=o,fabric.util.cleanUpJsdomNode=c}();!function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function r(r,n){n||(n={});var i=n.method?n.method.toUpperCase():"GET",a=n.onComplete||function(){},o=new fabric.window.XMLHttpRequest,c=n.body||n.parameters;return o.onreadystatechange=function(){4===o.readyState&&(a(o),o.onreadystatechange=e)},"GET"===i&&(c=null,"string"==typeof n.parameters&&(r=t(r,n.parameters))),o.open(i,r,!0),("POST"===i||"PUT"===i)&&o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.send(c),o}fabric.util.request=r}();fabric.log=console.log,fabric.warn=console.warn;!function(){function t(){return!1}function e(t,e,r,n){return-r*Math.cos(t/n*(Math.PI/2))+r+e}function r(r){n(function(i){r||(r={});var a,o=i||+new Date,c=r.duration||500,s=o+c,u=r.onChange||t,f=r.abort||t,l=r.onComplete||t,d=r.easing||e,h="startValue"in r?r.startValue:0,p="endValue"in r?r.endValue:100,b=r.byValue||p-h;r.onStart&&r.onStart(),function m(t){a=t||+new Date;var e=a>s?c:a-o,r=e/c,i=d(e,h,b,c),g=Math.abs((i-h)/b);return f()?void l(p,1,1):a>s?(u(p,1,1),void l(p,1,1)):(u(i,g,r),void n(m))}(o)})}function n(){return a.apply(fabric.window,arguments)}function i(){return o.apply(fabric.window,arguments)}var a=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){return fabric.window.setTimeout(t,1e3/60)},o=fabric.window.cancelAnimationFrame||fabric.window.clearTimeout;fabric.util.animate=r,fabric.util.requestAnimFrame=n,fabric.util.cancelAnimFrame=i}();!function(){function t(t,e,r){var n="rgba("+parseInt(t[0]+r*(e[0]-t[0]),10)+","+parseInt(t[1]+r*(e[1]-t[1]),10)+","+parseInt(t[2]+r*(e[2]-t[2]),10);return n+=","+(t&&e?parseFloat(t[3]+r*(e[3]-t[3])):1),n+=")"}function e(e,r,n,i){var a=new fabric.Color(e).getSource(),o=new fabric.Color(r).getSource();i=i||{},fabric.util.animate(fabric.util.object.extend(i,{duration:n||500,startValue:a,endValue:o,byValue:o,easing:function(e,r,n,a){var o=i.colorEasing?i.colorEasing(e,a):1-Math.cos(e/a*(Math.PI/2));return t(r,n,o)}}))}fabric.util.animateColor=e}();!function(){function t(t,e,r,n){return tt?r/2*t*t*t+e:r/2*((t-=2)*t*t+2)+e}function i(t,e,r,n){return r*(t/=n)*t*t*t+e}function a(t,e,r,n){return-r*((t=t/n-1)*t*t*t-1)+e}function o(t,e,r,n){return t/=n/2,1>t?r/2*t*t*t*t+e:-r/2*((t-=2)*t*t*t-2)+e}function c(t,e,r,n){return r*(t/=n)*t*t*t*t+e}function u(t,e,r,n){return r*((t=t/n-1)*t*t*t*t+1)+e}function s(t,e,r,n){return t/=n/2,1>t?r/2*t*t*t*t*t+e:r/2*((t-=2)*t*t*t*t+2)+e}function f(t,e,r,n){return-r*Math.cos(t/n*(Math.PI/2))+r+e}function l(t,e,r,n){return r*Math.sin(t/n*(Math.PI/2))+e}function h(t,e,r,n){return-r/2*(Math.cos(Math.PI*t/n)-1)+e}function d(t,e,r,n){return 0===t?e:r*Math.pow(2,10*(t/n-1))+e}function p(t,e,r,n){return t===n?e+r:r*(-Math.pow(2,-10*t/n)+1)+e}function b(t,e,r,n){return 0===t?e:t===n?e+r:(t/=n/2,1>t?r/2*Math.pow(2,10*(t-1))+e:r/2*(-Math.pow(2,-10*--t)+2)+e)}function m(t,e,r,n){return-r*(Math.sqrt(1-(t/=n)*t)-1)+e}function g(t,e,r,n){return r*Math.sqrt(1-(t=t/n-1)*t)+e}function v(t,e,r,n){return t/=n/2,1>t?-r/2*(Math.sqrt(1-t*t)-1)+e:r/2*(Math.sqrt(1-(t-=2)*t)+1)+e}function y(r,n,i,a){var o=1.70158,c=0,u=i;if(0===r)return n;if(r/=a,1===r)return n+i;c||(c=.3*a);var s=t(u,i,c,o);return-e(s,r,a)+n}function w(e,r,n,i){var a=1.70158,o=0,c=n;if(0===e)return r;if(e/=i,1===e)return r+n;o||(o=.3*i);var u=t(c,n,o,a);return u.a*Math.pow(2,-10*e)*Math.sin(2*(e*i-u.s)*Math.PI/u.p)+u.c+r}function x(r,n,i,a){var o=1.70158,c=0,u=i;if(0===r)return n;if(r/=a/2,2===r)return n+i;c||(c=.3*a*1.5);var s=t(u,i,c,o);return 1>r?-.5*e(s,r,a)+n:s.a*Math.pow(2,-10*(r-=1))*Math.sin(2*(r*a-s.s)*Math.PI/s.p)*.5+s.c+n}function M(t,e,r,n,i){return void 0===i&&(i=1.70158),r*(t/=n)*t*((i+1)*t-i)+e}function C(t,e,r,n,i){return void 0===i&&(i=1.70158),r*((t=t/n-1)*t*((i+1)*t+i)+1)+e}function O(t,e,r,n,i){return void 0===i&&(i=1.70158),t/=n/2,1>t?r/2*t*t*(((i*=1.525)+1)*t-i)+e:r/2*((t-=2)*t*(((i*=1.525)+1)*t+i)+2)+e}function S(t,e,r,n){return r-_(n-t,0,r,n)+e}function _(t,e,r,n){return(t/=n)<1/2.75?7.5625*r*t*t+e:2/2.75>t?r*(7.5625*(t-=1.5/2.75)*t+.75)+e:2.5/2.75>t?r*(7.5625*(t-=2.25/2.75)*t+.9375)+e:r*(7.5625*(t-=2.625/2.75)*t+.984375)+e}function I(t,e,r,n){return n/2>t?.5*S(2*t,0,r,n)+e:.5*_(2*t-n,0,r,n)+.5*r+e}fabric.util.ease={easeInQuad:function(t,e,r,n){return r*(t/=n)*t+e},easeOutQuad:function(t,e,r,n){return-r*(t/=n)*(t-2)+e},easeInOutQuad:function(t,e,r,n){return t/=n/2,1>t?r/2*t*t+e:-r/2*(--t*(t-2)-1)+e},easeInCubic:function(t,e,r,n){return r*(t/=n)*t*t+e},easeOutCubic:r,easeInOutCubic:n,easeInQuart:i,easeOutQuart:a,easeInOutQuart:o,easeInQuint:c,easeOutQuint:u,easeInOutQuint:s,easeInSine:f,easeOutSine:l,easeInOutSine:h,easeInExpo:d,easeOutExpo:p,easeInOutExpo:b,easeInCirc:m,easeOutCirc:g,easeInOutCirc:v,easeInElastic:y,easeOutElastic:w,easeInOutElastic:x,easeInBack:M,easeOutBack:C,easeInOutBack:O,easeInBounce:S,easeOutBounce:_,easeInOutBounce:I}}();!function(t){"use strict";function e(t){return t in E?E[t]:t}function r(t,e,r,n){var i,a="[object Array]"===Object.prototype.toString.call(e);if("fill"!==t&&"stroke"!==t||"none"!==e)if("vector-effect"===t)e="non-scaling-stroke"===e;else if("strokeDashArray"===t)e="none"===e?null:e.replace(/,/g," ").split(/\s+/).map(parseFloat);else if("transformMatrix"===t)e=r&&r.transformMatrix?M(r.transformMatrix,b.parseTransformAttribute(e)):b.parseTransformAttribute(e);else if("visible"===t)e="none"!==e&&"hidden"!==e,r&&r.visible===!1&&(e=!1);else if("opacity"===t)e=parseFloat(e),r&&"undefined"!=typeof r.opacity&&(e*=r.opacity);else if("textAnchor"===t)e="start"===e?"left":"end"===e?"right":"center";else if("charSpacing"===t)i=x(e,n)/n*1e3;else if("paintFirst"===t){var o=e.indexOf("fill"),s=e.indexOf("stroke"),e="fill";o>-1&&s>-1&&o>s?e="stroke":-1===o&&s>-1&&(e="stroke")}else{if("href"===t||"xlink:href"===t)return e;i=a?e.map(x):x(e,n)}else e="";return!a&&isNaN(i)?e:i}function n(t){return new RegExp("^("+t.join("|")+")\\b","i")}function i(t){for(var e in k)if("undefined"!=typeof t[k[e]]&&""!==t[e]){if("undefined"==typeof t[e]){if(!b.Object.prototype[e])continue;t[e]=b.Object.prototype[e]}if(0!==t[e].indexOf("url(")){var r=new b.Color(t[e]);t[e]=r.setAlpha(w(r.getAlpha()*t[k[e]],2)).toRgba()}}return t}function a(t,e){var r,n,i,a,o=[];for(i=0,a=e.length;a>i;i++)r=e[i],n=t.getElementsByTagName(r),o=o.concat(Array.prototype.slice.call(n));return o}function o(t,e){var r,n;t.replace(/;\s*$/,"").split(";").forEach(function(t){var i=t.split(":");r=i[0].trim().toLowerCase(),n=i[1].trim(),e[r]=n})}function s(t,e){var r,n;for(var i in t)"undefined"!=typeof t[i]&&(r=i.toLowerCase(),n=t[i],e[r]=n)}function c(t,e){var r={};for(var n in b.cssRules[e])if(u(t,n.split(" ")))for(var i in b.cssRules[e][n])r[i]=b.cssRules[e][n][i];return r}function u(t,e){var r,n=!0;return r=f(t,e.pop()),r&&e.length&&(n=l(t,e)),r&&n&&0===e.length}function l(t,e){for(var r,n=!0;t.parentNode&&1===t.parentNode.nodeType&&e.length;)n&&(r=e.pop()),t=t.parentNode,n=f(t,r);return 0===e.length}function f(t,e){var r,n,i=t.nodeName,a=t.getAttribute("class"),o=t.getAttribute("id");if(r=new RegExp("^"+i,"i"),e=e.replace(r,""),o&&e.length&&(r=new RegExp("#"+o+"(?![a-zA-Z\\-]+)","i"),e=e.replace(r,"")),a&&e.length)for(a=a.split(" "),n=a.length;n--;)r=new RegExp("\\."+a[n]+"(?![a-zA-Z\\-]+)","i"),e=e.replace(r,"");return 0===e.length}function d(t,e){var r;if(t.getElementById&&(r=t.getElementById(e)),r)return r;var n,i,a,o=t.getElementsByTagName("*");for(i=0,a=o.length;a>i;i++)if(n=o[i],e===n.getAttribute("id"))return n}function p(t){for(var e=a(t,["use","svg:use"]),r=0;e.length&&ro;o++)i=s.item(o),w.setAttributeNS(y,i.nodeName,i.nodeValue);for(;m.firstChild;)w.appendChild(m.firstChild);m=w}for(o=0,s=u.attributes,c=s.length;c>o;o++)i=s.item(o),"x"!==i.nodeName&&"y"!==i.nodeName&&"xlink:href"!==i.nodeName&&"href"!==i.nodeName&&("transform"===i.nodeName?g=i.nodeValue+" "+g:m.setAttribute(i.nodeName,i.nodeValue));m.setAttribute("transform",g),m.setAttribute("instantiated_by_use","1"),m.removeAttribute("id"),n=u.parentNode,n.replaceChild(m,u),e.length===v&&r++}}function h(t){var e,r,n,i,a=t.getAttribute("viewBox"),o=1,s=1,c=0,u=0,l=t.getAttribute("width"),f=t.getAttribute("height"),d=t.getAttribute("x")||0,p=t.getAttribute("y")||0,h=t.getAttribute("preserveAspectRatio")||"",m=!a||!b.svgViewBoxElementsRegEx.test(t.nodeName)||!(a=a.match(P)),g=!l||!f||"100%"===l||"100%"===f,v=m&&g,y={},w="",M=0,A=0;if(y.width=0,y.height=0,y.toBeParsed=v,v)return y;if(m)return y.width=x(l),y.height=x(f),y;if(c=-parseFloat(a[1]),u=-parseFloat(a[2]),e=parseFloat(a[3]),r=parseFloat(a[4]),y.minX=c,y.minY=u,y.viewBoxWidth=e,y.viewBoxHeight=r,g?(y.width=e,y.height=r):(y.width=x(l),y.height=x(f),o=y.width/e,s=y.height/r),h=b.util.parsePreserveAspectRatioAttribute(h),"none"!==h.alignX&&("meet"===h.meetOrSlice&&(s=o=o>s?s:o),"slice"===h.meetOrSlice&&(s=o=o>s?o:s),M=y.width-e*o,A=y.height-r*o,"Mid"===h.alignX&&(M/=2),"Mid"===h.alignY&&(A/=2),"Min"===h.alignX&&(M=0),"Min"===h.alignY&&(A=0)),1===o&&1===s&&0===c&&0===u&&0===d&&0===p)return y;if((d||p)&&(w=" translate("+x(d)+" "+x(p)+") "),n=w+" matrix("+o+" 0 0 "+s+" "+(c*o+M)+" "+(u*s+A)+") ",y.viewboxTransform=b.parseTransformAttribute(n),"svg"===t.nodeName){for(i=t.ownerDocument.createElementNS(b.svgNS,"g");t.firstChild;)i.appendChild(t.firstChild);t.appendChild(i)}else i=t,n=i.getAttribute("transform")+n;return i.setAttribute("transform",n),y}function m(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}function g(t,e){var r=["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"],n="xlink:href",i=e.getAttribute(n).substr(1),a=d(t,i);if(a&&a.getAttribute(n)&&g(t,a),r.forEach(function(t){a&&!e.hasAttribute(t)&&a.hasAttribute(t)&&e.setAttribute(t,a.getAttribute(t))}),!e.children.length)for(var o=a.cloneNode(!0);o.firstChild;)e.appendChild(o.firstChild);e.removeAttribute(n)}var b=t.fabric||(t.fabric={}),v=b.util.object.extend,y=b.util.object.clone,w=b.util.toFixed,x=b.util.parseUnit,M=b.util.multiplyTransformMatrices,A=["path","circle","polygon","polyline","ellipse","rect","line","image","text"],S=["symbol","image","marker","pattern","view","svg"],C=["pattern","defs","symbol","metadata","clipPath","mask","desc"],O=["symbol","g","a","svg","clipPath","defs"],E={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","letter-spacing":"charSpacing","paint-order":"paintFirst","stroke-dasharray":"strokeDashArray","stroke-dashoffset":"strokeDashOffset","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"textAnchor",opacity:"opacity","clip-path":"clipPath","clip-rule":"clipRule","vector-effect":"strokeUniform"},k={stroke:"strokeOpacity",fill:"fillOpacity"},T="font-size",N="clip-path";b.svgValidTagNamesRegEx=n(A),b.svgViewBoxElementsRegEx=n(S),b.svgInvalidAncestorsRegEx=n(C),b.svgValidParentsRegEx=n(O),b.cssRules={},b.gradientDefs={},b.clipPaths={},b.parseTransformAttribute=function(){function t(t,e){var r=b.util.cos(e[0]),n=b.util.sin(e[0]),i=0,a=0;3===e.length&&(i=e[1],a=e[2]),t[0]=r,t[1]=n,t[2]=-n,t[3]=r,t[4]=i-(r*i-n*a),t[5]=a-(n*i+r*a)}function e(t,e){var r=e[0],n=2===e.length?e[1]:e[0];t[0]=r,t[3]=n}function r(t,e,r){t[r]=Math.tan(b.util.degreesToRadians(e[0]))}function n(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var i=b.iMatrix,a=b.reNum,o="(?:\\s+,?\\s*|,\\s*)",s="(?:(skewX)\\s*\\(\\s*("+a+")\\s*\\))",c="(?:(skewY)\\s*\\(\\s*("+a+")\\s*\\))",u="(?:(rotate)\\s*\\(\\s*("+a+")(?:"+o+"("+a+")"+o+"("+a+"))?\\s*\\))",l="(?:(scale)\\s*\\(\\s*("+a+")(?:"+o+"("+a+"))?\\s*\\))",f="(?:(translate)\\s*\\(\\s*("+a+")(?:"+o+"("+a+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+a+")"+o+"("+a+")"+o+"("+a+")"+o+"("+a+")"+o+"("+a+")"+o+"("+a+")\\s*\\))",p="(?:"+d+"|"+f+"|"+l+"|"+u+"|"+s+"|"+c+")",h="(?:"+p+"(?:"+o+"*"+p+")*)",m="^\\s*(?:"+h+"?)\\s*$",g=new RegExp(m),v=new RegExp(p,"g");return function(a){var o=i.concat(),s=[];if(!a||a&&!g.test(a))return o;a.replace(v,function(a){var c=new RegExp(p).exec(a).filter(function(t){return!!t}),u=c[1],l=c.slice(2).map(parseFloat);switch(u){case"translate":n(o,l);break;case"rotate":l[0]=b.util.degreesToRadians(l[0]),t(o,l);break;case"scale":e(o,l);break;case"skewX":r(o,l,2);break;case"skewY":r(o,l,1);break;case"matrix":o=l}s.push(o.concat()),o=i.concat()});for(var c=s[0];s.length>1;)s.shift(),c=b.util.multiplyTransformMatrices(c,s[0]);return c}}();var P=new RegExp("^\\s*("+b.reNum+"+)\\s*,?\\s*("+b.reNum+"+)\\s*,?\\s*("+b.reNum+"+)\\s*,?\\s*("+b.reNum+"+)\\s*$");b.parseSVGDocument=function(t,e,r,n){if(t){p(t);var i,a,o=b.Object.__uid++,s=h(t),c=b.util.toArray(t.getElementsByTagName("*"));if(s.crossOrigin=n&&n.crossOrigin,s.svgUid=o,0===c.length&&b.isLikelyNode){c=t.selectNodes('//*[name(.)!="svg"]');var u=[];for(i=0,a=c.length;a>i;i++)u[i]=c[i];c=u}var l=c.filter(function(t){return h(t),b.svgValidTagNamesRegEx.test(t.nodeName.replace("svg:",""))&&!m(t,b.svgInvalidAncestorsRegEx)});if(!l||l&&!l.length)return void(e&&e([],{}));var f={};c.filter(function(t){return"clipPath"===t.nodeName.replace("svg:","")}).forEach(function(t){var e=t.getAttribute("id");f[e]=b.util.toArray(t.getElementsByTagName("*")).filter(function(t){return b.svgValidTagNamesRegEx.test(t.nodeName.replace("svg:",""))})}),b.gradientDefs[o]=b.getGradientDefs(t),b.cssRules[o]=b.getCSSRules(t),b.clipPaths[o]=f,b.parseElements(l,function(t,r){e&&(e(t,s,r,c),delete b.gradientDefs[o],delete b.cssRules[o],delete b.clipPaths[o])},y(s),r,n)}};var _=new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+b.reNum+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+b.reNum+"))?\\s+(.*)");v(b,{parseFontDeclaration:function(t,e){var r=t.match(_);if(r){var n=r[1],i=r[3],a=r[4],o=r[5],s=r[6];n&&(e.fontStyle=n),i&&(e.fontWeight=isNaN(parseFloat(i))?i:parseFloat(i)),a&&(e.fontSize=x(a)),s&&(e.fontFamily=s),o&&(e.lineHeight="normal"===o?1:o)}},getGradientDefs:function(t){var e,r=["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"],n=a(t,r),i=0,o={};for(i=n.length;i--;)e=n[i],e.getAttribute("xlink:href")&&g(t,e),o[e.getAttribute("id")]=e;return o},parseAttributes:function(t,n,a){if(t){var o,s,u,l={};"undefined"==typeof a&&(a=t.getAttribute("svgUid")),t.parentNode&&b.svgValidParentsRegEx.test(t.parentNode.nodeName)&&(l=b.parseAttributes(t.parentNode,n,a));var f=n.reduce(function(e,r){return o=t.getAttribute(r),o&&(e[r]=o),e},{}),d=v(c(t,a),b.parseStyleAttribute(t));f=v(f,d),d[N]&&t.setAttribute(N,d[N]),s=u=l.fontSize||b.Text.DEFAULT_SVG_FONT_SIZE,f[T]&&(f[T]=s=x(f[T],u));var p,h,m={};for(var g in f)p=e(g),h=r(p,f[g],l,s),m[p]=h;m&&m.font&&b.parseFontDeclaration(m.font,m);var y=v(l,m);return b.svgValidParentsRegEx.test(t.nodeName)?y:i(y)}},parseElements:function(t,e,r,n,i){new b.ElementsParser(t,e,r,n,i).parse()},parseStyleAttribute:function(t){var e={},r=t.getAttribute("style");return r?("string"==typeof r?o(r,e):s(r,e),e):e},parsePointsAttribute:function(t){if(!t)return null;t=t.replace(/,/g," ").trim(),t=t.split(/\s+/);var e,r,n=[];for(e=0,r=t.length;r>e;e+=2)n.push({x:parseFloat(t[e]),y:parseFloat(t[e+1])});return n},getCSSRules:function(t){var e,r,n,i=t.getElementsByTagName("style"),a={};for(e=0,r=i.length;r>e;e++){var o=i[e].textContent||"";o=o.replace(/\/\*[\s\S]*?\*\//g,""),""!==o.trim()&&(n=o.match(/[^{]*\{[\s\S]*?\}/g),n=n.map(function(t){return t.trim()}),n.forEach(function(t){var n=t.match(/([\s\S]*?)\s*\{([^}]*)\}/),i={},o=n[2].trim(),s=o.replace(/;$/,"").split(/\s*;\s*/);for(e=0,r=s.length;r>e;e++){var c=s[e].split(/\s*:\s*/),u=c[0],l=c[1];i[u]=l}t=n[1],t.split(",").forEach(function(t){t=t.replace(/^svg/i,"").trim(),""!==t&&(a[t]?b.util.object.extend(a[t],i):a[t]=b.util.object.clone(i))})}))}return a},loadSVGFromURL:function(t,e,r,n){function i(t){var i=t.responseXML;return i&&!i.documentElement&&b.window.ActiveXObject&&t.responseText&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(t.responseText.replace(//i,""))),i&&i.documentElement?void b.parseSVGDocument(i.documentElement,function(t,r,n,i){e&&e(t,r,n,i)},r,n):(e&&e(null),!1)}t=t.replace(/^\n\s*/,"").trim(),new b.util.request(t,{method:"get",onComplete:i})},loadSVGFromString:function(t,e,r,n){t=t.trim();var i;if("undefined"!=typeof b.window.DOMParser){var a=new b.window.DOMParser;a&&a.parseFromString&&(i=a.parseFromString(t,"text/xml"))}else b.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(t.replace(//i,"")));b.parseSVGDocument(i.documentElement,function(t,r,n,i){e(t,r,n,i)},r,n)}})}("undefined"!=typeof exports?exports:this);fabric.ElementsParser=function(t,e,r,n,i,a){this.elements=t,this.callback=e,this.options=r,this.reviver=n,this.svgUid=r&&r.svgUid||0,this.parsingOptions=i,this.regexUrl=/^url\(['"]?#([^'"]+)['"]?\)/g,this.doc=a},function(t){t.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},t.createObjects=function(){var t=this;this.elements.forEach(function(e,r){e.setAttribute("svgUid",t.svgUid),t.createObject(e,r)})},t.findTag=function(t){return fabric[fabric.util.string.capitalize(t.tagName.replace("svg:",""))]},t.createObject=function(t,e){var r=this.findTag(t);if(r&&r.fromElement)try{r.fromElement(t,this.createCallback(e,t),this.options)}catch(n){fabric.log(n)}else this.checkIfDone()},t.createCallback=function(t,e){var r=this;return function(n){var i;r.resolveGradient(n,e,"fill"),r.resolveGradient(n,e,"stroke"),n instanceof fabric.Image&&n._originalElement&&(i=n.parsePreserveAspectRatioAttribute(e)),n._removeTransformMatrix(i),r.resolveClipPath(n,e),r.reviver&&r.reviver(e,n),r.instances[t]=n,r.checkIfDone()}},t.extractPropertyDefinition=function(t,e,r){var n=t[e],i=this.regexUrl;if(i.test(n)){i.lastIndex=0;var a=i.exec(n)[1];return i.lastIndex=0,fabric[r][this.svgUid][a]}},t.resolveGradient=function(t,e,r){var n=this.extractPropertyDefinition(t,r,"gradientDefs");if(n){var i=e.getAttribute(r+"-opacity"),a=fabric.Gradient.fromElement(n,t,i,this.options);t.set(r,a)}},t.createClipPathCallback=function(t,e){return function(t){t._removeTransformMatrix(),t.fillRule=t.clipRule,e.push(t)}},t.resolveClipPath=function(t,e){var r,n,i,a,o,s,c=this.extractPropertyDefinition(t,"clipPath","clipPaths");if(c){a=[],i=fabric.util.invertTransform(t.calcTransformMatrix());for(var u=c[0].parentNode,l=e;l.parentNode&&l.getAttribute("clip-path")!==t.clipPath;)l=l.parentNode;l.parentNode.appendChild(u);for(var f=0;ft.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,r){return"undefined"==typeof r&&(r=.5),r=Math.max(Math.min(1,r),0),new e(this.x+(t.x-this.x)*r,this.y+(t.y-this.y)*r)},distanceFrom:function(t){var e=this.x-t.x,r=this.y-t.y;return Math.sqrt(e*e+r*r)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,r=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=r},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";function e(t){this.status=t,this.points=[]}var n=t.fabric||(t.fabric={});return n.Intersection?void n.warn("fabric.Intersection is already defined"):(n.Intersection=e,n.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},n.Intersection.intersectLineLine=function(t,r,i,a){var o,s=(a.x-i.x)*(t.y-i.y)-(a.y-i.y)*(t.x-i.x),c=(r.x-t.x)*(t.y-i.y)-(r.y-t.y)*(t.x-i.x),u=(a.y-i.y)*(r.x-t.x)-(a.x-i.x)*(r.y-t.y);if(0!==u){var l=s/u,f=c/u;l>=0&&1>=l&&f>=0&&1>=f?(o=new e("Intersection"),o.appendPoint(new n.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===s||0===c?"Coincident":"Parallel");return o},n.Intersection.intersectLinePolygon=function(t,n,r){var i,a,o,s,c=new e,u=r.length;for(s=0;u>s;s++)i=r[s],a=r[(s+1)%u],o=e.intersectLineLine(t,n,i,a),c.appendPoints(o.points);return c.points.length>0&&(c.status="Intersection"),c},n.Intersection.intersectPolygonPolygon=function(t,n){var r,i=new e,a=t.length;for(r=0;a>r;r++){var o=t[r],s=t[(r+1)%a],c=e.intersectLinePolygon(o,s,n);i.appendPoints(c.points)}return i.points.length>0&&(i.status="Intersection"),i},void(n.Intersection.intersectPolygonRectangle=function(t,r,i){var a=r.min(i),o=r.max(i),s=new n.Point(o.x,a.y),c=new n.Point(a.x,o.y),u=e.intersectLinePolygon(a,s,t),l=e.intersectLinePolygon(s,o,t),f=e.intersectLinePolygon(o,c,t),h=e.intersectLinePolygon(c,a,t),p=new e;return p.appendPoints(u.points),p.appendPoints(l.points),p.appendPoints(f.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function r(t,e,r){return 0>r&&(r+=1),r>1&&(r-=1),1/6>r?t+6*(e-t)*r:.5>r?e:2/3>r?t+(e-t)*(2/3-r)*6:t}var n=t.fabric||(t.fabric={});return n.Color?void n.warn("fabric.Color is already defined."):(n.Color=e,n.Color.prototype={_tryParsingColor:function(t){var r;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(r=[255,255,255,0]),r||(r=e.sourceFromHex(t)),r||(r=e.sourceFromRgb(t)),r||(r=e.sourceFromHsl(t)),r||(r=[0,0,0,1]),r&&this.setSource(r)},_rgbToHsl:function(t,e,r){t/=255,e/=255,r/=255;var i,a,o,s=n.util.array.max([t,e,r]),c=n.util.array.min([t,e,r]);if(o=(s+c)/2,s===c)i=a=0;else{var u=s-c;switch(a=o>.5?u/(2-s-c):u/(s+c),s){case t:i=(e-r)/u+(r>e?6:0);break;case e:i=(r-t)/u+2;break;case r:i=(t-e)/u+4}i/=6}return[Math.round(360*i),Math.round(100*a),Math.round(100*o)]},getSource:function(){return this._source},setSource:function(t){this._source=t},toRgb:function(){var t=this.getSource();return"rgb("+t[0]+","+t[1]+","+t[2]+")"},toRgba:function(){var t=this.getSource();return"rgba("+t[0]+","+t[1]+","+t[2]+","+t[3]+")"},toHsl:function(){var t=this.getSource(),e=this._rgbToHsl(t[0],t[1],t[2]);return"hsl("+e[0]+","+e[1]+"%,"+e[2]+"%)"},toHsla:function(){var t=this.getSource(),e=this._rgbToHsl(t[0],t[1],t[2]);return"hsla("+e[0]+","+e[1]+"%,"+e[2]+"%,"+t[3]+")"},toHex:function(){var t,e,r,n=this.getSource();return t=n[0].toString(16),t=1===t.length?"0"+t:t,e=n[1].toString(16),e=1===e.length?"0"+e:e,r=n[2].toString(16),r=1===r.length?"0"+r:r,t.toUpperCase()+e.toUpperCase()+r.toUpperCase()},toHexa:function(){var t,e=this.getSource();return t=Math.round(255*e[3]),t=t.toString(16),t=1===t.length?"0"+t:t,this.toHex()+t.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(t){var e=this.getSource();return e[3]=t,this.setSource(e),this},toGrayscale:function(){var t=this.getSource(),e=parseInt((.3*t[0]+.59*t[1]+.11*t[2]).toFixed(0),10),r=t[3];return this.setSource([e,e,e,r]),this},toBlackWhite:function(t){var e=this.getSource(),r=(.3*e[0]+.59*e[1]+.11*e[2]).toFixed(0),n=e[3];return t=t||127,r=Number(r)r;r++)n.push(Math.round(o[r]*(1-a)+s[r]*a));return n[3]=i,this.setSource(n),this}},n.Color.reRGBa=/^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*((?:\d*\.?\d+)?)\s*)?\)$/i,n.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/i,n.Color.reHex=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,n.Color.colorNameMap={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",darkgreen:"#006400",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",lightgreen:"#90EE90",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"},n.Color.fromRgb=function(t){return e.fromSource(e.sourceFromRgb(t))},n.Color.sourceFromRgb=function(t){var r=t.match(e.reRGBa);if(r){var n=parseInt(r[1],10)/(/%$/.test(r[1])?100:1)*(/%$/.test(r[1])?255:1),i=parseInt(r[2],10)/(/%$/.test(r[2])?100:1)*(/%$/.test(r[2])?255:1),a=parseInt(r[3],10)/(/%$/.test(r[3])?100:1)*(/%$/.test(r[3])?255:1);return[parseInt(n,10),parseInt(i,10),parseInt(a,10),r[4]?parseFloat(r[4]):1]}},n.Color.fromRgba=e.fromRgb,n.Color.fromHsl=function(t){return e.fromSource(e.sourceFromHsl(t))},n.Color.sourceFromHsl=function(t){var n=t.match(e.reHSLa);if(n){var i,a,o,s=(parseFloat(n[1])%360+360)%360/360,c=parseFloat(n[2])/(/%$/.test(n[2])?100:1),u=parseFloat(n[3])/(/%$/.test(n[3])?100:1);if(0===c)i=a=o=u;else{var l=.5>=u?u*(c+1):u+c-u*c,f=2*u-l;i=r(f,l,s+1/3),a=r(f,l,s),o=r(f,l,s-1/3)}return[Math.round(255*i),Math.round(255*a),Math.round(255*o),n[4]?parseFloat(n[4]):1]}},n.Color.fromHsla=e.fromHsl,n.Color.fromHex=function(t){return e.fromSource(e.sourceFromHex(t))},n.Color.sourceFromHex=function(t){if(t.match(e.reHex)){var r=t.slice(t.indexOf("#")+1),n=3===r.length||4===r.length,i=8===r.length||4===r.length,a=n?r.charAt(0)+r.charAt(0):r.substring(0,2),o=n?r.charAt(1)+r.charAt(1):r.substring(2,4),s=n?r.charAt(2)+r.charAt(2):r.substring(4,6),c=i?n?r.charAt(3)+r.charAt(3):r.substring(6,8):"FF";return[parseInt(a,16),parseInt(o,16),parseInt(s,16),parseFloat((parseInt(c,16)/255).toFixed(2))]}},void(n.Color.fromSource=function(t){var r=new e;return r.setSource(t),r}))}("undefined"!=typeof exports?exports:this);!function(){function t(t,e){var i,r,n,s,a=t.getAttribute("style"),o=t.getAttribute("offset")||0;if(o=parseFloat(o)/(/%$/.test(o)?100:1),o=0>o?0:o>1?1:o,a){var c=a.split(/\s*;\s*/);for(""===c[c.length-1]&&c.pop(),s=c.length;s--;){var h=c[s].split(/\s*:\s*/),l=h[0].trim(),u=h[1].trim();"stop-color"===l?i=u:"stop-opacity"===l&&(n=u)}}return i||(i=t.getAttribute("stop-color")||"rgb(0,0,0)"),n||(n=t.getAttribute("stop-opacity")),i=new fabric.Color(i),r=i.getAlpha(),n=isNaN(parseFloat(n))?1:parseFloat(n),n*=r*e,{offset:o,color:i.toRgb(),opacity:n}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i,r){var n,s;Object.keys(e).forEach(function(t){n=e[t],"Infinity"===n?s=1:"-Infinity"===n?s=0:(s=parseFloat(e[t],10),"string"==typeof n&&/^(\d+\.\d+)%|(\d+)%$/.test(n)&&(s*=.01,"pixels"===r&&(("x1"===t||"x2"===t||"r2"===t)&&(s*=i.viewBoxWidth||i.width),("y1"===t||"y2"===t)&&(s*=i.viewBoxHeight||i.height)))),e[t]=s})}var n=fabric.util.object.clone;fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(t){t||(t={}),t.coords||(t.coords={});var e,i=this;Object.keys(t).forEach(function(e){i[e]=t[e]}),this.id?this.id+="_"+fabric.Object.__uid++:this.id=fabric.Object.__uid++,e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice()},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t,e){var i,r,s,a,o=n(this.coords,!0),e=e||{},c=n(this.colorStops,!0),h=o.r1>o.r2,l=this.gradientTransform?this.gradientTransform.concat():fabric.iMatrix.concat(),u=-this.offsetX,f=-this.offsetY,d=!!e.additionalTransform,p="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox";if(c.sort(function(t,e){return t.offset-e.offset}),"objectBoundingBox"===p?(u/=t.width,f/=t.height):(u+=t.width/2,f+=t.height/2),"path"===t.type&&(u-=t.pathOffset.x,f-=t.pathOffset.y),l[4]-=u,l[5]-=f,a='id="SVGID_'+this.id+'" gradientUnits="'+p+'"',a+=' gradientTransform="'+(d?e.additionalTransform+" ":"")+fabric.util.matrixToSVG(l)+'" ',"linear"===this.type?s=["\n']:"radial"===this.type&&(s=["\n']),"radial"===this.type){if(h)for(c=c.concat(),c.reverse(),i=0,r=c.length;r>i;i++)c[i].offset=1-c[i].offset;var g=Math.min(o.r1,o.r2);if(g>0){var b=Math.max(o.r1,o.r2),v=g/b;for(i=0,r=c.length;r>i;i++)c[i].offset+=v*(1-c[i].offset)}}for(i=0,r=c.length;r>i;i++){var m=c[i];s.push("\n')}return s.push("linear"===this.type?"\n":"\n"),s.join("")},toLive:function(t,e){var i,r,n,s=fabric.util.object.clone(this.coords),a=s.x1,o=s.y1,c=s.x2,h=s.y2,l=this.colorStops;if(this.type){for(e instanceof fabric.Text&&"percentage"===this.gradientUnits&&(a*=e.width,o*=e.height,c*=e.width,h*=e.height),"linear"===this.type?i=t.createLinearGradient(a,o,c,h):"radial"===this.type&&(i=t.createRadialGradient(a,o,s.r1,c,h,s.r2)),r=0,n=l.length;n>r;r++){var u=l[r].color,f=l[r].opacity,d=l[r].offset;"undefined"!=typeof f&&(u=new fabric.Color(u).setAlpha(f).toRgba()),i.addColorStop(d,u)}return i}}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(n,s,a,o){var c=parseFloat(a)/(/%$/.test(a)?100:1);c=0>c?0:c>1?1:c,isNaN(c)&&(c=1);var h,l,u,f,d=n.getElementsByTagName("stop"),p="userSpaceOnUse"===n.getAttribute("gradientUnits")?"pixels":"percentage",g=n.getAttribute("gradientTransform")||"",b=[],v=0,m=0;for("linearGradient"===n.nodeName||"LINEARGRADIENT"===n.nodeName?(h="linear",l=e(n)):(h="radial",l=i(n)),u=d.length;u--;)b.push(t(d[u],c));f=fabric.parseTransformAttribute(g),r(s,l,o,p),"pixels"===p&&(v=-s.left,m=-s.top);var y=new fabric.Gradient({id:n.getAttribute("id"),type:h,coords:l,colorStops:b,gradientUnits:p,gradientTransform:f,offsetX:v,offsetY:m});return y},forObject:function(t,e){return e||(e={}),r(t,e.coords,e.gradientUnits,{viewBoxWidth:100,viewBoxHeight:100}),new fabric.Gradient(e)}})}();!function(){"use strict";var t=fabric.util.toFixed;fabric.Pattern=fabric.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(t,e){if(t||(t={}),this.id=fabric.Object.__uid++,this.setOptions(t),!t.source||t.source&&"string"!=typeof t.source)return void(e&&e(this));if("undefined"!=typeof fabric.util.getFunctionBody(t.source))this.source=new Function(fabric.util.getFunctionBody(t.source)),e&&e(this);else{var i=this;this.source=fabric.util.createImage(),fabric.util.loadImage(t.source,function(t){i.source=t,e&&e(i)},null,this.crossOrigin)}},toObject:function(e){var i,r,n=fabric.Object.NUM_FRACTION_DIGITS;return"function"==typeof this.source?i=String(this.source):"string"==typeof this.source.src?i=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(i=this.source.toDataURL()),r={type:"pattern",source:i,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:t(this.offsetX,n),offsetY:t(this.offsetY,n),patternTransform:this.patternTransform?this.patternTransform.concat():null},fabric.util.populateWithProperties(this,r,e),r},toSVG:function(t){var e="function"==typeof this.source?this.source():this.source,i=e.width/t.width,r=e.height/t.height,n=this.offsetX/t.width,s=this.offsetY/t.height,a="";return("repeat-x"===this.repeat||"no-repeat"===this.repeat)&&(r=1,s&&(r+=Math.abs(s))),("repeat-y"===this.repeat||"no-repeat"===this.repeat)&&(i=1,n&&(i+=Math.abs(n))),e.src?a=e.src:e.toDataURL&&(a=e.toDataURL()),'\n\n\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}})}();!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,a=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),o=20,c=new e.Color(this.color);return t.width&&t.height&&(r=100*i((Math.abs(a.x)+this.blur)/t.width,s)+o,n=100*i((Math.abs(a.y)+this.blur)/t.height,s)+o),t.flipX&&(a.x*=-1),t.flipY&&(a.y*=-1),'\n \n \n \n \n \n \n \n \n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this);!function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,r=fabric.util.removeFromArray,n=fabric.util.toFixed,i=fabric.util.transformPoint,a=fabric.util.invertTransform,o=fabric.util.getNodeCanvas,s=fabric.util.createCanvasElement,c=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(t,e){var r=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,r),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,r),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,r),e.overlayColor&&this.setOverlayColor(e.overlayColor,r),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var t=fabric.devicePixelRatio;this.__initRetinaScaling(t,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(t,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(t,e,r){e.setAttribute("width",this.width*t),e.setAttribute("height",this.height*t),r.scale(t,t)},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,r){return this.__setBgOverlayImage("overlayImage",t,e,r)},setBackgroundImage:function(t,e,r){return this.__setBgOverlayImage("backgroundImage",t,e,r)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,r,n){return"string"==typeof e?fabric.util.loadImage(e,function(e){if(e){var i=new fabric.Image(e,n);this[t]=i,i.canvas=this}r&&r(e)},this,n&&n.crossOrigin):(n&&e.setOptions(n),this[t]=e,e&&(e.canvas=this),r&&r(e)),this},__setBgOverlayColor:function(t,e,r){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,r),this},_createCanvasElement:function(){var t=s();if(!t)throw c;if(t.style||(t.style={}),"undefined"==typeof t.getContext)throw c;return t},_initOptions:function(t){var e=this.lowerCanvasEl;this._setOptions(t),this.width=this.width||parseInt(e.width,10)||0,this.height=this.height||parseInt(e.height,10)||0,this.lowerCanvasEl.style&&(e.width=this.width,e.height=this.height,e.style.width=this.width+"px",e.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=t&&t.getContext?t:fabric.util.getById(t)||this._createCanvasElement(),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var r;e=e||{};for(var n in t)r=t[n],e.cssOnly||(this._setBackstoreDimension(n,t[n]),r+="px",this.hasLostContext=!0),e.backstoreOnly||this._setCssDimension(n,r);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(),this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,r,n,i=this._activeObject,a=!1,o=!0;for(this.viewportTransform=t,r=0,n=this._objects.length;n>r;r++)e=this._objects[r],e.group||e.setCoords(a,o);return i&&"activeSelection"===i.type&&i.setCoords(a,o),this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll(),this},zoomToPoint:function(t,e){var r=t,n=this.viewportTransform.slice(0);t=i(t,a(this.viewportTransform)),n[0]=e,n[3]=e;var o=i(t,n);return n[4]+=r.x-o.x,n[5]+=r.y-o.y,this.setViewportTransform(n)},setZoom:function(t){return this.zoomToPoint(new fabric.Point(0,0),t),this},absolutePan:function(t){var e=this.viewportTransform.slice(0);return e[4]=-t.x,e[5]=-t.y,this.setViewportTransform(e)},relativePan:function(t){return this.absolutePan(new fabric.Point(-t.x-this.viewportTransform[4],-t.y-this.viewportTransform[5]))},getElement:function(){return this.lowerCanvasEl},_onObjectAdded:function(t){this.stateful&&t.setupState(),t._set("canvas",this),t.setCoords(),this.fire("object:added",{target:t}),t.fire("added")},_onObjectRemoved:function(t){this.fire("object:removed",{target:t}),t.fire("removed"),delete t.canvas},clearContext:function(t){return t.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.backgroundImage=null,this.overlayImage=null,this.backgroundColor="",this.overlayColor="",this._hasITextHandlers&&(this.off("mouse:up",this._mouseUpITextHandler),this._iTextInstances=null,this._hasITextHandlers=!1),this.clearContext(this.contextContainer),this.fire("canvas:cleared"),this.renderOnAddRemove&&this.requestRenderAll(),this},renderAll:function(){var t=this.contextContainer;return this.renderCanvas(t,this._objects),this},renderAndReset:function(){this.isRendering=0,this.renderAll()},requestRenderAll:function(){return this.isRendering||(this.isRendering=fabric.util.requestAnimFrame(this.renderAndResetBound)),this},calcViewportBoundaries:function(){var t={},e=this.width,r=this.height,n=a(this.viewportTransform);return t.tl=i({x:0,y:0},n),t.br=i({x:e,y:r},n),t.tr=new fabric.Point(t.br.x,t.tl.y),t.bl=new fabric.Point(t.tl.x,t.br.y),this.vptCoords=t,t},cancelRequestedRender:function(){this.isRendering&&(fabric.util.cancelAnimFrame(this.isRendering),this.isRendering=0)},renderCanvas:function(t,e){var r=this.viewportTransform,n=this.clipPath;this.cancelRequestedRender(),this.calcViewportBoundaries(),this.clearContext(t),this.fire("before:render",{ctx:t}),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),t.save(),t.transform(r[0],r[1],r[2],r[3],r[4],r[5]),this._renderObjects(t,e),t.restore(),!this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.clipTo&&t.restore(),n&&(n.canvas=this,n.shouldCache(),n._transformDone=!0,n.renderCache({forClipping:!0}),this.drawClipPathOnCanvas(t)),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render",{ctx:t})},drawClipPathOnCanvas:function(t){var e=this.viewportTransform,r=this.clipPath;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.globalCompositeOperation="destination-in",r.transform(t),t.scale(1/r.zoomX,1/r.zoomY),t.drawImage(r._cacheCanvas,-r.cacheTranslationX,-r.cacheTranslationY),t.restore()},_renderObjects:function(t,e){var r,n;for(r=0,n=e.length;n>r;++r)e[r]&&e[r].render(t)},_renderBackgroundOrOverlay:function(t,e){var r=this[e+"Color"],n=this[e+"Image"],i=this.viewportTransform,a=this[e+"Vpt"];if(r||n){if(r){t.save(),t.beginPath(),t.moveTo(0,0),t.lineTo(this.width,0),t.lineTo(this.width,this.height),t.lineTo(0,this.height),t.closePath(),t.fillStyle=r.toLive?r.toLive(t,this):r,a&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),t.transform(1,0,0,1,r.offsetX||0,r.offsetY||0);var o=r.gradientTransform||r.patternTransform;o&&t.transform(o[0],o[1],o[2],o[3],o[4],o[5]),t.fill(),t.restore()}n&&(t.save(),a&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),n.render(t),t.restore())}},_renderBackground:function(t){this._renderBackgroundOrOverlay(t,"background")},_renderOverlay:function(t){this._renderBackgroundOrOverlay(t,"overlay")},getCenter:function(){return{top:this.height/2,left:this.width/2}},centerObjectH:function(t){return this._centerObject(t,new fabric.Point(this.getCenter().left,t.getCenterPoint().y))},centerObjectV:function(t){return this._centerObject(t,new fabric.Point(t.getCenterPoint().x,this.getCenter().top))},centerObject:function(t){var e=this.getCenter();return this._centerObject(t,new fabric.Point(e.left,e.top))},viewportCenterObject:function(t){var e=this.getVpCenter();return this._centerObject(t,e)},viewportCenterObjectH:function(t){var e=this.getVpCenter();return this._centerObject(t,new fabric.Point(e.x,t.getCenterPoint().y)),this},viewportCenterObjectV:function(t){var e=this.getVpCenter();return this._centerObject(t,new fabric.Point(t.getCenterPoint().x,e.y))},getVpCenter:function(){var t=this.getCenter(),e=a(this.viewportTransform);return i({x:t.left,y:t.top},e)},_centerObject:function(t,e){return t.setPositionByOrigin(e,"center","center"),t.setCoords(),this.renderOnAddRemove&&this.requestRenderAll(),this},toDatalessJSON:function(t){return this.toDatalessObject(t)},toObject:function(t){return this._toObjectMethod("toObject",t)},toDatalessObject:function(t){return this._toObjectMethod("toDatalessObject",t)},_toObjectMethod:function(e,r){var n=this.clipPath,i={version:fabric.version,objects:this._toObjects(e,r)};return n&&(i.clipPath=this._toObject(this.clipPath,e,r)),t(i,this.__serializeBgOverlay(e,r)),fabric.util.populateWithProperties(this,i,r),i},_toObjects:function(t,e){return this._objects.filter(function(t){return!t.excludeFromExport}).map(function(r){return this._toObject(r,t,e)},this)},_toObject:function(t,e,r){var n;this.includeDefaultValues||(n=t.includeDefaultValues,t.includeDefaultValues=!1);var i=t[e](r);return this.includeDefaultValues||(t.includeDefaultValues=n),i},__serializeBgOverlay:function(t,e){var r={},n=this.backgroundImage,i=this.overlayImage;return this.backgroundColor&&(r.background=this.backgroundColor.toObject?this.backgroundColor.toObject(e):this.backgroundColor),this.overlayColor&&(r.overlay=this.overlayColor.toObject?this.overlayColor.toObject(e):this.overlayColor),n&&!n.excludeFromExport&&(r.backgroundImage=this._toObject(n,t,e)),i&&!i.excludeFromExport&&(r.overlayImage=this._toObject(i,t,e)),r},svgViewportTransformation:!0,toSVG:function(t,e){t||(t={}),t.reviver=e;var r=[];return this._setSVGPreamble(r,t),this._setSVGHeader(r,t),this.clipPath&&r.push('\n'),this._setSVGBgOverlayColor(r,"background"),this._setSVGBgOverlayImage(r,"backgroundImage",e),this._setSVGObjects(r,e),this.clipPath&&r.push("\n"),this._setSVGBgOverlayColor(r,"overlay"),this._setSVGBgOverlayImage(r,"overlayImage",e),r.push(""),r.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var r,i=e.width||this.width,a=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',s=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(r=this.viewportTransform,o='viewBox="'+n(-r[4]/r[0],s)+" "+n(-r[5]/r[3],s)+" "+n(this.width/r[0],s)+" "+n(this.height/r[3],s)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(e),"\n")},createSVGClipPathMarkup:function(t){var e=this.clipPath;return e?(e.clipPathId="CLIPPATH_"+fabric.Object.__uid++,'\n'+this.clipPath.toClipPathSVG(t.reviver)+"\n"):""},createSVGRefElementsMarkup:function(){var t=this,e=["background","overlay"].map(function(e){var r=t[e+"Color"];if(r&&r.toLive){var n=t[e+"Vpt"],i=t.viewportTransform,a={width:t.width/(n?i[0]:1),height:t.height/(n?i[3]:1)};return r.toSVG(a,{additionalTransform:n?fabric.util.matrixToSVG(i):""})}});return e.join("")},createSVGFontFacesMarkup:function(){var t,e,r,n,i,a,o,s,c,l="",u={},f=fabric.fontPaths,h=[];for(this._objects.forEach(function p(t){h.push(t),t._objects&&t._objects.forEach(p)}),s=0,c=h.length;c>s;s++)if(t=h[s],e=t.fontFamily,-1!==t.type.indexOf("text")&&!u[e]&&f[e]&&(u[e]=!0,t.styles)){r=t.styles;for(i in r){n=r[i];for(o in n)a=n[o],e=a.fontFamily,!u[e]&&f[e]&&(u[e]=!0)}}for(var d in u)l+=[" @font-face {\n"," font-family: '",d,"';\n"," src: url('",f[d],"');\n"," }\n"].join("");return l&&(l=[' \n"].join("")),l},_setSVGObjects:function(t,e){var r,n,i,a=this._objects;for(n=0,i=a.length;i>n;n++)r=a[n],r.excludeFromExport||this._setSVGObject(t,r,e)},_setSVGObject:function(t,e,r){t.push(e.toSVG(r))},_setSVGBgOverlayImage:function(t,e,r){this[e]&&!this[e].excludeFromExport&&this[e].toSVG&&t.push(this[e].toSVG(r))},_setSVGBgOverlayColor:function(t,e){var r=this[e+"Color"],n=this.viewportTransform,i=this.width,a=this.height;if(r)if(r.toLive){var o=r.repeat,s=fabric.util.invertTransform(n),c=this[e+"Vpt"],l=c?fabric.util.matrixToSVG(s):"";t.push('\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,n,i,a=this._activeObject;if(t===a&&"activeSelection"===t.type)for(i=a._objects,e=i.length;e--;)n=i[e],r(this._objects,n),this._objects.unshift(n);else r(this._objects,t),this._objects.unshift(t);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(t){if(!t)return this;var e,n,i,a=this._activeObject;if(t===a&&"activeSelection"===t.type)for(i=a._objects,e=0;e0+l&&(o=a-1,r(this._objects,i),this._objects.splice(o,0,i)),l++;else a=this._objects.indexOf(t),0!==a&&(o=this._findNewLowerIndex(t,a,e),r(this._objects,t),this._objects.splice(o,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(t,e,r){var n,i;if(r)for(n=e,i=e-1;i>=0;--i){var a=t.intersectsWithObject(this._objects[i])||t.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(t);if(a){n=i;break}}else n=e-1;return n},bringForward:function(t,e){if(!t)return this;var n,i,a,o,s,c=this._activeObject,l=0;if(t===c&&"activeSelection"===t.type)for(s=c._objects,n=s.length;n--;)i=s[n],a=this._objects.indexOf(i),ai;++i){var o=t.intersectsWithObject(this._objects[i])||t.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(t);if(o){n=i;break}}else n=e+1;return n},moveTo:function(t,e){return r(this._objects,t),this._objects.splice(e,0,t),this.renderOnAddRemove&&this.requestRenderAll()},dispose:function(){return this.isRendering&&(fabric.util.cancelAnimFrame(this.isRendering),this.isRendering=0),this.forEachObject(function(t){t.dispose&&t.dispose()}),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose&&this.backgroundImage.dispose(),this.backgroundImage=null,this.overlayImage&&this.overlayImage.dispose&&this.overlayImage.dispose(),this.overlayImage=null,this._iTextInstances=null,this.contextContainer=null,fabric.util.cleanUpJsdomNode(this.lowerCanvasEl),this.lowerCanvasEl=void 0,this},toString:function(){return"#"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=s();if(!e||!e.getContext)return null;var r=e.getContext("2d");if(!r)return null;switch(t){case"setLineDash":return"undefined"!=typeof r.setLineDash;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject,fabric.isLikelyNode&&(fabric.StaticCanvas.prototype.createPNGStream=function(){var t=o(this.lowerCanvasEl);return t&&t.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){var e=o(this.lowerCanvasEl);return e&&e.createJPEGStream(t)})}();fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.miterLimit=this.strokeMiterLimit,t.lineJoin=this.strokeLineJoin,fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(t){var e=this.canvas.viewportTransform;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},_setShadow:function(){if(this.shadow){var t=this.canvas,e=this.shadow,i=t.contextTop,r=t.getZoom();t&&t._isRetinaScaling()&&(r*=fabric.devicePixelRatio),i.shadowColor=e.color,i.shadowBlur=e.blur*r,i.shadowOffsetX=e.offsetX*r,i.shadowOffsetY=e.offsetY*r}},needsFullRender:function(){var t=new fabric.Color(this.color);return t.getAlpha()<1||!!this.shadow},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}});!function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{decimate:.4,initialize:function(t){this.canvas=t,this._points=[]},_drawSegment:function(t,e,i){var r=e.midPointFrom(i);return t.quadraticCurveTo(e.x,e.y,r.x,r.y),r},onMouseDown:function(t,e){this.canvas._isMainEvent(e.e)&&(this._prepareForDrawing(t),this._captureDrawingPath(t),this._render())},onMouseMove:function(t,e){if(this.canvas._isMainEvent(e.e)&&this._captureDrawingPath(t)&&this._points.length>1)if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var i=this._points,r=i.length,n=this.canvas.contextTop;this._saveAndTransform(n),this.oldEnd&&(n.beginPath(),n.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(n,i[r-2],i[r-1],!0),n.stroke(),n.restore()}},onMouseUp:function(t){return this.canvas._isMainEvent(t.e)?(this.oldEnd=void 0,this._finalizeAndAddPath(),!1):!0},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){return this._points.length>1&&t.eq(this._points[this._points.length-1])?!1:(this._points.push(t),!0)},_reset:function(){this._points=[],this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);return this._addPoint(e)},_render:function(){var t,e,i=this.canvas.contextTop,r=this._points[0],n=this._points[1];if(this._saveAndTransform(i),i.beginPath(),2===this._points.length&&r.x===n.x&&r.y===n.y){var s=this.width/1e3;r=new fabric.Point(r.x,r.y),n=new fabric.Point(n.x,n.y),r.x-=s,n.x+=s}for(i.moveTo(r.x,r.y),t=1,e=this._points.length;e>t;t++)this._drawSegment(i,r,n),r=this._points[t],n=this._points[t+1];i.lineTo(r.x,r.y),i.stroke(),i.restore()},convertPointsToSVGPath:function(t){var e,i=[],r=this.width/1e3,n=new fabric.Point(t[0].x,t[0].y),s=new fabric.Point(t[1].x,t[1].y),a=t.length,o=1,c=0,h=a>2;for(h&&(o=t[2].xe;e++){if(!n.eq(s)){var l=n.midPointFrom(s);i.push("Q ",n.x," ",n.y," ",l.x," ",l.y," ")}n=t[e],e+1t[e-2].x?1:n.x===t[e-2].x?0:-1,c=n.y>t[e-2].y?1:n.y===t[e-2].y?0:-1),i.push("L ",n.x+o*r," ",n.y+c*r),i},createPath:function(t){var e=new fabric.Path(t,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeMiterLimit:this.strokeMiterLimit,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray});return this.shadow&&(this.shadow.affectStroke=!0,e.setShadow(this.shadow)),e},decimatePoints:function(t,e){if(t.length<=2)return t;var i,r,n=this.canvas.getZoom(),s=Math.pow(e/n,2),a=t.length-1,o=t[0],c=[o];for(i=1;a>i;i++)r=Math.pow(o.x-t[i].x,2)+Math.pow(o.y-t[i].y,2),r>=s&&(o=t[i],c.push(o));return 1===c.length&&c.push(new fabric.Point(c[0].x,c[0].y)),c},_finalizeAndAddPath:function(){var t=this.canvas.contextTop;t.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var e=this.convertPointsToSVGPath(this._points).join("");if("M 0 0 Q 0 0 0 0 L 0 0"===e)return void this.canvas.requestRenderAll();var i=this.createPath(e);this.canvas.clearContext(this.canvas.contextTop),this.canvas.add(i),this.canvas.requestRenderAll(),i.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:i})}})}();fabric.CircleBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,initialize:function(t){this.canvas=t,this.points=[]},drawDot:function(t){var e=this.addPoint(t),i=this.canvas.contextTop;this._saveAndTransform(i),this.dot(i,e),i.restore()},dot:function(t,e){t.fillStyle=e.fill,t.beginPath(),t.arc(e.x,e.y,e.radius,0,2*Math.PI,!1),t.closePath(),t.fill()},onMouseDown:function(t){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(t)},_render:function(){var t,e,i=this.canvas.contextTop,r=this.points;for(this._saveAndTransform(i),t=0,e=r.length;e>t;t++)this.dot(i,r[t]);i.restore()},onMouseMove:function(t){this.needsFullRender()?(this.canvas.clearContext(this.canvas.contextTop),this.addPoint(t),this._render()):this.drawDot(t)},onMouseUp:function(){var t,e,i=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;var r=[];for(t=0,e=this.points.length;e>t;t++){var n=this.points[t],s=new fabric.Circle({radius:n.radius,left:n.x,top:n.y,originX:"center",originY:"center",fill:n.fill});this.shadow&&s.setShadow(this.shadow),r.push(s)}var a=new fabric.Group(r);a.canvas=this.canvas,this.canvas.add(a),this.canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=i,this.canvas.requestRenderAll()},addPoint:function(t){var e=new fabric.Point(t.x,t.y),i=fabric.util.getRandomInt(Math.max(0,this.width-20),this.width+20)/2,r=new fabric.Color(this.color).setAlpha(fabric.util.getRandomInt(0,100)/100).toRgba();return e.radius=i,e.fill=r,this.points.push(e),e}});fabric.SprayBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,density:20,dotWidth:1,dotWidthVariance:1,randomOpacity:!1,optimizeOverlapping:!0,initialize:function(t){this.canvas=t,this.sprayChunks=[]},onMouseDown:function(t){this.sprayChunks.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(t),this.render(this.sprayChunkPoints)},onMouseMove:function(t){this.addSprayChunk(t),this.render(this.sprayChunkPoints)},onMouseUp:function(){var t=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;for(var e=[],i=0,r=this.sprayChunks.length;r>i;i++)for(var n=this.sprayChunks[i],s=0,a=n.length;a>s;s++){var o=new fabric.Rect({width:n[s].width,height:n[s].width,left:n[s].x+1,top:n[s].y+1,originX:"center",originY:"center",fill:this.color});e.push(o)}this.optimizeOverlapping&&(e=this._getOptimizedRects(e));var c=new fabric.Group(e);this.shadow&&c.setShadow(this.shadow),this.canvas.add(c),this.canvas.fire("path:created",{path:c}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=t,this.canvas.requestRenderAll()},_getOptimizedRects:function(t){var e,i,r,n={};for(i=0,r=t.length;r>i;i++)e=t[i].left+""+t[i].top,n[e]||(n[e]=t[i]);var s=[];for(e in n)s.push(n[e]);return s},render:function(t){var e,i,r=this.canvas.contextTop;for(r.fillStyle=this.color,this._saveAndTransform(r),e=0,i=t.length;i>e;e++){var n=t[e];"undefined"!=typeof n.opacity&&(r.globalAlpha=n.opacity),r.fillRect(n.x,n.y,n.width,n.width)}r.restore()},_render:function(){var t,e,i=this.canvas.contextTop;for(i.fillStyle=this.color,this._saveAndTransform(i),t=0,e=this.sprayChunks.length;e>t;t++)this.render(this.sprayChunks[t]);i.restore()},addSprayChunk:function(t){this.sprayChunkPoints=[];var e,i,r,n,s=this.width/2;for(n=0;n0&&!this.preserveObjectStacking){e=[],i=[];for(var n=0,s=this._objects.length;s>n;n++)t=this._objects[n],-1===r.indexOf(t)?e.push(t):i.push(t);r.length>1&&(this._activeObject._objects=i),e.push.apply(e,i)}else e=this._objects;return e},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&this.renderTopLayer(this.contextTop);var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTopLayer:function(t){t.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(t),this.contextTopDirty=!0),t.restore()},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.renderTopLayer(t),this.fire("after:render"),this},_resetCurrentTransform:function(){var t=this._currentTransform;t.target.set({scaleX:t.original.scaleX,scaleY:t.original.scaleY,skewX:t.original.skewX,skewY:t.original.skewY,left:t.original.left,top:t.original.top}),this._shouldCenterTransform(t.target)?("center"!==t.originX&&(t.mouseXSign="right"===t.originX?-1:1),"center"!==t.originY&&(t.mouseYSign="bottom"===t.originY?-1:1),t.originX="center",t.originY="center"):(t.originX=t.original.originX,t.originY=t.original.originY)},containsPoint:function(t,e,i){var r,n=!0,s=i||this.getPointer(t,n);return r=e.group&&e.group===this._activeObject&&"activeSelection"===e.group.type?this._normalizePointer(e.group,s):{x:s.x,y:s.y},e.containsPoint(r)||e._findTargetCorner(s)},_normalizePointer:function(t,e){var i=t.calcTransformMatrix(),r=fabric.util.invertTransform(i),n=this.restorePointerVpt(e);return fabric.util.transformPoint(n,r)},isTargetTransparent:function(t,e,i){if(t.shouldCache()&&t._cacheCanvas&&t!==this._activeObject){var r=this._normalizePointer(t,{x:e,y:i}),n=Math.max(t.cacheTranslationX+r.x*t.zoomX,0),s=Math.max(t.cacheTranslationY+r.y*t.zoomY,0),a=fabric.util.isTransparent(t._cacheContext,Math.round(n),Math.round(s),this.targetFindTolerance);return a}var o=this.contextCache,c=t.selectionBackgroundColor,h=this.viewportTransform;t.selectionBackgroundColor="",this.clearContext(o),o.save(),o.transform(h[0],h[1],h[2],h[3],h[4],h[5]),t.render(o),o.restore(),t===this._activeObject&&t._renderControls(o,{hasBorders:!1,transparentCorners:!1},{hasBorders:!1}),t.selectionBackgroundColor=c;var a=fabric.util.isTransparent(o,e,i,this.targetFindTolerance);return a},_isSelectionKeyPressed:function(t){var e=!1;return e="[object Array]"===Object.prototype.toString.call(this.selectionKey)?!!this.selectionKey.find(function(e){return t[e]===!0}):t[this.selectionKey]},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),r=this._activeObject;return!e||e&&r&&i.length>1&&-1===i.indexOf(e)&&r!==e&&!this._isSelectionKeyPressed(t)||e&&!e.evented||e&&!e.selectable&&r&&r!==e},_shouldCenterTransform:function(t){if(t){var e,i=this._currentTransform;return"scale"===i.action||"scaleX"===i.action||"scaleY"===i.action?e=this.centeredScaling||t.centeredScaling:"rotate"===i.action&&(e=this.centeredRotation||t.centeredRotation),e?!i.altKey:i.altKey}},_getOriginFromCorner:function(t,e){var i={x:t.originX,y:t.originY};return"ml"===e||"tl"===e||"bl"===e?i.x="right":("mr"===e||"tr"===e||"br"===e)&&(i.x="left"),"tl"===e||"mt"===e||"tr"===e?i.y="bottom":("bl"===e||"mb"===e||"br"===e)&&(i.y="top"),i},_getActionFromCorner:function(t,e,i){if(!e||!t)return"drag";switch(e){case"mtr":return"rotate";case"ml":case"mr":return i[this.altActionKey]?"skewY":"scaleX";case"mt":case"mb":return i[this.altActionKey]?"skewX":"scaleY";default:return"scale"}},_setupCurrentTransform:function(t,i,r){if(i){var n=this.getPointer(t),s=i._findTargetCorner(this.getPointer(t,!0)),a=this._getActionFromCorner(r,s,t,i),o=this._getOriginFromCorner(i,s);this._currentTransform={target:i,action:a,corner:s,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:n.x-i.left,offsetY:n.y-i.top,originX:o.x,originY:o.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:e(i.angle),width:i.width*i.scaleX,mouseXSign:1,mouseYSign:1,shiftKey:t.shiftKey,altKey:t[this.centeredKey],original:fabric.util.saveObjectTransform(i)},this._currentTransform.original.originX=o.x,this._currentTransform.original.originY=o.y,this._resetCurrentTransform(),this._beforeTransform(t)}},_translateObject:function(t,e){var i=this._currentTransform,r=i.target,n=t-i.offsetX,s=e-i.offsetY,a=!r.get("lockMovementX")&&r.left!==n,o=!r.get("lockMovementY")&&r.top!==s;return a&&r.set("left",n),o&&r.set("top",s),a||o},_changeSkewTransformOrigin:function(t,e,i){var r="originX",n={0:"center"},s=e.target.skewX,a="left",o="right",c="mt"===e.corner||"ml"===e.corner?1:-1,h=1;t=t>0?1:-1,"y"===i&&(s=e.target.skewY,a="top",o="bottom",r="originY"),n[-1]=a,n[1]=o,e.target.flipX&&(h*=-1),e.target.flipY&&(h*=-1),0===s?(e.skewSign=-c*t*h,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*c*h])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,a=n.get("lockSkewingX"),o=n.get("lockSkewingY");if(a&&"x"===i||o&&"y"===i)return!1;var c,h,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],h=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(c,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(h,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,a,o,c,h,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(o="y",c="Y",h="X",u=0,f=d.skewY):(o="x",c="X",h="Y",u=d.skewX,f=0),a=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-a[i],2>=l?n=0:(n=p*Math.atan(l/d["scale"+h]/(a[o]/d["scale"+c])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+h]!==n,d.set("skew"+h,n),0!==d["skew"+c]&&(s=d._getTransformedDimensions(),n=r[o]/s[o]*d["scale"+c],d.set("scale"+c,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.lockScalingX,a=n.lockScalingY,o=n.lockScalingFlip;if(s&&a)return!1;var c=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(h,r),u=this._setObjectScale(h,r,s,a,i,o,l),n.setPositionByOrigin(c,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,a){var o=e.target,c=!1,h=!1,l=!1,u=t.x*o.scaleX/a.x,f=t.y*o.scaleY/a.y,d=o.scaleX!==u,g=o.scaleY!==f;if(e.newScaleX=u,e.newScaleY=f,fabric.Textbox&&"x"===n&&o instanceof fabric.Textbox){var p=o.width*(t.x/a.x);return p>=o.getMinWidth()?(l=p!==o.width,o.set("width",p),l):!1}return s&&0>=u&&u=f&&fs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n,s=this._currentTransform,a=s.target,n=a.translateToOriginPoint(a.getCenterPoint(),s.originX,s.originY);if(a.lockRotation)return!1;var o=r(s.ey-n.y,s.ex-n.x),c=r(e-n.y,t-n.x),h=i(c-o+s.theta),l=!0;if(a.snapAngle>0){var u=a.snapAngle,f=a.snapThreshold||u,d=Math.ceil(h/u)*u,g=Math.floor(h/u)*u;Math.abs(h-g)h&&(h=360+h),h%=360,a.angle===h?l=!1:(a.angle=h,a.setPositionByOrigin(n,s.originX,s.originY)),l},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_drawSelection:function(t){var e=this._groupSelector,i=e.left,r=e.top,o=n(i),c=n(r);if(this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(e.ex-(i>0?0:-i),e.ey-(r>0?0:-r),o,c)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var h=e.ex+a-(i>0?0:o),l=e.ey+a-(r>0?0:c);t.beginPath(),fabric.util.drawDashedLine(t,h,l,h+o,l,this.selectionDashArray),fabric.util.drawDashedLine(t,h,l+c-1,h+o,l+c-1,this.selectionDashArray),fabric.util.drawDashedLine(t,h,l,h,l+c,this.selectionDashArray),fabric.util.drawDashedLine(t,h+o-1,l,h+o-1,l+c,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+a-(i>0?0:o),e.ey+a-(r>0?0:c),o,c)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r,n=!0,s=this.getPointer(t,n),a=this._activeObject,o=this.getActiveObjects();if(this.targets=[],o.length>1&&!e&&a===this._searchPossibleTargets([a],s))return a;if(1===o.length&&a._findTargetCorner(s))return a;if(1===o.length&&a===this._searchPossibleTargets([a],s)){if(!this.preserveObjectStacking)return a;i=a,r=this.targets,this.targets=[]}var c=this._searchPossibleTargets(this._objects,s);return t[this.altSelectionKey]&&c&&i&&c!==i&&(c=i,this.targets=r),c}},_checkTarget:function(t,e,i){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var r=this.isTargetTransparent(e,i.x,i.y);if(!r)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n=t.length;n--;){var s=t[n],a=s.group&&"activeSelection"!==s.group.type?this._normalizePointer(s.group,e):e;if(this._checkTarget(a,s,e)){i=t[n],i.subTargetCheck&&i instanceof fabric.Group&&(r=this._searchPossibleTargets(i._objects,e),r&&this.targets.push(r));break}}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var r,n=t(e),s=this.upperCanvasEl,a=s.getBoundingClientRect(),o=a.width||0,c=a.height||0;o&&c||("top"in a&&"bottom"in a&&(c=Math.abs(a.top-a.bottom)),"right"in a&&"left"in a&&(o=Math.abs(a.right-a.left))),this.calcOffset(),n.x=n.x-this._offset.left,n.y=n.y-this._offset.top,i||(n=this.restorePointerVpt(n));var h=this.getRetinaScaling();return 1!==h&&(n.x/=h,n.y/=h),r=0===o||0===c?{width:1,height:1}:{width:s.width/o,height:s.height/c},{x:n.x*r.width,y:n.y*r.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),e=this.lowerCanvasEl,i=this.upperCanvasEl;i?i.className="":(i=this._createCanvasElement(),this.upperCanvasEl=i),fabric.util.addClass(i,"upper-canvas "+t),this.wrapperEl.appendChild(i),this._copyCanvasStyle(e,i),this._applyCanvasStyle(i),this.contextTop=i.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.width||t.width,i=this.height||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?"activeSelection"===t.type&&t._objects?t._objects.slice(0):[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),t===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",t)},_fireSelectionEvents:function(t,e){var i=!1,r=this.getActiveObjects(),n=[],s=[],a={e:e};t.forEach(function(t){-1===r.indexOf(t)&&(i=!0,t.fire("deselected",a),s.push(t))}),r.forEach(function(e){-1===t.indexOf(e)&&(i=!0,e.fire("selected",a),n.push(e))}),t.length>0&&r.length>0?(a.selected=n,a.deselected=s,a.updated=n[0]||s[0],a.target=this._activeObject,i&&this.fire("selection:updated",a)):r.length>0?(1===r.length&&(a.target=n[0],this.fire("object:selected",a)),a.selected=n,a.target=this._activeObject,this.fire("selection:created",a)):t.length>0&&(a.deselected=s,this.fire("selection:cleared",a))},setActiveObject:function(t,e){var i=this.getActiveObjects();return this._setActiveObject(t,e),this._fireSelectionEvents(i,e),this},_setActiveObject:function(t,e){return this._activeObject===t?!1:this._discardActiveObject(e,t)?t.onSelect({e:e})?!1:(this._activeObject=t,!0):!1},_discardActiveObject:function(t,e){var i=this._activeObject;if(i){if(i.onDeselect({e:t,object:e}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var e=this.getActiveObjects(),i=this.getActiveObject();return e.length&&this.fire("before:selection:cleared",{target:i,e:t}),this._discardActiveObject(t),this._fireSelectionEvents(e,t),this},dispose:function(){var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach(function(t){fabric.util.cleanUpJsdomNode(this[t]),this[t]=void 0}.bind(this)),t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,fabric.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var e=this._activeObject;e&&e._renderControls(t)},_toObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(t),n=this.callSuper("_toObject",t,e,i);return this._unwindGroupTransformOnObject(t,r),n},_realizeGroupTransformOnObject:function(t){if(t.group&&"activeSelection"===t.group.type&&this._activeObject===t.group){var e=["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"],i={};return e.forEach(function(e){i[e]=t[e]}),this._activeObject.realizeTransform(t),i}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},_setSVGObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(e);this.callSuper("_setSVGObject",t,e,i),this._unwindGroupTransformOnObject(e,r)},setViewportTransform:function(t){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),fabric.StaticCanvas.prototype.setViewportTransform.call(this,t)}});for(var o in fabric.StaticCanvas)"prototype"!==o&&(fabric.Canvas[o]=fabric.StaticCanvas[o])}();!function(){function t(t,e){return t.button&&t.button===e-1}var e={mt:0,tr:1,mr:2,br:3,mb:4,bl:5,ml:6,tl:7},i=fabric.util.addListener,r=fabric.util.removeListener,n=3,s=2,a=1,o={passive:!1};fabric.util.object.extend(fabric.Canvas.prototype,{cursorMap:["n-resize","ne-resize","e-resize","se-resize","s-resize","sw-resize","w-resize","nw-resize"],mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(i,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(t,e){var i=this.upperCanvasEl,r=this._getEventPrefix();t(fabric.window,"resize",this._onResize),t(i,r+"down",this._onMouseDown),t(i,r+"move",this._onMouseMove,o),t(i,r+"out",this._onMouseOut),t(i,r+"enter",this._onMouseEnter),t(i,"wheel",this._onMouseWheel),t(i,"contextmenu",this._onContextMenu),t(i,"dblclick",this._onDoubleClick),t(i,"dragover",this._onDragOver),t(i,"dragenter",this._onDragEnter),t(i,"dragleave",this._onDragLeave),t(i,"drop",this._onDrop),this.enablePointerEvents||t(i,"touchstart",this._onTouchStart,o),"undefined"!=typeof eventjs&&e in eventjs&&(eventjs[e](i,"gesture",this._onGesture),eventjs[e](i,"drag",this._onDrag),eventjs[e](i,"orientation",this._onOrientationChange),eventjs[e](i,"shake",this._onShake),eventjs[e](i,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(r,"remove");var t=this._getEventPrefix();r(fabric.document,t+"up",this._onMouseUp),r(fabric.document,"touchend",this._onTouchEnd,o),r(fabric.document,t+"move",this._onMouseMove,o),r(fabric.document,"touchmove",this._onMouseMove,o)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._simpleEventHandler.bind(this,"drop"),this.eventsBound=!0)},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t});var i=this;this._hoveredTargets.forEach(function(r){i.fire("mouse:out",{target:e,e:t}),r&&e.fire("mouseout",{e:t})}),this._hoveredTargets=[],this._iTextInstances&&this._iTextInstances.forEach(function(t){t.isEditing&&t.hiddenTextarea.focus()})},_onMouseEnter:function(t){this.currentTransform||this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onDragOver:function(t){t.preventDefault();var e=this._simpleEventHandler("dragover",t);this._fireEnterLeaveEvents(e,t)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onDoubleClick:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"dblclick"),this._resetTransformEventData(t)},getPointerId:function(t){var e=t.changedTouches;return e?e[0]&&e[0].identifier:this.enablePointerEvents?t.pointerId:-1},_isMainEvent:function(t){return t.isPrimary===!0?!0:t.isPrimary===!1?!1:"touchend"===t.type&&0===t.touches.length?!0:t.changedTouches?t.changedTouches[0].identifier===this.mainTouchId:!0},_onTouchStart:function(t){t.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(t)),this.__onMouseDown(t),this._resetTransformEventData();var e=this.upperCanvasEl,n=this._getEventPrefix();i(fabric.document,"touchend",this._onTouchEnd,o),i(fabric.document,"touchmove",this._onMouseMove,o),r(e,n+"down",this._onMouseDown)},_onMouseDown:function(t){this.__onMouseDown(t),this._resetTransformEventData();var e=this.upperCanvasEl,n=this._getEventPrefix();r(e,n+"move",this._onMouseMove,o),i(fabric.document,n+"up",this._onMouseUp),i(fabric.document,n+"move",this._onMouseMove,o)},_onTouchEnd:function(t){if(!(t.touches.length>0)){this.__onMouseUp(t),this._resetTransformEventData(),this.mainTouchId=null;var e=this._getEventPrefix();r(fabric.document,"touchend",this._onTouchEnd,o),r(fabric.document,"touchmove",this._onMouseMove,o);var n=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(function(){i(n.upperCanvasEl,e+"down",n._onMouseDown),n._willAddMouseDown=0},400)}},_onMouseUp:function(t){this.__onMouseUp(t),this._resetTransformEventData();var e=this.upperCanvasEl,n=this._getEventPrefix();this._isMainEvent(t)&&(r(fabric.document,n+"up",this._onMouseUp),r(fabric.document,n+"move",this._onMouseMove,o),i(e,n+"move",this._onMouseMove,o))},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t){var e=this._activeObject;return!!e!=!!t||e&&t&&e!==t?!0:e&&e.isEditing?!1:!1},__onMouseUp:function(e){var i,r=this._currentTransform,o=this._groupSelector,c=!1,h=!o||0===o.left&&0===o.top;return this._cacheTransformEventData(e),i=this._target,this._handleEvent(e,"up:before"),t(e,n)?void(this.fireRightClick&&this._handleEvent(e,"up",n,h)):t(e,s)?(this.fireMiddleClick&&this._handleEvent(e,"up",s,h),void this._resetTransformEventData()):this.isDrawingMode&&this._isCurrentlyDrawing?void this._onMouseUpInDrawingMode(e):void(this._isMainEvent(e)&&(r&&(this._finalizeCurrentTransform(e),c=r.actionPerformed),h||(this._maybeGroupObjects(e),c||(c=this._shouldRender(i))),i&&(i.isMoving=!1),this._setCursorFromEvent(e,i),this._handleEvent(e,"up",a,h),this._groupSelector=null,this._currentTransform=null,i&&(i.__corner=0),c?this.requestRenderAll():h||this.renderTop()))},_simpleEventHandler:function(t,e){var i=this.findTarget(e),r=this.targets,n={e:e,target:i,subTargets:r};if(this.fire(t,n),i&&i.fire(t,n),!r)return i;for(var s=0;sa;a++)this.fireSyntheticInOutEvents(n[a],e,{oldTarget:r[a],evtOut:"mouseout",evtIn:"mouseover"});this._hoveredTarget=t,this._hoveredTargets=this.targets.concat()},_fireEnterLeaveEvents:function(t,e){var i=this._draggedoverTarget,r=this._hoveredTargets,n=this.targets,s=Math.max(r.length,n.length);this.fireSyntheticInOutEvents(t,e,{oldTarget:i,evtOut:"dragleave",evtIn:"dragenter"});for(var a=0;s>a;a++)this.fireSyntheticInOutEvents(n[a],e,{oldTarget:r[a],evtOut:"dragleave",evtIn:"dragenter"});this._draggedoverTarget=t},fireSyntheticInOutEvents:function(t,e,i){var r,n,s,a,o=i.oldTarget,c=o!==t,h=i.canvasEvtIn,l=i.canvasEvtOut;c&&(r={e:e,target:t,previousTarget:o},n={e:e,target:o,nextTarget:t}),a=t&&c,s=o&&c,s&&(l&&this.fire(l,n),o.fire(i.evtOut,n)),a&&(h&&this.fire(h,r),t.fire(i.evtIn,r))},__onMouseWheel:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"wheel"),this._resetTransformEventData()},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.requestRenderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.action,a=!1,o={target:e.target,e:t,transform:e,pointer:i};"rotate"===s?(a=this._rotateObject(r,n))&&this._fire("rotating",o):"scale"===s?(a=this._onScale(t,e,r,n))&&this._fire("scaling",o):"scaleX"===s?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",o):"scaleY"===s?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",o):"skewX"===s?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",o):"skewY"===s?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",o):(a=this._translateObject(r,n),a&&(this._fire("moving",o),this.setCursor(o.target.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e){this.fire("object:"+t,e),e.target.fire(t,e)},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return this._isUniscalePossible(t,e.target)?(e.currentAction="scale",this._scaleObject(i,r)):(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally"))},_isUniscalePossible:function(t,e){return(t[this.uniScaleKey]||this.uniScaleTransform)&&!e.get("lockUniScaling")},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this._activeObject&&"activeSelection"===this._activeObject.type?this._activeObject:null,n=(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this.setCursor(this.getCornerCursor(n,e,t)):(e.subTargetCheck&&this.targets.concat().reverse().map(function(t){i=t.hoverCursor||i}),this.setCursor(i))},getCornerCursor:function(t,i,r){return this.actionIsDisabled(t,i,r)?this.notAllowedCursor:t in e?this._getRotatedCornerCursor(t,i,r):"mtr"===t&&i.hasRotatingPoint?this.rotationCursor:this.defaultCursor},actionIsDisabled:function(t,e,i){return"mt"===t||"mb"===t?i[this.altActionKey]?e.lockSkewingX:e.lockScalingY:"ml"===t||"mr"===t?i[this.altActionKey]?e.lockSkewingY:e.lockScalingX:"mtr"===t?e.lockRotation:this._isUniscalePossible(i,e)?e.lockScalingX&&e.lockScalingY:e.lockScalingX||e.lockScalingY},_getRotatedCornerCursor:function(t,i,r){var n=Math.round(i.angle%360/45);return 0>n&&(n+=8),n+=e[t],r[this.altActionKey]&&e[t]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}();!function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this._activeObject;return i&&this._isSelectionKeyPressed(t)&&e&&e.selectable&&this.selection&&(i!==e||"activeSelection"===i.type)&&!e.onSelect({e:t})},_handleGrouping:function(t,e){var i=this._activeObject;i.__corner||(e!==i||(e=this.findTarget(t,!0),e&&e.selectable))&&(i&&"activeSelection"===i.type?this._updateActiveSelection(e,t):this._createActiveSelection(e,t))},_updateActiveSelection:function(t,e){var i=this._activeObject,r=i._objects.slice(0);i.contains(t)?(i.removeWithUpdate(t),this._hoveredTarget=t,this._hoveredTargets=this.targets.concat(),1===i.size()&&this._setActiveObject(i.item(0),e)):(i.addWithUpdate(t),this._hoveredTarget=i,this._hoveredTargets=this.targets.concat()),this._fireSelectionEvents(r,e)},_createActiveSelection:function(t,e){var i=this.getActiveObjects(),r=this._createGroup(t);this._hoveredTarget=r,this._setActiveObject(r,e),this._fireSelectionEvents(i,e)},_createGroup:function(t){var e=this._objects,i=e.indexOf(this._activeObject)1&&(e=new fabric.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(e,t))},_collectObjects:function(i){for(var r,n=[],s=this._groupSelector.ex,a=this._groupSelector.ey,o=s+this._groupSelector.left,c=a+this._groupSelector.top,h=new fabric.Point(t(s,o),t(a,c)),l=new fabric.Point(e(s,o),e(a,c)),u=!this.selectionFullyContained,f=s===o&&a===c,d=this._objects.length;d--&&(r=this._objects[d],!(r&&r.selectable&&r.visible&&(u&&r.intersectsWithRect(h,l)||r.isContainedWithinRect(h,l)||u&&r.containsPoint(h)||u&&r.containsPoint(l))&&(n.push(r),f))););return n.length>1&&(n=n.filter(function(t){return!t.onSelect({e:i})})),n},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t),this.setCursor(this.defaultCursor),this._groupSelector=null}})}();!function(){fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",r=t.quality||1,i=(t.multiplier||1)*(t.enableRetinaScaling?this.getRetinaScaling():1),n=this.toCanvasElement(i,t);return fabric.util.toDataURL(n,e,r)},toCanvasElement:function(t,e){t=t||1,e=e||{};var r=(e.width||this.width)*t,i=(e.height||this.height)*t,n=this.getZoom(),a=this.width,o=this.height,s=n*t,c=this.viewportTransform,l=(c[4]-(e.left||0))*t,u=(c[5]-(e.top||0))*t,f=this.interactive,h=[s,0,0,s,l,u],d=this.enableRetinaScaling,p=fabric.util.createCanvasElement(),g=this.contextTop;return p.width=r,p.height=i,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=h,this.width=r,this.height=i,this.calcViewportBoundaries(),this.renderCanvas(p.getContext("2d"),this._objects),this.viewportTransform=c,this.width=a,this.height=o,this.calcViewportBoundaries(),this.interactive=f,this.enableRetinaScaling=d,this.contextTop=g,p}})}();fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,r){return this.loadFromJSON(t,e,r)},loadFromJSON:function(t,e,r){if(t){var i="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t),n=this,a=i.clipPath,o=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete i.clipPath,this._enlivenObjects(i.objects,function(t){n.clear(),n._setBgOverlay(i,function(){a?n._enlivenObjects([a],function(r){n.clipPath=r[0],n.__setupCanvas.call(n,i,t,o,e)}):n.__setupCanvas.call(n,i,t,o,e)})},r),this}},__setupCanvas:function(t,e,r,i){var n=this;e.forEach(function(t,e){n.insertAt(t,e)}),this.renderOnAddRemove=r,delete t.objects,delete t.backgroundImage,delete t.overlayImage,delete t.background,delete t.overlay,this._setOptions(t),this.renderAll(),i&&i()},_setBgOverlay:function(t,e){var r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,i),this.__setBgOverlay("overlayImage",t.overlayImage,r,i),this.__setBgOverlay("backgroundColor",t.background,r,i),this.__setBgOverlay("overlayColor",t.overlay,r,i)},__setBgOverlay:function(t,e,r,i){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],r[t]=!0,i&&i()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){r[t]=!0,i&&i()})):(r[t]=!0,void(i&&i()))},_enlivenObjects:function(t,e,r){return t&&0!==t.length?void fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,r):void(e&&e([]))},_toDataURL:function(t,e){this.clone(function(r){e(r.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,r){this.clone(function(i){r(i.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var r=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(r,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.util.createCanvasElement();e.width=this.width,e.height=this.height;var r=new fabric.Canvas(e);r.clipTo=this.clipTo,this.backgroundImage?(r.setBackgroundImage(this.backgroundImage.src,function(){r.renderAll(),t&&t(r)}),r.backgroundImageOpacity=this.backgroundImageOpacity,r.backgroundImageStretch=this.backgroundImageStretch):t&&t(r)}});!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,a=e.util.string.capitalize,s=e.util.degreesToRadians,o=e.StaticCanvas.supports("setLineDash"),c=!e.isLikelyNode,l=2;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:c,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(t){t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=t.width,n=t.height,a=e.maxCacheSideLimit,s=e.minCacheSideLimit;if(a>=r&&a>=n&&i>=r*n)return s>r&&(t.width=s),s>n&&(t.height=s),t;var o=r/n,c=e.util.limitDimsByArea(o,i),l=e.util.capValue,h=l(s,c.x,a),u=l(s,c.y,a);return r>h&&(t.zoomX/=r/h,t.width=h,t.capped=!0),n>u&&(t.zoomY/=n/u,t.height=u,t.capped=!0),t},_getCacheCanvasDimensions:function(){var t=this.getTotalObjectScaling(),e=this._getTransformedDimensions(0,0),i=e.x*t.scaleX/this.scaleX,r=e.y*t.scaleY/this.scaleY;return{width:i+l,height:r+l,zoomX:t.scaleX,zoomY:t.scaleY,x:i,y:r}},_updateCacheCanvas:function(){var t=this.canvas;if(this.noScaleCache&&t&&t._currentTransform){var i=t._currentTransform.target,r=t._currentTransform.action;if(this===i&&r.slice&&"scale"===r.slice(0,5))return!1}var n,a,s=this._cacheCanvas,o=this._limitCacheSize(this._getCacheCanvasDimensions()),c=e.minCacheSideLimit,l=o.width,h=o.height,u=o.zoomX,f=o.zoomY,d=l!==this.cacheWidth||h!==this.cacheHeight,p=this.zoomX!==u||this.zoomY!==f,g=d||p,m=0,v=0,b=!1;if(d){var y=this._cacheCanvas.width,w=this._cacheCanvas.height,C=l>y||h>w,x=(.9*y>l||.9*w>h)&&y>c&&w>c;b=C||x,C&&!o.capped&&(l>c||h>c)&&(m=.1*l,v=.1*h)}return g?(b?(s.width=Math.ceil(l+m),s.height=Math.ceil(h+v)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,s.width,s.height)),n=o.x/2,a=o.y/2,this.cacheTranslationX=Math.round(s.width/2-n)+n,this.cacheTranslationY=Math.round(s.height/2-a)+a,this.cacheWidth=l,this.cacheHeight=h,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(u,f),this.zoomX=u,this.zoomY=f,!0):!1},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t){var e;e=this.group&&!this.group._transformDone?this.calcTransformMatrix():this.calcOwnMatrix(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:e.version,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.angle,i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return this.clipPath&&(r.clipPath=this.clipPath.toObject(t),r.clipPath.inverted=this.clipPath.inverted,r.clipPath.absolutePositioned=this.clipPath.absolutePositioned),e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){if("left"!==e&&"top"!==e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}}),t},toString:function(){return"#"},getObjectScaling:function(){var t=e.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(t.scaleX),scaleY:Math.abs(t.scaleY)}},getTotalObjectScaling:function(){var t=this.getObjectScaling(),e=t.scaleX,i=t.scaleY;if(this.canvas){var r=this.canvas.getZoom(),n=this.canvas.getRetinaScaling();e*=r*n,i*=r*n}return{scaleX:e,scaleY:i}},getObjectOpacity:function(){var t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t},_set:function(t,i){var r="scaleX"===t||"scaleY"===t,n=this[t]!==i,a=!1;return r&&(i=this._constrainScale(i)),"scaleX"===t&&0>i?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&0>i?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,n&&(a=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(t)>-1?(this.dirty=!0,a&&this.group.set("dirty",!0)):a&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||0===this.width&&0===this.height&&0===this.strokeWidth||!this.visible},render:function(t){this.isNotVisible()||(!this.canvas||!this.canvas.skipOffscreen||this.group||this.isOnScreen())&&(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t,this),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(t)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},renderCache:function(t){t=t||{},this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,t.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&"transparent"!==this.stroke&&0!==this.strokeWidth},hasFill:function(){return this.fill&&"transparent"!==this.fill},needsItsOwnCache:function(){return"stroke"===this.paintFirst&&this.hasFill()&&this.hasStroke()&&"object"==typeof this.shadow?!0:this.clipPath?!0:!1},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawClipPathOnCache:function(t){var i=this.clipPath;if(t.save(),t.globalCompositeOperation=i.inverted?"destination-out":"destination-in",i.absolutePositioned){var r=e.util.invertTransform(this.calcTransformMatrix());t.transform(r[0],r[1],r[2],r[3],r[4],r[5])}i.transform(t),t.scale(1/i.zoomX,1/i.zoomY),t.drawImage(i._cacheCanvas,-i.cacheTranslationX,-i.cacheTranslationY),t.restore()},drawObject:function(t,e){var i=this.fill,r=this.stroke;e?(this.fill="black",this.stroke="",this._setClippingProperties(t)):(this._renderBackground(t),this._setStrokeStyles(t,this),this._setFillStyles(t,this)),this._render(t),this._drawClipPath(t),this.fill=i,this.stroke=r},_drawClipPath:function(t){var e=this.clipPath;e&&(e.canvas=this.canvas,e.shouldCache(),e._transformDone=!0,e.renderCache({forClipping:!0}),this.drawClipPathOnCache(t))},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity},_setStrokeStyles:function(t,e){e.stroke&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineDashOffset=e.strokeDashOffset,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,t.strokeStyle=e.stroke.toLive?e.stroke.toLive(t,this):e.stroke)},_setFillStyles:function(t,e){e.fill&&(t.fillStyle=e.fill.toLive?e.fill.toLive(t,this):e.fill)},_setClippingProperties:function(t){t.globalAlpha=1,t.strokeStyle="transparent",t.fillStyle="#000000"},_setLineDash:function(t,e,i){e&&0!==e.length&&(1&e.length&&e.push.apply(e,e),o?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){var r,n,a,o=this.getViewportTransform(),c=this.calcTransformMatrix();i=i||{},n="undefined"!=typeof i.hasBorders?i.hasBorders:this.hasBorders,a="undefined"!=typeof i.hasControls?i.hasControls:this.hasControls,c=e.util.multiplyTransformMatrices(o,c),r=e.util.qrDecompose(c),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),i.forActiveSelection?(t.rotate(s(r.angle)),n&&this.drawBordersInGroup(t,r,i)):(t.rotate(s(this.angle)),n&&this.drawBorders(t,i)),a&&this.drawControls(t,i),t.restore()},_setShadow:function(t){if(this.shadow){var i,r=this.shadow,n=this.canvas,a=n&&n.viewportTransform[0]||1,s=n&&n.viewportTransform[3]||1;i=r.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),n&&n._isRetinaScaling()&&(a*=e.devicePixelRatio,s*=e.devicePixelRatio),t.shadowColor=r.color,t.shadowBlur=r.blur*e.browserShadowBlurConstant*(a+s)*(i.scaleX+i.scaleY)/4,t.shadowOffsetX=r.offsetX*a*i.scaleX,t.shadowOffsetY=r.offsetY*s*i.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(!e||!e.toLive)return{offsetX:0,offsetY:0};var i=e.gradientTransform||e.patternTransform,r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;return"percentage"===e.gradientUnits?t.transform(this.width,0,0,this.height,r,n):t.transform(1,0,0,1,r,n),i&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(t){"stroke"===this.paintFirst?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))},_render:function(){},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this.strokeUniform&&this.group){var e=this.getObjectScaling();t.scale(1/e.scaleX,1/e.scaleY)}else this.strokeUniform&&t.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this.stroke.toLive&&"percentage"===this.stroke.gradientUnits?this._applyPatternForTransformedGradient(t,this.stroke):this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore()}},_applyPatternForTransformedGradient:function(t,i){var r,n=this._limitCacheSize(this._getCacheCanvasDimensions()),a=e.util.createCanvasElement(),s=this.canvas.getRetinaScaling(),o=n.x/this.scaleX/s,c=n.y/this.scaleY/s;a.width=o,a.height=c,r=a.getContext("2d"),r.beginPath(),r.moveTo(0,0),r.lineTo(o,0),r.lineTo(o,c),r.lineTo(0,c),r.closePath(),r.translate(o/2,c/2),r.scale(n.zoomX/this.scaleX/s,n.zoomY/this.scaleY/s),this._applyPatternGradientTransform(r,i),r.fillStyle=i.toLive(t),r.fill(),t.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),t.scale(s*this.scaleX/n.zoomX,s*this.scaleY/n.zoomY),t.strokeStyle=r.createPattern(a,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var t=e.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",t.scaleX),this.set("scaleY",t.scaleY),this.angle=t.angle,this.skewX=t.skewX,this.skewY=0}},_removeTransformMatrix:function(t){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=e.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,t&&(this.scaleX*=t.scaleX,this.scaleY*=t.scaleY,this.cropX=t.cropX,this.cropY=t.cropY,i.x+=t.offsetLeft,i.y+=t.offsetTop,this.width=t.width,this.height=t.height),this.setPositionByOrigin(i,"center","center")},clone:function(t,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,t):e.Object._fromObject("Object",r,t)},cloneAsImage:function(t,i){var r=this.toCanvasElement(i);return t&&t(new e.Image(r)),this},toCanvasElement:function(t){t||(t={});var i=e.util,r=i.saveObjectTransform(this),n=this.group,a=this.shadow,s=Math.abs,o=(t.multiplier||1)*(t.enableRetinaScaling?e.devicePixelRatio:1);delete this.group,t.withoutTransform&&i.resetObjectTransform(this),t.withoutShadow&&(this.shadow=null);var c,l,h,u,f=e.util.createCanvasElement(),d=this.getBoundingRect(!0,!0),p=this.shadow,g={x:0,y:0};p&&(l=p.blur,c=p.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),g.x=2*Math.round(s(p.offsetX)+l)*s(c.scaleX),g.y=2*Math.round(s(p.offsetY)+l)*s(c.scaleY)),h=d.width+g.x,u=d.height+g.y,f.width=Math.ceil(h),f.height=Math.ceil(u);var m=new e.StaticCanvas(f,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});"jpeg"===t.format&&(m.backgroundColor="#fff"),this.setPositionByOrigin(new e.Point(m.width/2,m.height/2),"center","center");var v=this.canvas;m.add(this);var b=m.toCanvasElement(o||1,t);return this.shadow=a,this.set("canvas",v),n&&(this.group=n),this.set(r).setCoords(),m._objects=[],m.dispose(),m=null,b},toDataURL:function(t){return t||(t={}),e.util.toDataURL(this.toCanvasElement(t),t.format||"png",t.quality||1)},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},r.gradientUnits=i.gradientUnits||"pixels",(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t,i){return this.set("fill",new e.Pattern(t,i))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},rotate:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,s(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors&&e.util.createAccessors(e.Object),i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,a){var s=e[t];i=r(i,!0),e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]),e.util.enlivenObjects([i.clipPath],function(t){i.clipPath=t[0];var e=a?new s(i[a],i):new s(i);n&&n(e)})})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this);!function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,a,s){var o,c,l,h=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof a?a=e[a]:a-=.5,o=a-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof s?s=i[s]:s-=.5,c=s-n,(o||c)&&(l=this._getTransformedDimensions(),h=t.x+o*l.x,u=t.y+c*l.y),new fabric.Point(h,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,a,s=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(s,"center","center",i,r):new fabric.Point(this.left,this.top),a=new fabric.Point(e.x,e.y),this.angle&&(a=fabric.util.rotatePoint(a,s,-t(this.angle))),a.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,a=t(this.angle),s=this.getScaledWidth(),o=fabric.util.cos(a)*s,c=fabric.util.sin(a)*s;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=o*(n-r),this.top+=c*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}();!function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices,r=fabric.util.transformPoint;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,ownMatrixCache:null,matrixCache:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),a=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===a.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,a=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);4>n;n++)if(!t.containsPoint(r[n],a))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),a=0;4>a;a++)if(e=n[a],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;return this.intersectsWithRect(i,r,!0,t)?!0:this._containsCenterOfCanvas(i,r,t)},_containsCenterOfCanvas:function(t,e,i){var r={x:(t.x+e.x)/2,y:(t.y+e.y)/2};return this.containsPoint(r,null,!0,i)?!0:!1},isPartiallyOnScreen:function(t){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return this.intersectsWithRect(e,i,!0,t)?!0:this._containsCenterOfCanvas(e,i,t)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,a,s,o,c=0;for(var l in e)if(o=e[l],!(o.o.y=t.y&&o.d.y>=t.y||(o.o.x===o.d.x&&o.o.x>=t.x?s=o.o.x:(i=0,r=(o.d.y-o.o.y)/(o.d.x-o.o.x),n=t.y-i*t.x,a=o.o.y-r*o.o.x,s=-(n-a)/(i-r)),s>=t.x&&(c+=1),2!==c)))break;return c},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)t?-this.minScaleLimit:this.minScaleLimit:0===t?1e-4:t},scale:function(t){return this._set("scaleX",t),this._set("scaleY",t),this.setCoords()},scaleToWidth:function(t,e){var i=this.getBoundingRect(e).width/this.getScaledWidth();return this.scale(t/this.width/i)},scaleToHeight:function(t,e){var i=this.getBoundingRect(e).height/this.getScaledHeight();return this.scale(t/this.height/i)},calcCoords:function(t){var n=this._calcRotateMatrix(),a=this._calcTranslateMatrix(),s=i(a,n),o=this.getViewportTransform(),c=t?s:i(o,s),l=this._getTransformedDimensions(),h=l.x/2,u=l.y/2,f=r({x:-h,y:-u},c),d=r({x:h,y:-u},c),p=r({x:-h,y:u},c),g=r({x:h,y:u},c);if(!t){var m=this.padding,v=e(this.angle),b=fabric.util.cos(v),y=fabric.util.sin(v),w=b*m,C=y*m,x=w+C,_=w-C;m&&(f.x-=_,f.y-=x,d.x+=x,d.y-=_,p.x-=x,p.y+=_,g.x+=_,g.y+=x);var O=new fabric.Point((f.x+p.x)/2,(f.y+p.y)/2),k=new fabric.Point((d.x+f.x)/2,(d.y+f.y)/2),S=new fabric.Point((g.x+d.x)/2,(g.y+d.y)/2),F=new fabric.Point((g.x+p.x)/2,(g.y+p.y)/2),P=new fabric.Point(k.x+y*this.rotatingPointOffset,k.y-b*this.rotatingPointOffset)}var T={tl:f,tr:d,br:g,bl:p};return t||(T.ml=O,T.mt=k,T.mr=S,T.mb=F,T.mtr=P),T},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){return fabric.util.calcRotateMatrix(this)},_calcTranslateMatrix:function(){var t=this.getCenterPoint();return[1,0,0,1,t.x,t.y]},transformMatrixKey:function(t){var e="_",i="";return!t&&this.group&&(i=this.group.transformMatrixKey(t)+e),i+this.top+e+this.left+e+this.scaleX+e+this.scaleY+e+this.skewX+e+this.skewY+e+this.angle+e+this.originX+e+this.originY+e+this.width+e+this.height+e+this.strokeWidth+this.flipX+this.flipY},calcTransformMatrix:function(t){if(t)return this.calcOwnMatrix();var e=this.transformMatrixKey(),r=this.matrixCache||(this.matrixCache={});if(r.key===e)return r.value;var n=this.calcOwnMatrix();return this.group&&(n=i(this.group.calcTransformMatrix(),n)),r.key=e,r.value=n,n},calcOwnMatrix:function(){var t=this.transformMatrixKey(!0),e=this.ownMatrixCache||(this.ownMatrixCache={});if(e.key===t)return e.value;var i=this._calcTranslateMatrix();return this.translateX=i[4],this.translateY=i[5],e.key=t,e.value=fabric.util.composeMatrix(this),e.value},_calcDimensionsTransformMatrix:function(t,e,i){return fabric.util.calcDimensionsMatrix({skewX:t,skewY:e,scaleX:this.scaleX*(i&&this.flipX?-1:1),scaleY:this.scaleY*(i&&this.flipY?-1:1)})},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),a=0===t&&0===e;if(this.strokeUniform?(i=this.width,r=this.height):(i=n.x,r=n.y),a)return this._finalizeDimensions(i*this.scaleX,r*this.scaleY);i/=2,r/=2;var s=[{x:-i,y:-r},{x:i,y:-r},{x:-i,y:r},{x:i,y:r}],o=fabric.util.calcDimensionsMatrix({scaleX:this.scaleX,scaleY:this.scaleY,skewX:t,skewY:e}),c=fabric.util.makeBoundingBoxFromPoints(s,o);return this._finalizeDimensions(c.width,c.height)},_finalizeDimensions:function(t,e){return this.strokeUniform?{x:t+this.strokeWidth,y:e+this.strokeWidth}:{x:t,y:e}},_calculateCurrentDimensions:function(){var t=this.getViewportTransform(),e=this._getTransformedDimensions(),i=fabric.util.transformPoint(e,t,!0);return i.scalarAdd(2*this.padding)}})}();fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas&&this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas&&this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas&&this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas&&this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group&&"activeSelection"!==this.group.type?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas&&this.canvas.moveTo(this,t),this}});!function(){function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new fabric.Color(e),r=t+": "+i.toRgb()+"; ",n=i.getAlpha();return 1!==n&&(r+=t+"-opacity: "+n.toString()+"; "),r}return t+": none; "}var e=fabric.util.toFixed;fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule?this.fillRule:"nonzero",r=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):"none",s=this.strokeDashOffset?this.strokeDashOffset:"0",a=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",c=this.strokeMiterLimit?this.strokeMiterLimit:"4",l="undefined"!=typeof this.opacity?this.opacity:"1",h=this.visible?"":" visibility: hidden;",u=e?"":this.getSvgFilter(),f=t("fill",this.fill),d=t("stroke",this.stroke);return[d,"stroke-width: ",r,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",a,"; ","stroke-dashoffset: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",c,"; ",f,"fill-rule: ",i,"; ","opacity: ",l,";",u,h].join("")},getSvgSpanStyles:function(e,i){var r="; ",n=e.fontFamily?"font-family: "+(-1===e.fontFamily.indexOf("'")&&-1===e.fontFamily.indexOf('"')?"'"+e.fontFamily+"'":e.fontFamily)+r:"",s=e.strokeWidth?"stroke-width: "+e.strokeWidth+r:"",n=n,a=e.fontSize?"font-size: "+e.fontSize+"px"+r:"",o=e.fontStyle?"font-style: "+e.fontStyle+r:"",c=e.fontWeight?"font-weight: "+e.fontWeight+r:"",l=e.fill?t("fill",e.fill):"",h=e.stroke?t("stroke",e.stroke):"",u=this.getSvgTextDecoration(e),f=e.deltaY?"baseline-shift: "+-e.deltaY+"; ":"";return u&&(u="text-decoration: "+u+r),[h,s,n,a,o,c,u,l,f,i?"white-space: pre; ":""].join("")},getSvgTextDecoration:function(t){return["overline","underline","line-through"].filter(function(e){return t[e.replace("-","")]}).join(" ")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgCommons:function(){return[this.id?'id="'+this.id+'" ':"",this.clipPath?'clip-path="url(#'+this.clipPath.clipPathId+')" ':""].join("")},getSvgTransform:function(t,e){var i=t?this.calcTransformMatrix():this.calcOwnMatrix(),r='transform="'+fabric.util.matrixToSVG(i);return r+(e||"")+this.getSvgTransformMatrix()+'" '},getSvgTransformMatrix:function(){return this.transformMatrix?" "+fabric.util.matrixToSVG(this.transformMatrix):""},_setSVGBg:function(t){if(this.backgroundColor){var i=fabric.Object.NUM_FRACTION_DIGITS;t.push(" \n')}},toSVG:function(t){return this._createBaseSVGMarkup(this._toSVG(t),{reviver:t})},toClipPathSVG:function(t){return" "+this._createBaseClipPathSVGMarkup(this._toSVG(t),{reviver:t})},_createBaseClipPathSVGMarkup:function(t,e){e=e||{};var i=e.reviver,r=e.additionalTransform||"",n=[this.getSvgTransform(!0,r),this.getSvgCommons()].join(""),s=t.indexOf("COMMON_PARTS");return t[s]=n,i?i(t.join("")):t.join("")},_createBaseSVGMarkup:function(t,e){e=e||{};var i,r,n=e.noStyle,s=e.reviver,a=n?"":'style="'+this.getSvgStyles()+'" ',o=e.withShadow?'style="'+this.getSvgFilter()+'" ':"",c=this.clipPath,l=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",h=c&&c.absolutePositioned,u=this.stroke,f=this.fill,d=this.shadow,p=[],g=t.indexOf("COMMON_PARTS"),v=e.additionalTransform;return c&&(c.clipPathId="CLIPPATH_"+fabric.Object.__uid++,r='\n'+c.toClipPathSVG(s)+"\n"),h&&p.push("\n"),p.push("\n"),i=[a,l,n?"":this.addPaintOrder()," ",v?'transform="'+v+'" ':""].join(""),t[g]=i,f&&f.toLive&&p.push(f.toSVG(this)),u&&u.toLive&&p.push(u.toSVG(this)),d&&p.push(d.toSVG(this)),c&&p.push(r),p.push(t.join("")),p.push("\n"),h&&p.push("\n"),s?s(p.join("")):p.join("")},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}();!function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i,r){if(t===i)return!0;if(Array.isArray(t)){if(!Array.isArray(i)||t.length!==i.length)return!1;for(var n=0,s=t.length;s>n;n++)if(!e(t[n],i[n]))return!1;return!0}if(t&&"object"==typeof t){var a,o=Object.keys(t);if(!i||"object"!=typeof i||!r&&o.length!==Object.keys(i).length)return!1;for(var n=0,s=o.length;s>n;n++)if(a=o[n],"canvas"!==a&&!e(t[a],i[a]))return!1;return!0}}var i=fabric.util.object.extend,r="stateProperties";fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(t){t=t||r;var i="_"+t;return Object.keys(this[i]).lengthr;r++)t=i[r],e=r!==n-1,this._animate(t,arguments[0][t],arguments[1],e)}else this._animate.apply(this,arguments);return this},_animate:function(t,e,i,r){var n,a=this;e=e.toString(),i=i?fabric.util.object.clone(i):{},~t.indexOf(".")&&(n=t.split("."));var s=n?this.get(n[0])[n[1]]:this.get(t);"from"in i||(i.from=s),e=~e.indexOf("=")?s+parseFloat(e.replace("=","")):parseFloat(e),fabric.util.animate({startValue:i.from,endValue:e,byValue:i.by,easing:i.easing,duration:i.duration,abort:i.abort&&function(){return i.abort.call(a)},onChange:function(e,s,o){n?a[n[0]][n[1]]=e:a.set(t,e),r||i.onChange&&i.onChange(e,s,o)},onComplete:function(t,e,n){r||(a.setCoords(),i.onComplete&&i.onComplete(t,e,n))}})}});!function(t){"use strict";function e(t,e){var i=t.origin,r=t.axis1,n=t.axis2,s=t.dimension,a=e.nearest,o=e.center,c=e.farthest;return function(){switch(this.get(i)){case a:return Math.min(this.get(r),this.get(n));case o:return Math.min(this.get(r),this.get(n))+.5*this.get(s);case c:return Math.max(this.get(r),this.get(n))}}}var i=t.fabric||(t.fabric={}),r=i.util.object.extend,n=i.util.object.clone,s={x1:1,x2:1,y1:1,y2:1},a=i.StaticCanvas.supports("setLineDash");return i.Line?void i.warn("fabric.Line is already defined"):(i.Line=i.util.createClass(i.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:i.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(t,e){t||(t=[0,0,0,0]),this.callSuper("initialize",e),this.set("x1",t[0]),this.set("y1",t[1]),this.set("x2",t[2]),this.set("y2",t[3]),this._setWidthHeight(e)},_setWidthHeight:function(t){t||(t={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in t?t.left:this._getLeftToOriginX(),this.top="top"in t?t.top:this._getTopToOriginY()},_set:function(t,e){return this.callSuper("_set",t,e),"undefined"!=typeof s[t]&&this._setWidthHeight(),this},_getLeftToOriginX:e({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:e({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(t){if(t.beginPath(),!this.strokeDashArray||this.strokeDashArray&&a){var e=this.calcLinePoints();t.moveTo(e.x1,e.y1),t.lineTo(e.x2,e.y2)}t.lineWidth=this.strokeWidth;var i=t.strokeStyle;t.strokeStyle=this.stroke||t.fillStyle,this.stroke&&this._renderStroke(t),t.strokeStyle=i},_renderDashedStroke:function(t){var e=this.calcLinePoints();t.beginPath(),i.util.drawDashedLine(t,e.x1,e.y1,e.x2,e.y2,this.strokeDashArray),t.closePath()},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(t){return r(this.callSuper("toObject",t),this.calcLinePoints())},_getNonTransformedDimensions:function(){var t=this.callSuper("_getNonTransformedDimensions");return"butt"===this.strokeLineCap&&(0===this.width&&(t.y-=this.strokeWidth),0===this.height&&(t.x-=this.strokeWidth)),t},calcLinePoints:function(){var t=this.x1<=this.x2?-1:1,e=this.y1<=this.y2?-1:1,i=t*this.width*.5,r=e*this.height*.5,n=t*this.width*-.5,s=e*this.height*-.5;return{x1:i,x2:n,y1:r,y2:s}},_toSVG:function(){var t=this.calcLinePoints();return["\n']}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e,n){n=n||{};var s=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),a=[s.x1||0,s.y1||0,s.x2||0,s.y2||0];e(new i.Line(a,r(s,n)))},void(i.Line.fromObject=function(t,e){function r(t){delete t.points,e&&e(t)}var s=n(t,!0);s.points=[t.x1,t.y1,t.x2,t.y2],i.Object._fromObject("Line",s,r,"points")}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI;return i.Circle?void i.warn("fabric.Circle is already defined."):(i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:i.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},_toSVG:function(){var t,e=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)t=["\n'];else{var a=i.util.cos(this.startAngle)*this.radius,o=i.util.sin(this.startAngle)*this.radius,c=i.util.cos(this.endAngle)*this.radius,l=i.util.sin(this.endAngle)*this.radius,h=s>r?"1":"0";t=['\n"]}return t},_render:function(t){t.beginPath(),t.arc(0,0,this.radius,this.startAngle,this.endAngle,!1),this._renderPaintInOrder(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){var n=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(n))throw new Error("value of `r` attribute is required and can not be negative");n.left=(n.left||0)-n.radius,n.top=(n.top||0)-n.radius,r(new i.Circle(n))},void(i.Circle.fromObject=function(t,e){return i.Object._fromObject("Circle",t,e)}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",width:100,height:100,_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderPaintInOrder(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},_toSVG:function(){var t=this.width/2,e=this.height/2,i=[-t+" "+e,"0 "+-e,t+" "+e].join(",");return["']}}),void(e.Triangle.fromObject=function(t,i){return e.Object._fromObject("Triangle",t,i)}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI;return e.Ellipse?void e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},_toSVG:function(){return["\n']},_render:function(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,0,this.rx,0,i,!1),t.restore(),this._renderPaintInOrder(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){var r=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);r.left=(r.left||0)-r.rx,r.top=(r.top||0)-r.ry,i(new e.Ellipse(r))},void(e.Ellipse.fromObject=function(t,i){return e.Object._fromObject("Ellipse",t,i)}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;return e.Rect?void e.warn("fabric.Rect is already defined"):(e.Rect=e.util.createClass(e.Object,{stateProperties:e.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t){var e=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,s=-this.width/2,a=-this.height/2,o=0!==e||0!==i,c=.4477152502;t.beginPath(),t.moveTo(s+e,a),t.lineTo(s+r-e,a),o&&t.bezierCurveTo(s+r-c*e,a,s+r,a+c*i,s+r,a+i),t.lineTo(s+r,a+n-i),o&&t.bezierCurveTo(s+r,a+n-c*i,s+r-c*e,a+n,s+r-e,a+n),t.lineTo(s+e,a+n),o&&t.bezierCurveTo(s+c*e,a+n,s,a+n-c*i,s,a+n-i),t.lineTo(s,a+i),o&&t.bezierCurveTo(s,a+c*i,s+c*e,a,s+e,a),t.closePath(),this._renderPaintInOrder(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},_toSVG:function(){var t=-this.width/2,e=-this.height/2;return["\n']}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r,n){if(!t)return r(null);n=n||{};var s=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);s.left=s.left||0,s.top=s.top||0,s.height=s.height||0,s.width=s.width||0;var a=new e.Rect(i(n?e.util.object.clone(n):{},s));a.visible=a.visible&&a.width>0&&a.height>0,r(a)},void(e.Rect.fromObject=function(t,i){return e.Object._fromObject("Rect",t,i)}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed;return e.Polyline?void e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,cacheProperties:e.Object.prototype.cacheProperties.concat("points"),initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._setPositionDimensions(e)},_setPositionDimensions:function(t){var e,i=this._calcDimensions(t);this.width=i.width,this.height=i.height,t.fromSVG||(e=this.translateToGivenOrigin({x:i.left-this.strokeWidth/2,y:i.top-this.strokeWidth/2},"left","top",this.originX,this.originY)),"undefined"==typeof t.left&&(this.left=t.fromSVG?i.left:e.x),"undefined"==typeof t.top&&(this.top=t.fromSVG?i.top:e.y),this.pathOffset={x:i.left+this.width/2,y:i.top+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x")||0,i=r(t,"y")||0,s=n(t,"x")||0,a=n(t,"y")||0,o=s-e,c=a-i;return{left:e,top:i,width:o,height:c}},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},_toSVG:function(){for(var t=[],i=this.pathOffset.x,r=this.pathOffset.y,n=e.Object.NUM_FRACTION_DIGITS,a=0,o=this.points.length;o>a;a++)t.push(s(this.points[a].x-i,n),",",s(this.points[a].y-r,n)," ");return["<"+this.type+" ","COMMON_PARTS",'points="',t.join(""),'" />\n']},commonRender:function(t){var e,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-r,this.points[0].y-n);for(var s=0;i>s;s++)e=this.points[s],t.lineTo(e.x-r,e.y-n);return!0},_render:function(t){this.commonRender(t)&&this._renderPaintInOrder(t)},_renderDashedStroke:function(t){var i,r;t.beginPath();for(var n=0,s=this.points.length;s>n;n++)i=this.points[n],r=this.points[n+1]||i,e.util.drawDashedLine(t,i.x,i.y,r.x,r.y,this.strokeDashArray)},complexity:function(){return this.get("points").length}}),e.Polyline.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat(),e.Polyline.fromElementGenerator=function(t){return function(r,n,s){if(!r)return n(null);s||(s={});var a=e.parsePointsAttribute(r.getAttribute("points")),o=e.parseAttributes(r,e[t].ATTRIBUTE_NAMES);o.fromSVG=!0,n(new e[t](a,i(o,s)))}},e.Polyline.fromElement=e.Polyline.fromElementGenerator("Polyline"),void(e.Polyline.fromObject=function(t,i){return e.Object._fromObject("Polyline",t,i,"points")}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Polygon?void e.warn("fabric.Polygon is already defined"):(e.Polygon=e.util.createClass(e.Polyline,{type:"polygon",_render:function(t){this.commonRender(t)&&(t.closePath(),this._renderPaintInOrder(t))},_renderDashedStroke:function(t){this.callSuper("_renderDashedStroke",t),t.closePath()}}),e.Polygon.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat(),e.Polygon.fromElement=e.Polyline.fromElementGenerator("Polygon"),void(e.Polygon.fromObject=function(t,i){return e.Object._fromObject("Polygon",t,i,"points")}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.array.min,r=e.util.array.max,n=e.util.object.extend,s=Object.prototype.toString,a=e.util.drawArc,o=e.util.toFixed,c={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},h={m:"l",M:"L"};return e.Path?void e.warn("fabric.Path is already defined"):(e.Path=e.util.createClass(e.Object,{type:"path",path:null,cacheProperties:e.Object.prototype.cacheProperties.concat("path","fillRule"),stateProperties:e.Object.prototype.stateProperties.concat("path"),initialize:function(t,i){i=i||{},this.callSuper("initialize",i),t||(t=[]);var r="[object Array]"===s.call(t);this.path=r?t:t.match&&t.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi),this.path&&(r||(this.path=this._parsePath()),e.Polyline.prototype._setPositionDimensions.call(this,i))},_renderPathCommands:function(t){var e,i,r,n=null,s=0,o=0,c=0,h=0,l=0,u=0,f=-this.pathOffset.x,d=-this.pathOffset.y;t.beginPath();for(var p=0,g=this.path.length;g>p;++p){switch(e=this.path[p],e[0]){case"l":c+=e[1],h+=e[2],t.lineTo(c+f,h+d);break;case"L":c=e[1],h=e[2],t.lineTo(c+f,h+d);break;case"h":c+=e[1],t.lineTo(c+f,h+d);break;case"H":c=e[1],t.lineTo(c+f,h+d);break;case"v":h+=e[1],t.lineTo(c+f,h+d);break;case"V":h=e[1],t.lineTo(c+f,h+d);break;case"m":c+=e[1],h+=e[2],s=c,o=h,t.moveTo(c+f,h+d);break;case"M":c=e[1],h=e[2],s=c,o=h,t.moveTo(c+f,h+d);break;case"c":i=c+e[5],r=h+e[6],l=c+e[3],u=h+e[4],t.bezierCurveTo(c+e[1]+f,h+e[2]+d,l+f,u+d,i+f,r+d),c=i,h=r;break;case"C":c=e[5],h=e[6],l=e[3],u=e[4],t.bezierCurveTo(e[1]+f,e[2]+d,l+f,u+d,c+f,h+d);break;case"s":i=c+e[3],r=h+e[4],null===n[0].match(/[CcSs]/)?(l=c,u=h):(l=2*c-l,u=2*h-u),t.bezierCurveTo(l+f,u+d,c+e[1]+f,h+e[2]+d,i+f,r+d),l=c+e[1],u=h+e[2],c=i,h=r;break;case"S":i=e[3],r=e[4],null===n[0].match(/[CcSs]/)?(l=c,u=h):(l=2*c-l,u=2*h-u),t.bezierCurveTo(l+f,u+d,e[1]+f,e[2]+d,i+f,r+d),c=i,h=r,l=e[1],u=e[2];break;case"q":i=c+e[3],r=h+e[4],l=c+e[1],u=h+e[2],t.quadraticCurveTo(l+f,u+d,i+f,r+d),c=i,h=r;break;case"Q":i=e[3],r=e[4],t.quadraticCurveTo(e[1]+f,e[2]+d,i+f,r+d),c=i,h=r,l=e[1],u=e[2];break;case"t":i=c+e[1],r=h+e[2],null===n[0].match(/[QqTt]/)?(l=c,u=h):(l=2*c-l,u=2*h-u),t.quadraticCurveTo(l+f,u+d,i+f,r+d),c=i,h=r;break;case"T":i=e[1],r=e[2],null===n[0].match(/[QqTt]/)?(l=c,u=h):(l=2*c-l,u=2*h-u),t.quadraticCurveTo(l+f,u+d,i+f,r+d),c=i,h=r;break;case"a":a(t,c+f,h+d,[e[1],e[2],e[3],e[4],e[5],e[6]+c+f,e[7]+h+d]),c+=e[6],h+=e[7];break;case"A":a(t,c+f,h+d,[e[1],e[2],e[3],e[4],e[5],e[6]+f,e[7]+d]),c=e[6],h=e[7];break;case"z":case"Z":c=s,h=o,t.closePath()}n=e}},_render:function(t){this._renderPathCommands(t),this._renderPaintInOrder(t)},toString:function(){return"#"},toObject:function(t){return n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()})})},toDatalessObject:function(t){var e=this.toObject(["sourcePath"].concat(t));return e.sourcePath&&delete e.path,e},_toSVG:function(){var t=this.path.map(function(t){return t.join(" ")}).join(" ");return["\n"]},_getOffsetTransform:function(){var t=e.Object.NUM_FRACTION_DIGITS;return" translate("+o(-this.pathOffset.x,t)+", "+o(-this.pathOffset.y,t)+")"},toClipPathSVG:function(t){var e=this._getOffsetTransform();return" "+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})},toSVG:function(t){var e=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})},complexity:function(){return this.path.length},_parsePath:function(){for(var t,i,r,n,s,a=[],o=[],l=e.rePathCommand,u=0,f=this.path.length;f>u;u++){for(t=this.path[u],n=t.slice(1).trim(),o.length=0;r=l.exec(n);)o.push(r[0]);s=[t.charAt(0)];for(var d=0,p=o.length;p>d;d++)i=parseFloat(o[d]),isNaN(i)||s.push(i);var g=s[0],b=c[g.toLowerCase()],v=h[g]||g;if(s.length-1>b)for(var m=1,y=s.length;y>m;m+=b)a.push([g].concat(s.slice(m,m+b))),g=v;else a.push(s)}return a},_calcDimensions:function(){for(var t,n,s,a,o=[],c=[],h=null,l=0,u=0,f=0,d=0,p=0,g=0,b=0,v=this.path.length;v>b;++b){switch(t=this.path[b],t[0]){case"l":f+=t[1],d+=t[2],a=[];break;case"L":f=t[1],d=t[2],a=[];break;case"h":f+=t[1],a=[];break;case"H":f=t[1],a=[];break;case"v":d+=t[1],a=[];break;case"V":d=t[1],a=[];break;case"m":f+=t[1],d+=t[2],l=f,u=d,a=[];break;case"M":f=t[1],d=t[2],l=f,u=d,a=[];break;case"c":n=f+t[5],s=d+t[6],p=f+t[3],g=d+t[4],a=e.util.getBoundsOfCurve(f,d,f+t[1],d+t[2],p,g,n,s),f=n,d=s;break;case"C":p=t[3],g=t[4],a=e.util.getBoundsOfCurve(f,d,t[1],t[2],p,g,t[5],t[6]),f=t[5],d=t[6];break;case"s":n=f+t[3],s=d+t[4],null===h[0].match(/[CcSs]/)?(p=f,g=d):(p=2*f-p,g=2*d-g),a=e.util.getBoundsOfCurve(f,d,p,g,f+t[1],d+t[2],n,s),p=f+t[1],g=d+t[2],f=n,d=s;break;case"S":n=t[3],s=t[4],null===h[0].match(/[CcSs]/)?(p=f,g=d):(p=2*f-p,g=2*d-g),a=e.util.getBoundsOfCurve(f,d,p,g,t[1],t[2],n,s),f=n,d=s,p=t[1],g=t[2];break;case"q":n=f+t[3],s=d+t[4],p=f+t[1],g=d+t[2],a=e.util.getBoundsOfCurve(f,d,p,g,p,g,n,s),f=n,d=s;break;case"Q":p=t[1],g=t[2],a=e.util.getBoundsOfCurve(f,d,p,g,p,g,t[3],t[4]),f=t[3],d=t[4];break;case"t":n=f+t[1],s=d+t[2],null===h[0].match(/[QqTt]/)?(p=f,g=d):(p=2*f-p,g=2*d-g),a=e.util.getBoundsOfCurve(f,d,p,g,p,g,n,s),f=n,d=s;break;case"T":n=t[1],s=t[2],null===h[0].match(/[QqTt]/)?(p=f,g=d):(p=2*f-p,g=2*d-g),a=e.util.getBoundsOfCurve(f,d,p,g,p,g,n,s),f=n,d=s;break;case"a":a=e.util.getBoundsOfArc(f,d,t[1],t[2],t[3],t[4],t[5],t[6]+f,t[7]+d),f+=t[6],d+=t[7];break;case"A":a=e.util.getBoundsOfArc(f,d,t[1],t[2],t[3],t[4],t[5],t[6],t[7]),f=t[6],d=t[7];break;case"z":case"Z":f=l,d=u}h=t,a.forEach(function(t){o.push(t.x),c.push(t.y)}),o.push(f),c.push(d)}var m=i(o)||0,y=i(c)||0,C=r(o)||0,x=r(c)||0,w=C-m,_=x-y;return{left:m,top:y,width:w,height:_}}}),e.Path.fromObject=function(t,i){if("string"==typeof t.sourcePath){var r=t.sourcePath;e.loadSVGFromURL(r,function(e){var r=e[0];r.setOptions(t),i&&i(r)})}else e.Object._fromObject("Path",t,i,"path")},e.Path.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat(["d"]),void(e.Path.fromElement=function(t,i,r){var s=e.parseAttributes(t,e.Path.ATTRIBUTE_NAMES);s.fromSVG=!0,i(new e.Path(s.d,n(s,r)))}))}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.array.min,r=e.util.array.max;e.Group||(e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],useSetOnGroup:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;if(i)this._updateObjectsACoords();else{var n=e&&e.centerPoint;void 0!==e.originX&&(this.originX=e.originX),void 0!==e.originY&&(this.originY=e.originY),n||this._calcBounds(),this._updateObjectsCoords(n),delete e.centerPoint,this.callSuper("initialize",e)}this.setCoords()},_updateObjectsACoords:function(){for(var t=!0,e=!0,i=this._objects.length;i--;)this._objects[i].setCoords(t,e)},_updateObjectsCoords:function(t){for(var t=t||this.getCenterPoint(),e=this._objects.length;e--;)this._updateObjectCoords(this._objects[e],t)},_updateObjectCoords:function(t,e){var i=t.left,r=t.top,n=!0,s=!0;t.set({left:i-e.x,top:r-e.y}),t.group=this,t.setCoords(n,s)},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,i){var r=this._objects.length;if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(t,i);if("canvas"===t)for(;r--;)this._objects[r]._set(t,i);e.Object.prototype._set.call(this,t,i)},toObject:function(t){var i=this.includeDefaultValues,r=this._objects.map(function(e){var r=e.includeDefaultValues;e.includeDefaultValues=i;var n=e.toObject(t);return e.includeDefaultValues=r,n}),n=e.Object.prototype.toObject.call(this,t);return n.objects=r,n},toDatalessObject:function(t){var i,r=this.sourcePath;if(r)i=r;else{var n=this.includeDefaultValues;i=this._objects.map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=n;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r})}var s=e.Object.prototype.toDatalessObject.call(this,t);return s.objects=i,s},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=e.Object.prototype.shouldCache.call(this);if(t)for(var i=0,r=this._objects.length;r>i;i++)if(this._objects[i].willDrawShadow())return this.ownCaching=!1,!1;return t},willDrawShadow:function(){if(e.Object.prototype.willDrawShadow.call(this))return!0;for(var t=0,i=this._objects.length;i>t;t++)if(this._objects[t].willDrawShadow())return!0;return!1},isOnACache:function(){return this.ownCaching||this.group&&this.group.isOnACache()},drawObject:function(t){for(var e=0,i=this._objects.length;i>e;e++)this._objects[e].render(t);this._drawClipPath(t)},isCacheDirty:function(t){if(this.callSuper("isCacheDirty",t))return!0;if(!this.statefullCache)return!1;for(var e=0,i=this._objects.length;i>e;e++)if(this._objects[e].isCacheDirty(!0)){if(this._cacheCanvas){var r=this.cacheWidth/this.zoomX,n=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-r/2,-n/2,r,n)}return!0}return!1},_restoreObjectsState:function(){return this._objects.forEach(this._restoreObjectState,this),this},realizeTransform:function(t){var i=t.calcTransformMatrix(),r=e.util.qrDecompose(i),n=new e.Point(r.translateX,r.translateY);return t.flipX=!1,t.flipY=!1,t.set("scaleX",r.scaleX),t.set("scaleY",r.scaleY),t.skewX=r.skewX,t.skewY=r.skewY,t.angle=r.angle,t.setPositionByOrigin(n,"center","center"),t},_restoreObjectState:function(t){return this.realizeTransform(t),t.setCoords(),delete t.group,this},destroy:function(){return this._objects.forEach(function(t){t.set("dirty",!0)}),this._restoreObjectsState()},toActiveSelection:function(){if(this.canvas){var t=this._objects,i=this.canvas;this._objects=[];var r=this.toObject();delete r.objects;var n=new e.ActiveSelection([]);return n.set(r),n.type="activeSelection",i.remove(this),t.forEach(function(t){t.group=n,t.dirty=!0,i.add(t)}),n.canvas=i,n._objects=t,i._activeObject=n,n.setCoords(),n}},ungroupOnCanvas:function(){return this._restoreObjectsState()},setObjectsCoords:function(){var t=!0,e=!0;return this.forEachObject(function(i){i.setCoords(t,e)}),this},_calcBounds:function(t){for(var e,i,r,n=[],s=[],a=["tr","br","bl","tl"],o=0,c=this._objects.length,h=a.length,l=!0;c>o;++o)for(e=this._objects[o],e.setCoords(l),r=0;h>r;r++)i=a[r],n.push(e.oCoords[i].x),s.push(e.oCoords[i].y);this._getBounds(n,s,t)},_getBounds:function(t,n,s){var a=new e.Point(i(t),i(n)),o=new e.Point(r(t),r(n)),c=a.y||0,h=a.x||0,l=o.x-a.x||0,u=o.y-a.y||0;this.width=l,this.height=u,s||this.setPositionByOrigin({x:h,y:c},"left","top")},_toSVG:function(t){for(var e=["\n"],i=0,r=this._objects.length;r>i;i++)e.push(" ",this._objects[i].toSVG(t));return e.push("\n"),e},getSvgStyles:function(){var t="undefined"!=typeof this.opacity&&1!==this.opacity?"opacity: "+this.opacity+";":"",e=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),e].join("")},toClipPathSVG:function(t){for(var e=[],i=0,r=this._objects.length;r>i;i++)e.push(" ",this._objects[i].toClipPathSVG(t));return this._createBaseClipPathSVGMarkup(e,{reviver:t})}}),e.Group.fromObject=function(t,i){var r=t.objects,n=e.util.object.clone(t,!0);return delete n.objects,"string"==typeof r?void e.loadSVGFromURL(r,function(s){var a=e.util.groupSVGElements(s,t,r);a.set(n),i&&i(a)}):void e.util.enlivenObjects(r,function(r){e.util.enlivenObjects([t.clipPath],function(n){var s=e.util.object.clone(t,!0);s.clipPath=n[0],delete s.objects,i&&i(new e.Group(r,s,!0))})})})}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={});e.ActiveSelection||(e.ActiveSelection=e.util.createClass(e.Group,{type:"activeSelection",initialize:function(t,i){i=i||{},this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;i.originX&&(this.originX=i.originX),i.originY&&(this.originY=i.originY),this._calcBounds(),this._updateObjectsCoords(),e.Object.prototype.initialize.call(this,i),this.setCoords()},toGroup:function(){var t=this._objects.concat();this._objects=[];var i=e.Object.prototype.toObject.call(this),r=new e.Group([]);if(delete i.type,r.set(i),t.forEach(function(t){t.canvas.remove(t),t.group=r}),r._objects=t,!this.canvas)return r;var n=this.canvas;return n.add(r),n._activeObject=r,r.setCoords(),r},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(t,e,i){t.save(),t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",t,e),i=i||{},"undefined"==typeof i.hasControls&&(i.hasControls=!1),"undefined"==typeof i.hasRotatingPoint&&(i.hasRotatingPoint=!1),i.forActiveSelection=!0;for(var r=0,n=this._objects.length;n>r;r++)this._objects[r]._renderControls(t,i);t.restore()}}),e.ActiveSelection.fromObject=function(t,i){e.util.enlivenObjects(t.objects,function(r){delete t.objects,i&&i(new e.ActiveSelection(r,t,!0))})})}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=fabric.util.object.extend;return t.fabric||(t.fabric={}),t.fabric.Image?void fabric.warn("fabric.Image is already defined."):(fabric.Image=fabric.util.createClass(fabric.Object,{type:"image",crossOrigin:"",strokeWidth:0,srcFromAttribute:!1,_lastScaleX:1,_lastScaleY:1,_filterScalingX:1,_filterScalingY:1,minimumScaleTrigger:.5,stateProperties:fabric.Object.prototype.stateProperties.concat("cropX","cropY"),cacheKey:"",cropX:0,cropY:0,initialize:function(t,e){e||(e={}),this.filters=[],this.cacheKey="texture"+fabric.Object.__uid++,this.callSuper("initialize",e),this._initElement(t,e)},getElement:function(){return this._element||{}},setElement:function(t,e){return this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._element=t,this._originalElement=t,this._initConfig(e),0!==this.filters.length&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters(),this},removeTexture:function(t){var e=fabric.filterBackend;e&&e.evictCachesForKey&&e.evictCachesForKey(t)},dispose:function(){this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._cacheContext=void 0,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach(function(t){fabric.util.cleanUpJsdomNode(this[t]),this[t]=void 0}.bind(this))},setCrossOrigin:function(t){return this.crossOrigin=t,this._element.crossOrigin=t,this},getOriginalSize:function(){var t=this.getElement();return{width:t.naturalWidth||t.width,height:t.naturalHeight||t.height}},_stroke:function(t){if(this.stroke&&0!==this.strokeWidth){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,-i),t.lineTo(e,-i),t.lineTo(e,i),t.lineTo(-e,i),t.lineTo(-e,-i),t.closePath()}},_renderDashedStroke:function(t){var e=-this.width/2,i=-this.height/2,r=this.width,n=this.height;t.save(),this._setStrokeStyles(t,this),t.beginPath(),fabric.util.drawDashedLine(t,e,i,e+r,i,this.strokeDashArray),fabric.util.drawDashedLine(t,e+r,i,e+r,i+n,this.strokeDashArray),fabric.util.drawDashedLine(t,e+r,i+n,e,i+n,this.strokeDashArray),fabric.util.drawDashedLine(t,e,i+n,e,i,this.strokeDashArray),t.closePath(),t.restore()},toObject:function(t){var i=[];this.filters.forEach(function(t){t&&i.push(t.toObject())});var r=e(this.callSuper("toObject",["crossOrigin","cropX","cropY"].concat(t)),{src:this.getSrc(),filters:i});return this.resizeFilter&&(r.resizeFilter=this.resizeFilter.toObject()),r},hasCrop:function(){return this.cropX||this.cropY||this.width\n',' \n',"\n"),s=' clip-path="url(#imageCrop_'+a+')" '}if(i.push(" \n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,t=[" \n'],this.fill=o}return e="fill"!==this.paintFirst?e.concat(t,i):e.concat(i,t)},getSrc:function(t){var e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():this.srcFromAttribute?e.getAttribute("src"):e.src:this.src||""},setSrc:function(t,e,i){return fabric.util.loadImage(t,function(t){this.setElement(t,i),this._setWidthHeight(),e&&e(this)},this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var t=this.resizeFilter,e=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),r=i.scaleX,n=i.scaleY,s=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!t||r>e&&n>e)return this._element=s,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=r,void(this._lastScaleY=n);fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend());var a=fabric.util.createCanvasElement(),o=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,c=s.width,h=s.height;a.width=c,a.height=h,this._element=a,this._lastScaleX=t.scaleX=r,this._lastScaleY=t.scaleY=n,fabric.filterBackend.applyFilters([t],s,c,h,this._element,o),this._filterScalingX=a.width/this._originalElement.width,this._filterScalingY=a.height/this._originalElement.height},applyFilters:function(t){if(t=t||this.filters||[],t=t.filter(function(t){return t&&!t.isNeutralState()}),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),0===t.length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var e=this._originalElement,i=e.naturalWidth||e.width,r=e.naturalHeight||e.height;if(this._element===this._originalElement){var n=fabric.util.createCanvasElement();n.width=i,n.height=r,this._element=n,this._filteredEl=n}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,r),this._lastScaleX=1,this._lastScaleY=1;return fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend()),fabric.filterBackend.applyFilters(t,this._originalElement,i,r,this._element,this.cacheKey),(this._originalElement.width!==this._element.width||this._originalElement.height!==this._element.height)&&(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(t){this.isMoving!==!0&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(t),this._renderPaintInOrder(t)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(t){var e=this._element;if(e){var i=this._filterScalingX,r=this._filterScalingY,n=this.width,s=this.height,a=Math.min,o=Math.max,c=o(this.cropX,0),h=o(this.cropY,0),l=e.naturalWidth||e.width,u=e.naturalHeight||e.height,f=c*i,d=h*r,p=a(n*i,l-f),g=a(s*r,u-d),b=-n/2,v=-s/2,m=a(n,l/i-c),y=a(s,u/i-h);e&&t.drawImage(e,f,d,p,g,b,v,m,y)}},_needsResize:function(){var t=this.getTotalObjectScaling();return t.scaleX!==this._lastScaleX||t.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(t,e){this.setElement(fabric.util.getById(t),e),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(t,e){t&&t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){t||(t={});var e=this.getElement();this.width=t.width||e.naturalWidth||e.width||0,this.height=t.height||e.naturalHeight||e.height||0},parsePreserveAspectRatioAttribute:function(){var t,e=fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,s=1,a=0,o=0,c=0,h=0,l=this.width,u=this.height,f={width:l,height:u};return!e||"none"===e.alignX&&"none"===e.alignY?(n=l/i,s=u/r):("meet"===e.meetOrSlice&&(n=s=fabric.util.findScaleToFit(this._element,f),t=(l-i*n)/2,"Min"===e.alignX&&(a=-t),"Max"===e.alignX&&(a=t),t=(u-r*s)/2,"Min"===e.alignY&&(o=-t),"Max"===e.alignY&&(o=t)),"slice"===e.meetOrSlice&&(n=s=fabric.util.findScaleToCover(this._element,f),t=i-l/n,"Mid"===e.alignX&&(c=t/2),"Max"===e.alignX&&(c=t),t=r-u/s,"Mid"===e.alignY&&(h=t/2),"Max"===e.alignY&&(h=t),i=l/n,r=u/s)),{width:i,height:r,scaleX:n,scaleY:s,offsetLeft:a,offsetTop:o,cropX:c,cropY:h}}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(t,e){var i=fabric.util.object.clone(t);fabric.util.loadImage(i.src,function(t,r){return r?void(e&&e(null,r)):void fabric.Image.prototype._initFilters.call(i,i.filters,function(r){i.filters=r||[],fabric.Image.prototype._initFilters.call(i,[i.resizeFilter],function(r){i.resizeFilter=r[0],fabric.util.enlivenObjects([i.clipPath],function(r){i.clipPath=r[0];var n=new fabric.Image(t,i);e(n)})})})},null,i.crossOrigin)},fabric.Image.fromURL=function(t,e,i){fabric.util.loadImage(t,function(t){e&&e(new fabric.Image(t,i))},null,i&&i.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin".split(" ")),void(fabric.Image.fromElement=function(t,i,r){var n=fabric.parseAttributes(t,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(n["xlink:href"],i,e(r?fabric.util.object.clone(r):{},n))}))}("undefined"!=typeof exports?exports:this);fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.angle%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.rotate(t),r()},onComplete:function(){n.setCoords(),i()}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.requestRenderAllBound}),this}});function resizeCanvasIfNeeded(t){var e=t.targetCanvas,i=e.width,r=e.height,n=t.destinationWidth,s=t.destinationHeight;(i!==n||r!==s)&&(e.width=n,e.height=s)}function copyGLTo2DDrawImage(t,e){var i=t.canvas,r=e.targetCanvas,n=r.getContext("2d");n.translate(0,r.height),n.scale(1,-1);var s=i.height-r.height;n.drawImage(i,0,s,r.width,r.height,0,0,r.width,r.height)}function copyGLTo2DPutImageData(t,e){var i=e.targetCanvas,r=i.getContext("2d"),n=e.destinationWidth,s=e.destinationHeight,a=n*s*4,o=new Uint8Array(this.imageBuffer,0,a),c=new Uint8ClampedArray(this.imageBuffer,0,a);t.readPixels(0,0,n,s,t.RGBA,t.UNSIGNED_BYTE,o);var h=new ImageData(c,n,s);r.putImageData(h,0,0)}!function(){"use strict";function t(t,e){var i="precision "+e+" float;\nvoid main(){}",r=t.createShader(t.FRAGMENT_SHADER);return t.shaderSource(r,i),t.compileShader(r),t.getShaderParameter(r,t.COMPILE_STATUS)?!0:!1}function e(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}fabric.isWebglSupported=function(e){if(fabric.isLikelyNode)return!1;e=e||fabric.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),n=!1;if(r){fabric.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),n=fabric.maxTextureSize>=e;for(var s=["highp","mediump","lowp"],a=0;3>a;a++)if(t(r,s[a])){fabric.webGlPrecision=s[a];break}}return this.isSupported=n,n},fabric.WebglFilterBackend=e,e.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,r="undefined"!=typeof window.performance;try{new ImageData(1,1),i=!0}catch(n){i=!1}var s="undefined"!=typeof ArrayBuffer,a="undefined"!=typeof Uint8ClampedArray;if(r&&i&&s&&a){var o=fabric.util.createCanvasElement(),c=new ArrayBuffer(t*e*4);if(fabric.forceGLPutImageData)return this.imageBuffer=c,void(this.copyGLTo2D=copyGLTo2DPutImageData);var h,l,u,f={imageBuffer:c,destinationWidth:t,destinationHeight:e,targetCanvas:o};o.width=t,o.height=e,h=window.performance.now(),copyGLTo2DDrawImage.call(f,this.gl,f),l=window.performance.now()-h,h=window.performance.now(),copyGLTo2DPutImageData.call(f,this.gl,f),u=window.performance.now()-h,l>u?(this.imageBuffer=c,this.copyGLTo2D=copyGLTo2DPutImageData):this.copyGLTo2D=copyGLTo2DDrawImage}},createWebGLCanvas:function(t,e){var i=fabric.util.createCanvasElement();i.width=t,i.height=e;var r={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(t,e,i,r,n,s){var a,o=this.gl;s&&(a=this.getCachedTexture(s,e));var c={originalWidth:e.width||e.originalWidth,originalHeight:e.height||e.originalHeight,sourceWidth:i,sourceHeight:r,destinationWidth:i,destinationHeight:r,context:o,sourceTexture:this.createTexture(o,i,r,!a&&e),targetTexture:this.createTexture(o,i,r),originalTexture:a||this.createTexture(o,i,r,!a&&e),passes:t.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},h=o.createFramebuffer();return o.bindFramebuffer(o.FRAMEBUFFER,h),t.forEach(function(t){t&&t.applyTo(c)}),resizeCanvasIfNeeded(c),this.copyGLTo2D(o,c),o.bindTexture(o.TEXTURE_2D,null),o.deleteTexture(c.sourceTexture),o.deleteTexture(c.targetTexture),o.deleteFramebuffer(h),n.getContext("2d").setTransform(1,0,0,1,0,0),c},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(t,e,i,r){var n=t.createTexture();return t.bindTexture(t.TEXTURE_2D,n),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),r?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r):t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,i,0,t.RGBA,t.UNSIGNED_BYTE,null),n},getCachedTexture:function(t,e){if(this.textureCache[t])return this.textureCache[t];var i=this.createTexture(this.gl,e.width,e.height,e);return this.textureCache[t]=i,i},evictCachesForKey:function(t){this.textureCache[t]&&(this.gl.deleteTexture(this.textureCache[t]),delete this.textureCache[t])},copyGLTo2D:copyGLTo2DDrawImage,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var t=this.gl,e={renderer:"",vendor:""};if(!t)return e;var i=t.getExtension("WEBGL_debug_renderer_info");if(i){var r=t.getParameter(i.UNMASKED_RENDERER_WEBGL),n=t.getParameter(i.UNMASKED_VENDOR_WEBGL);r&&(e.renderer=r.toLowerCase()),n&&(e.vendor=n.toLowerCase())}return this.gpuInfo=e,e}}}();!function(){"use strict";function t(){}var e=function(){};fabric.Canvas2dFilterBackend=t,t.prototype={evictCachesForKey:e,dispose:e,clearWebGLCaches:e,resources:{},applyFilters:function(t,e,i,r,n){var s=n.getContext("2d");s.drawImage(e,0,0,i,r);var a=s.getImageData(0,0,i,r),o=s.getImageData(0,0,i,r),c={sourceWidth:i,sourceHeight:r,imageData:a,originalEl:e,originalImageData:o,canvasEl:n,ctx:s,filterBackend:this};return t.forEach(function(t){t.applyTo(c)}),(c.imageData.width!==i||c.imageData.height!==r)&&(n.width=c.imageData.width,n.height=c.imageData.height),s.putImageData(c.imageData,0,0),c}}}();fabric.Image=fabric.Image||{},fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},createProgram:function(t,e,i){e=e||this.fragmentSource,i=i||this.vertexSource,"highp"!==fabric.webGlPrecision&&(e=e.replace(/precision highp float/g,"precision "+fabric.webGlPrecision+" float"));var r=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(r,i),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+t.getShaderInfoLog(r));var n=t.createShader(t.FRAGMENT_SHADER);if(t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+t.getShaderInfoLog(n));var s=t.createProgram();if(t.attachShader(s,r),t.attachShader(s,n),t.linkProgram(s),!t.getProgramParameter(s,t.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+t.getProgramInfoLog(s));var a=this.getAttributeLocations(t,s),o=this.getUniformLocations(t,s)||{};return o.uStepW=t.getUniformLocation(s,"uStepW"),o.uStepH=t.getUniformLocation(s,"uStepH"),{program:s,attributeLocations:a,uniformLocations:o}},getAttributeLocations:function(t,e){return{aPosition:t.getAttribLocation(e,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(t,e,i){var r=e.aPosition,n=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,n),t.enableVertexAttribArray(r),t.vertexAttribPointer(r,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)},_setupFrameBuffer:function(t){var e,i,r=t.context;t.passes>1?(e=t.destinationWidth,i=t.destinationHeight,(t.sourceWidth!==e||t.sourceHeight!==i)&&(r.deleteTexture(t.targetTexture),t.targetTexture=t.filterBackend.createTexture(r,e,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(t){t.passes--,t.pass++;var e=t.targetTexture;t.targetTexture=t.sourceTexture,t.sourceTexture=e},isNeutralState:function(){var t=this.mainParameter,e=fabric.Image.filters[this.type].prototype;if(t){if(Array.isArray(e[t])){for(var i=e[t].length;i--;)if(this[t][i]!==e[t][i])return!1;return!0}return e[t]===this[t]}return!1},applyTo:function(t){t.webgl?(this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},retrieveShader:function(t){return t.programCache.hasOwnProperty(this.type)||(t.programCache[this.type]=this.createProgram(t.context)),t.programCache[this.type]},applyToWebGL:function(t){var e=t.context,i=this.retrieveShader(t);0===t.pass&&t.originalTexture?e.bindTexture(e.TEXTURE_2D,t.originalTexture):e.bindTexture(e.TEXTURE_2D,t.sourceTexture),e.useProgram(i.program),this.sendAttributeData(e,i.attributeLocations,t.aPosition),e.uniform1f(i.uniformLocations.uStepW,1/t.sourceWidth),e.uniform1f(i.uniformLocations.uStepH,1/t.sourceHeight),this.sendUniformData(e,i.uniformLocations),e.viewport(0,0,t.destinationWidth,t.destinationHeight),e.drawArrays(e.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(t,e,i){t.activeTexture(i),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE0)},unbindAdditionalTexture:function(t,e){t.activeTexture(e),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(t){this[this.mainParameter]=t},sendUniformData:function(){},createHelpLayer:function(t){if(!t.helpLayer){var e=document.createElement("canvas");e.width=t.sourceWidth,e.height=t.sourceHeight,t.helpLayer=e}},toObject:function(){var t={type:this.type},e=this.mainParameter;return e&&(t[e]=this[e]),t},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i};!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},applyTo2d:function(t){var e,i,r,n,s,a=t.imageData,o=a.data,c=o.length,h=this.matrix,l=this.colorsOnly;for(s=0;c>s;s+=4)e=o[s],i=o[s+1],r=o[s+2],l?(o[s]=e*h[0]+i*h[1]+r*h[2]+255*h[4],o[s+1]=e*h[5]+i*h[6]+r*h[7]+255*h[9],o[s+2]=e*h[10]+i*h[11]+r*h[12]+255*h[14]):(n=o[s+3],o[s]=e*h[0]+i*h[1]+r*h[2]+n*h[3]+255*h[4],o[s+1]=e*h[5]+i*h[6]+r*h[7]+n*h[8]+255*h[9],o[s+2]=e*h[10]+i*h[11]+r*h[12]+n*h[13]+255*h[14],o[s+3]=e*h[15]+i*h[16]+r*h[17]+n*h[18]+255*h[19])},getUniformLocations:function(t,e){return{uColorMatrix:t.getUniformLocation(e,"uColorMatrix"),uConstants:t.getUniformLocation(e,"uConstants")}},sendUniformData:function(t,e){var i=this.matrix,r=[i[0],i[1],i[2],i[3],i[5],i[6],i[7],i[8],i[10],i[11],i[12],i[13],i[15],i[16],i[17],i[18]],n=[i[4],i[9],i[14],i[19]];t.uniformMatrix4fv(e.uColorMatrix,!1,r),t.uniform4fv(e.uConstants,n)}}),e.Image.filters.ColorMatrix.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Brightness=r(i.BaseFilter,{type:"Brightness",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uBrightness;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor.rgb += uBrightness;\ngl_FragColor = color;\n}",brightness:0,mainParameter:"brightness",applyTo2d:function(t){if(0!==this.brightness){var e,i=t.imageData,r=i.data,n=r.length,s=Math.round(255*this.brightness);for(e=0;n>e;e+=4)r[e]=r[e]+s,r[e+1]=r[e+1]+s,r[e+2]=r[e+2]+s}},getUniformLocations:function(t,e){return{uBrightness:t.getUniformLocation(e,"uBrightness")}},sendUniformData:function(t,e){t.uniform1f(e.uBrightness,this.brightness)}}),e.Image.filters.Brightness.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Convolute=n(r.BaseFilter,{type:"Convolute",opaque:!1,matrix:[0,0,0,0,1,0,0,0,0],fragmentSource:{Convolute_3_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[9];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 3.0; h+=1.0) {\nfor (float w = 0.0; w < 3.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_3_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[9];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 3.0; h+=1.0) {\nfor (float w = 0.0; w < 3.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_5_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[25];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 5.0; h+=1.0) {\nfor (float w = 0.0; w < 5.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_5_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[25];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 5.0; h+=1.0) {\nfor (float w = 0.0; w < 5.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_7_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[49];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 7.0; h+=1.0) {\nfor (float w = 0.0; w < 7.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_7_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[49];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 7.0; h+=1.0) {\nfor (float w = 0.0; w < 7.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_9_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[81];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 9.0; h+=1.0) {\nfor (float w = 0.0; w < 9.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_9_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[81];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 9.0; h+=1.0) {\nfor (float w = 0.0; w < 9.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}"},retrieveShader:function(t){var e=Math.sqrt(this.matrix.length),i=this.type+"_"+e+"_"+(this.opaque?1:0),r=this.fragmentSource[i];return t.programCache.hasOwnProperty(i)||(t.programCache[i]=this.createProgram(t.context,r)),t.programCache[i]},applyTo2d:function(t){var e,i,r,n,s,o,a,c,h,l,u,f,d,g=t.imageData,p=g.data,v=this.matrix,b=Math.round(Math.sqrt(v.length)),m=Math.floor(b/2),y=g.width,_=g.height,x=t.ctx.createImageData(y,_),C=x.data,w=this.opaque?1:0;for(u=0;_>u;u++)for(l=0;y>l;l++){for(s=4*(u*y+l),e=0,i=0,r=0,n=0,d=0;b>d;d++)for(f=0;b>f;f++)a=u+d-m,o=l+f-m,0>a||a>=_||0>o||o>=y||(c=4*(a*y+o),h=v[d*b+f],e+=p[c]*h,i+=p[c+1]*h,r+=p[c+2]*h,w||(n+=p[c+3]*h));C[s]=e,C[s+1]=i,C[s+2]=r,C[s+3]=w?p[s+3]:n}t.imageData=x},getUniformLocations:function(t,e){return{uMatrix:t.getUniformLocation(e,"uMatrix"),uOpaque:t.getUniformLocation(e,"uOpaque"),uHalfSize:t.getUniformLocation(e,"uHalfSize"),uSize:t.getUniformLocation(e,"uSize")}},sendUniformData:function(t,e){t.uniform1fv(e.uMatrix,this.matrix)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(t){var e,i,r=t.imageData,n=r.data,s=n.length,o=this.mode;for(e=0;s>e;e+=4)"average"===o?i=(n[e]+n[e+1]+n[e+2])/3:"lightness"===o?i=(Math.min(n[e],n[e+1],n[e+2])+Math.max(n[e],n[e+1],n[e+2]))/2:"luminosity"===o&&(i=.21*n[e]+.72*n[e+1]+.07*n[e+2]),n[e]=i,n[e+1]=i,n[e+2]=i},retrieveShader:function(t){var e=this.type+"_"+this.mode;if(!t.programCache.hasOwnProperty(e)){var i=this.fragmentSource[this.mode];t.programCache[e]=this.createProgram(t.context,i)}return t.programCache[e]},getUniformLocations:function(t,e){return{uMode:t.getUniformLocation(e,"uMode")}},sendUniformData:function(t,e){var i=1;t.uniform1i(e.uMode,i)},isNeutralState:function(){return!1}}),e.Image.filters.Grayscale.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Invert=r(i.BaseFilter,{type:"Invert",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uInvert;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nif (uInvert == 1) {\ngl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\n} else {\ngl_FragColor = color;\n}\n}",invert:!0,mainParameter:"invert",applyTo2d:function(t){var e,i=t.imageData,r=i.data,n=r.length;for(e=0;n>e;e+=4)r[e]=255-r[e],r[e+1]=255-r[e+1],r[e+2]=255-r[e+2]},isNeutralState:function(){return!this.invert},getUniformLocations:function(t,e){return{uInvert:t.getUniformLocation(e,"uInvert")}},sendUniformData:function(t,e){t.uniform1i(e.uInvert,this.invert)}}),e.Image.filters.Invert.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Noise=n(r.BaseFilter,{type:"Noise",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uStepH;\nuniform float uNoise;\nuniform float uSeed;\nvarying vec2 vTexCoord;\nfloat rand(vec2 co, float seed, float vScale) {\nreturn fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\n}\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\ngl_FragColor = color;\n}",mainParameter:"noise",noise:0,applyTo2d:function(t){if(0!==this.noise){var e,i,r=t.imageData,n=r.data,s=n.length,o=this.noise;for(e=0,s=n.length;s>e;e+=4)i=(.5-Math.random())*o,n[e]+=i,n[e+1]+=i,n[e+2]+=i}},getUniformLocations:function(t,e){return{uNoise:t.getUniformLocation(e,"uNoise"),uSeed:t.getUniformLocation(e,"uSeed")}},sendUniformData:function(t,e){t.uniform1f(e.uNoise,this.noise/255),t.uniform1f(e.uSeed,Math.random())},toObject:function(){return i(this.callSuper("toObject"),{noise:this.noise})}}),e.Image.filters.Noise.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Pixelate=r(i.BaseFilter,{type:"Pixelate",blocksize:4,mainParameter:"blocksize",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uBlocksize;\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nfloat blockW = uBlocksize * uStepW;\nfloat blockH = uBlocksize * uStepW;\nint posX = int(vTexCoord.x / blockW);\nint posY = int(vTexCoord.y / blockH);\nfloat fposX = float(posX);\nfloat fposY = float(posY);\nvec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\nvec4 color = texture2D(uTexture, squareCoords);\ngl_FragColor = color;\n}",applyTo2d:function(t){var e,i,r,n,s,o,a,c,h,l,u,f=t.imageData,d=f.data,g=f.height,p=f.width;for(i=0;g>i;i+=this.blocksize)for(r=0;p>r;r+=this.blocksize)for(e=4*i*p+4*r,n=d[e],s=d[e+1],o=d[e+2],a=d[e+3],l=Math.min(i+this.blocksize,g),u=Math.min(r+this.blocksize,p),c=i;l>c;c++)for(h=r;u>h;h++)e=4*c*p+4*h,d[e]=n,d[e+1]=s,d[e+2]=o,d[e+3]=a},isNeutralState:function(){return 1===this.blocksize},getUniformLocations:function(t,e){return{uBlocksize:t.getUniformLocation(e,"uBlocksize"),uStepW:t.getUniformLocation(e,"uStepW"),uStepH:t.getUniformLocation(e,"uStepH")}},sendUniformData:function(t,e){t.uniform1f(e.uBlocksize,this.blocksize)}}),e.Image.filters.Pixelate.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.RemoveColor=n(r.BaseFilter,{type:"RemoveColor",color:"#FFFFFF",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uLow;\nuniform vec4 uHigh;\nvarying vec2 vTexCoord;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\nif(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\ngl_FragColor.a = 0.0;\n}\n}",distance:.02,useAlpha:!1,applyTo2d:function(t){var i,r,n,s,o=t.imageData,a=o.data,h=255*this.distance,c=new e.Color(this.color).getSource(),l=[c[0]-h,c[1]-h,c[2]-h],u=[c[0]+h,c[1]+h,c[2]+h];for(i=0;il[0]&&n>l[1]&&s>l[2]&&r 0.0) {\n"+this.fragmentSource[t]+"}\n}"},retrieveShader:function(t){var e,i=this.type+"_"+this.mode;return t.programCache.hasOwnProperty(i)||(e=this.buildSource(this.mode),t.programCache[i]=this.createProgram(t.context,e)),t.programCache[i]},applyTo2d:function(t){var i,r,n,s,o,a,c,h=t.imageData,l=h.data,u=l.length,f=1-this.alpha;c=new e.Color(this.color).getSource(),i=c[0]*this.alpha,r=c[1]*this.alpha,n=c[2]*this.alpha;for(var d=0;u>d;d+=4)switch(s=l[d],o=l[d+1],a=l[d+2],this.mode){case"multiply":l[d]=s*i/255,l[d+1]=o*r/255,l[d+2]=a*n/255;break;case"screen":l[d]=255-(255-s)*(255-i)/255,l[d+1]=255-(255-o)*(255-r)/255,l[d+2]=255-(255-a)*(255-n)/255;break;case"add":l[d]=s+i,l[d+1]=o+r,l[d+2]=a+n;break;case"diff":case"difference":l[d]=Math.abs(s-i),l[d+1]=Math.abs(o-r),l[d+2]=Math.abs(a-n);break;case"subtract":l[d]=s-i,l[d+1]=o-r,l[d+2]=a-n;break;case"darken":l[d]=Math.min(s,i),l[d+1]=Math.min(o,r),l[d+2]=Math.min(a,n);break;case"lighten":l[d]=Math.max(s,i),l[d+1]=Math.max(o,r),l[d+2]=Math.max(a,n);break;case"overlay":l[d]=128>i?2*s*i/255:255-2*(255-s)*(255-i)/255,l[d+1]=128>r?2*o*r/255:255-2*(255-o)*(255-r)/255,l[d+2]=128>n?2*a*n/255:255-2*(255-a)*(255-n)/255;break;case"exclusion":l[d]=i+s-2*i*s/255,l[d+1]=r+o-2*r*o/255,l[d+2]=n+a-2*n*a/255;break;case"tint":l[d]=i+s*f,l[d+1]=r+o*f,l[d+2]=n+a*f}},getUniformLocations:function(t,e){return{uColor:t.getUniformLocation(e,"uColor")}},sendUniformData:function(t,i){var r=new e.Color(this.color).getSource();r[0]=this.alpha*r[0]/255,r[1]=this.alpha*r[1]/255,r[2]=this.alpha*r[2]/255,r[3]=this.alpha,t.uniform4fv(i.uColor,r)},toObject:function(){return{type:this.type,color:this.color,mode:this.mode,alpha:this.alpha}}}),e.Image.filters.BlendColor.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric,i=e.Image.filters,r=e.util.createClass;i.BlendImage=r(i.BaseFilter,{type:"BlendImage",image:null,mode:"multiply",alpha:1,vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nuniform mat3 uTransformMatrix;\nvoid main() {\nvTexCoord = aPosition;\nvTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:{multiply:"precision highp float;\nuniform sampler2D uTexture;\nuniform sampler2D uImage;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec4 color2 = texture2D(uImage, vTexCoord2);\ncolor.rgba *= color2.rgba;\ngl_FragColor = color;\n}",mask:"precision highp float;\nuniform sampler2D uTexture;\nuniform sampler2D uImage;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec4 color2 = texture2D(uImage, vTexCoord2);\ncolor.a = color2.a;\ngl_FragColor = color;\n}"},retrieveShader:function(t){var e=this.type+"_"+this.mode,i=this.fragmentSource[this.mode];return t.programCache.hasOwnProperty(e)||(t.programCache[e]=this.createProgram(t.context,i)),t.programCache[e]},applyToWebGL:function(t){var e=t.context,i=this.createTexture(t.filterBackend,this.image);this.bindAdditionalTexture(e,i,e.TEXTURE1),this.callSuper("applyToWebGL",t),this.unbindAdditionalTexture(e,e.TEXTURE1)},createTexture:function(t,e){return t.getCachedTexture(e.cacheKey,e._element)},calculateMatrix:function(){var t=this.image,e=t._element.width,i=t._element.height;return[1/t.scaleX,0,0,0,1/t.scaleY,0,-t.left/e,-t.top/i,1]},applyTo2d:function(t){var i,r,n,s,o,a,c,h,l,u,f,d=t.imageData,g=t.filterBackend.resources,p=d.data,v=p.length,m=d.width,b=d.height,_=this.image;g.blendImage||(g.blendImage=e.util.createCanvasElement()),l=g.blendImage,u=l.getContext("2d"),l.width!==m||l.height!==b?(l.width=m,l.height=b):u.clearRect(0,0,m,b),u.setTransform(_.scaleX,0,0,_.scaleY,_.left,_.top),u.drawImage(_._element,0,0,m,b),f=u.getImageData(0,0,m,b).data;for(var y=0;v>y;y+=4)switch(o=p[y],a=p[y+1],c=p[y+2],h=p[y+3],i=f[y],r=f[y+1],n=f[y+2],s=f[y+3],this.mode){case"multiply":p[y]=o*i/255,p[y+1]=a*r/255,p[y+2]=c*n/255,p[y+3]=h*s/255;break;case"mask":p[y+3]=s}},getUniformLocations:function(t,e){return{uTransformMatrix:t.getUniformLocation(e,"uTransformMatrix"),uImage:t.getUniformLocation(e,"uImage")}},sendUniformData:function(t,e){var i=this.calculateMatrix();t.uniform1i(e.uImage,1),t.uniformMatrix3fv(e.uTransformMatrix,!1,i)},toObject:function(){return{type:this.type,image:this.image&&this.image.toObject(),mode:this.mode,alpha:this.alpha}}}),e.Image.filters.BlendImage.fromObject=function(t,i){e.Image.fromObject(t.image,function(r){var n=e.util.object.clone(t);n.image=r,i(new e.Image.filters.BlendImage(n))})}}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=Math.pow,r=Math.floor,n=Math.sqrt,s=Math.abs,o=Math.round,a=Math.sin,c=Math.ceil,h=e.Image.filters,l=e.util.createClass;h.Resize=l(h.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3,getUniformLocations:function(t,e){return{uDelta:t.getUniformLocation(e,"uDelta"),uTaps:t.getUniformLocation(e,"uTaps")}},sendUniformData:function(t,e){t.uniform2fv(e.uDelta,this.horizontal?[1/this.width,0]:[0,1/this.height]),t.uniform1fv(e.uTaps,this.taps)},retrieveShader:function(t){var e=this.getFilterWindow(),i=this.type+"_"+e;if(!t.programCache.hasOwnProperty(i)){var r=this.generateShader(e);t.programCache[i]=this.createProgram(t.context,r)}return t.programCache[i]},getFilterWindow:function(){var t=this.tempScale;return Math.ceil(this.lanczosLobes/t)},getTaps:function(){for(var t=this.lanczosCreate(this.lanczosLobes),e=this.tempScale,i=this.getFilterWindow(),r=new Array(i),n=1;i>=n;n++)r[n-1]=t(n*e);return r},generateShader:function(t){for(var t,e=new Array(t),i=this.fragmentSourceTOP,r=1;t>=r;r++)e[r-1]=r+".0 * uDelta";return i+="uniform float uTaps["+t+"];\n",i+="void main() {\n",i+=" vec4 color = texture2D(uTexture, vTexCoord);\n",i+=" float sum = 1.0;\n",e.forEach(function(t,e){i+=" color += texture2D(uTexture, vTexCoord + "+t+") * uTaps["+e+"];\n",i+=" color += texture2D(uTexture, vTexCoord - "+t+") * uTaps["+e+"];\n",i+=" sum += 2.0 * uTaps["+e+"];\n"}),i+=" gl_FragColor = color / sum;\n",i+="}"},fragmentSourceTOP:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uDelta;\nvarying vec2 vTexCoord;\n",applyTo:function(t){t.webgl?(t.passes++,this.width=t.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=t.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),t.destinationWidth=this.dW,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceWidth=t.destinationWidth,this.height=t.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),t.destinationHeight=this.dH,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceHeight=t.destinationHeight):this.applyTo2d(t)},isNeutralState:function(){return 1===this.scaleX&&1===this.scaleY},lanczosCreate:function(t){return function(e){if(e>=t||-t>=e)return 0;if(1.1920929e-7>e&&e>-1.1920929e-7)return 1;e*=Math.PI;var i=e/t;return a(e)/e*a(i)/i}},applyTo2d:function(t){var e=t.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,s=e.width,a=e.height,c=o(s*i),h=o(a*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(t,s,a,c,h):"hermite"===this.resizeType?n=this.hermiteFastResize(t,s,a,c,h):"bilinear"===this.resizeType?n=this.bilinearFiltering(t,s,a,c,h):"lanczos"===this.resizeType&&(n=this.lanczosResize(t,s,a,c,h)),t.imageData=n},sliceByTwo:function(t,i,n,s,o){var a,c,h=t.imageData,l=.5,u=!1,f=!1,d=i*l,g=n*l,p=e.filterBackend.resources,v=0,m=0,b=i,_=0;for(p.sliceByTwo||(p.sliceByTwo=document.createElement("canvas")),a=p.sliceByTwo,(a.width<1.5*i||a.heightc;c++){for(C.y=(c+.5)*v,S.y=r(C.y),k=0,P=0,D=0,E=0,j=0,T=S.x-_;T<=S.x+_;T++)if(!(0>T||T>=e)){A=r(1e3*s(T-C.x)),x[A]||(x[A]={});for(var F=S.y-y;F<=S.y+y;F++)0>F||F>=o||(M=r(1e3*s(F-C.y)),x[A][M]||(x[A][M]=g(n(i(A*m,2)+i(M*b,2))/1e3)),w=x[A][M],w>0&&(O=4*(F*e+T),k+=w,P+=w*u[O],D+=w*u[O+1],E+=w*u[O+2],j+=w*u[O+3]))}O=4*(c*a+t),d[O]=P/k,d[O+1]=D/k,d[O+2]=E/k,d[O+3]=j/k}return++tf;f++)for(d=0;n>d;d++)for(l=r(y*d),u=r(x*f),g=y*d-l,p=x*f-u,b=4*(u*e+l),v=0;4>v;v++)o=T[b+v],a=T[b+4+v],c=T[b+C+v],h=T[b+C+4+v],m=o*(1-g)*(1-p)+a*g*(1-p)+c*p*(1-g)+h*g*p,O[_++]=m;return w},hermiteFastResize:function(t,e,i,o,a){for(var h=this.rcpScaleX,l=this.rcpScaleY,u=c(h/2),f=c(l/2),d=t.imageData,g=d.data,p=t.ctx.createImageData(o,a),v=p.data,m=0;a>m;m++)for(var b=0;o>b;b++){for(var _=4*(b+m*o),y=0,x=0,C=0,S=0,T=0,w=0,O=0,k=(m+.5)*l,P=r(m*l);(m+1)*l>P;P++)for(var D=s(k-(P+.5))/f,E=(b+.5)*h,j=D*D,A=r(b*h);(b+1)*h>A;A++){var M=s(E-(A+.5))/u,F=n(j+M*M);F>1&&-1>F||(y=2*F*F*F-3*F*F+1,y>0&&(M=4*(A+P*e),O+=y*g[M+3],C+=y,g[M+3]<255&&(y=y*g[M+3]/250),S+=y*g[M],T+=y*g[M+1],w+=y*g[M+2],x+=y))}v[_]=S/x,v[_+1]=T/x,v[_+2]=w/x,v[_+3]=O/C}return p},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(0!==this.contrast){var e,i,r=t.imageData,n=r.data,i=n.length,s=Math.floor(255*this.contrast),o=259*(s+255)/(255*(259-s));for(e=0;i>e;e+=4)n[e]=o*(n[e]-128)+128,n[e+1]=o*(n[e+1]-128)+128,n[e+2]=o*(n[e+2]-128)+128}},getUniformLocations:function(t,e){return{uContrast:t.getUniformLocation(e,"uContrast")}},sendUniformData:function(t,e){t.uniform1f(e.uContrast,this.contrast)}}),e.Image.filters.Contrast.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Saturation=r(i.BaseFilter,{type:"Saturation",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uSaturation;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat rgMax = max(color.r, color.g);\nfloat rgbMax = max(rgMax, color.b);\ncolor.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\ncolor.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\ncolor.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\ngl_FragColor = color;\n}",saturation:0,mainParameter:"saturation",applyTo2d:function(t){if(0!==this.saturation){var e,i,r=t.imageData,n=r.data,s=n.length,o=-this.saturation;for(e=0;s>e;e+=4)i=Math.max(n[e],n[e+1],n[e+2]),n[e]+=i!==n[e]?(i-n[e])*o:0,n[e+1]+=i!==n[e+1]?(i-n[e+1])*o:0,n[e+2]+=i!==n[e+2]?(i-n[e+2])*o:0}},getUniformLocations:function(t,e){return{uSaturation:t.getUniformLocation(e,"uSaturation")}},sendUniformData:function(t,e){t.uniform1f(e.uSaturation,-this.saturation)}}),e.Image.filters.Saturation.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Blur=r(i.BaseFilter,{type:"Blur",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uDelta;\nvarying vec2 vTexCoord;\nconst float nSamples = 15.0;\nvec3 v3offset = vec3(12.9898, 78.233, 151.7182);\nfloat random(vec3 scale) {\nreturn fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\n}\nvoid main() {\nvec4 color = vec4(0.0);\nfloat total = 0.0;\nfloat offset = random(v3offset);\nfor (float t = -nSamples; t <= nSamples; t++) {\nfloat percent = (t + offset - 0.5) / nSamples;\nfloat weight = 1.0 - abs(percent);\ncolor += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\ntotal += weight;\n}\ngl_FragColor = color / total;\n}",blur:0,mainParameter:"blur",applyTo:function(t){t.webgl?(this.aspectRatio=t.sourceWidth/t.sourceHeight,t.passes++,this._setupFrameBuffer(t),this.horizontal=!0,this.applyToWebGL(t),this._swapTextures(t),this._setupFrameBuffer(t),this.horizontal=!1,this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},applyTo2d:function(t){t.imageData=this.simpleBlur(t)},simpleBlur:function(t){var i,r,n=t.filterBackend.resources,s=t.imageData.width,o=t.imageData.height;n.blurLayer1||(n.blurLayer1=e.util.createCanvasElement(),n.blurLayer2=e.util.createCanvasElement()),i=n.blurLayer1,r=n.blurLayer2,(i.width!==s||i.height!==o)&&(r.width=i.width=s,r.height=i.height=o);var a,h,c,l,u=i.getContext("2d"),f=r.getContext("2d"),d=15,g=.06*this.blur*.5;for(u.putImageData(t.imageData,0,0),f.clearRect(0,0,s,o),l=-d;d>=l;l++)a=(Math.random()-.5)/4,h=l/d,c=g*h*s+a,f.globalAlpha=1-Math.abs(h),f.drawImage(i,c,a),u.drawImage(r,0,0),f.globalAlpha=1,f.clearRect(0,0,r.width,r.height);for(l=-d;d>=l;l++)a=(Math.random()-.5)/4,h=l/d,c=g*h*o+a,f.globalAlpha=1-Math.abs(h),f.drawImage(i,a,c),u.drawImage(r,0,0),f.globalAlpha=1,f.clearRect(0,0,r.width,r.height);t.ctx.drawImage(i,0,0);var p=t.ctx.getImageData(0,0,i.width,i.height);return u.globalAlpha=1,u.clearRect(0,0,i.width,i.height),p},getUniformLocations:function(t,e){return{delta:t.getUniformLocation(e,"uDelta")}},sendUniformData:function(t,e){var i=this.chooseRightDelta();t.uniform2fv(e.delta,i)},chooseRightDelta:function(){var t,e=1,i=[0,0];return this.horizontal?this.aspectRatio>1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?i[0]=t:i[1]=t,i}}),i.Blur.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",initialize:function(t){this.gamma=[1,1,1],i.BaseFilter.prototype.initialize.call(this,t)},applyTo2d:function(t){var e,i=t.imageData,r=i.data,n=this.gamma,s=r.length,o=1/n[0],a=1/n[1],c=1/n[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,s=256;s>e;e++)this.rVals[e]=255*Math.pow(e/255,o),this.gVals[e]=255*Math.pow(e/255,a),this.bVals[e]=255*Math.pow(e/255,c);for(e=0,s=r.length;s>e;e+=4)r[e]=this.rVals[r[e]],r[e+1]=this.gVals[r[e+1]],r[e+2]=this.bVals[r[e+2]]},getUniformLocations:function(t,e){return{uGamma:t.getUniformLocation(e,"uGamma")}},sendUniformData:function(t,e){t.uniform3fv(e.uGamma,this.gamma)}}),e.Image.filters.Gamma.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Composed=r(i.BaseFilter,{type:"Composed",subFilters:[],initialize:function(t){this.callSuper("initialize",t),this.subFilters=this.subFilters.slice(0)},applyTo:function(t){t.passes+=this.subFilters.length-1,this.subFilters.forEach(function(e){e.applyTo(t)})},toObject:function(){return e.util.object.extend(this.callSuper("toObject"),{subFilters:this.subFilters.map(function(t){return t.toObject()})})},isNeutralState:function(){return!this.subFilters.some(function(t){return!t.isNeutralState()})}}),e.Image.filters.Composed.fromObject=function(t,i){var r=t.subFilters||[],n=r.map(function(t){return new e.Image.filters[t.type](t)}),s=new e.Image.filters.Composed({subFilters:n});return i&&i(s),s}}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.HueRotation=r(i.ColorMatrix,{type:"HueRotation",rotation:0,mainParameter:"rotation",calculateMatrix:function(){var t=this.rotation*Math.PI,i=e.util.cos(t),r=e.util.sin(t),n=1/3,s=Math.sqrt(n)*r,o=1-i;this.matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix[0]=i+o/3,this.matrix[1]=n*o-s,this.matrix[2]=n*o+s,this.matrix[5]=n*o+s,this.matrix[6]=i+n*o,this.matrix[7]=n*o-s,this.matrix[10]=n*o-s,this.matrix[11]=n*o+s,this.matrix[12]=i+n*o},isNeutralState:function(t){return this.calculateMatrix(),i.BaseFilter.prototype.isNeutralState.call(this,t)},applyTo:function(t){this.calculateMatrix(),i.BaseFilter.prototype.applyTo.call(this,t)}}),e.Image.filters.HueRotation.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this);!function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;return e.Text?void e.warn("fabric.Text is already defined"):(e.Text=e.util.createClass(e.Object,{_dimensionAffectingProps:["fontSize","fontWeight","fontFamily","fontStyle","lineHeight","text","charSpacing","textAlign","styles"],_reNewline:/\r?\n/,_reSpacesAndTabs:/[ \t\r]/g,_reSpaceAndTab:/[ \t\r]/,_reWords:/\S+/g,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",underline:!1,overline:!1,linethrough:!1,textAlign:"left",fontStyle:"normal",lineHeight:1.16,superscript:{size:.6,baseline:-.35},subscript:{size:.6,baseline:.11},textBackgroundColor:"",stateProperties:e.Object.prototype.stateProperties.concat("fontFamily","fontWeight","fontSize","text","underline","overline","linethrough","textAlign","fontStyle","lineHeight","textBackgroundColor","charSpacing","styles"),cacheProperties:e.Object.prototype.cacheProperties.concat("fontFamily","fontWeight","fontSize","text","underline","overline","linethrough","textAlign","fontStyle","lineHeight","textBackgroundColor","charSpacing","styles"),stroke:null,shadow:null,_fontSizeFraction:.222,offsets:{underline:.1,linethrough:-.315,overline:-.88},_fontSizeMult:1.13,charSpacing:0,styles:null,_measuringContext:null,deltaY:0,_styleProperties:["stroke","strokeWidth","fill","fontFamily","fontSize","fontWeight","fontStyle","underline","overline","linethrough","deltaY","textBackgroundColor"],__charBounds:[],CACHE_FONT_SIZE:400,MIN_TEXT_WIDTH:2,initialize:function(t,e){this.styles=e?e.styles||{}:{},this.text=t,this.__skipDimension=!0,this.callSuper("initialize",e),this.__skipDimension=!1,this.initDimensions(),this.setCoords(),this.setupState({propertySet:"_dimensionAffectingProps"})},getMeasuringContext:function(){return e._measuringContext||(e._measuringContext=this.canvas&&this.canvas.contextCache||e.util.createCanvasElement().getContext("2d")),e._measuringContext},_splitText:function(){var t=this._splitTextIntoLines(this.text);return this.textLines=t.lines,this._textLines=t.graphemeLines,this._unwrappedTextLines=t._unwrappedLines,this._text=t.graphemeText,t},initDimensions:function(){this.__skipDimension||(this._splitText(),this._clearCache(),this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},enlargeSpaces:function(){for(var t,e,i,r,n,s,o,a=0,c=this._textLines.length;c>a;a++)if(("justify"===this.textAlign||a!==c-1&&!this.isEndOfWrapping(a))&&(r=0,n=this._textLines[a],e=this.getLineWidth(a),e=h;h++)s=this.__charBounds[a][h],this._reSpaceAndTab.test(n[h])?(s.width+=t,s.kernedWidth+=t,s.left+=r,r+=t):s.left+=r}},isEndOfWrapping:function(t){return t===this._textLines.length-1},missingNewlineOffset:function(){return 1},toString:function(){return"#'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,e,i){t.textBaseline="alphabetic",t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;i>e;e++){var r=this.getLineWidth(e);r>t&&(t=r)}return t},_renderTextLine:function(t,e,i,r,n,s){this._renderChars(t,e,i,r,n,s)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,r,n,s,o,a=0,c=t.fillStyle,h=this._getLeftOffset(),l=this._getTopOffset(),u=0,f=0,d=0,g=this._textLines.length;g>d;d++)if(e=this.getHeightOfLine(d),this.textBackgroundColor||this.styleHas("textBackgroundColor",d)){r=this._textLines[d],i=this._getLineLeftOffset(d),f=0,u=0,n=this.getValueOfPropertyAt(d,0,"textBackgroundColor");for(var p=0,v=r.length;v>p;p++)s=this.__charBounds[d][p],o=this.getValueOfPropertyAt(d,p,"textBackgroundColor"),o!==n?(t.fillStyle=n,n&&t.fillRect(h+i+u,l+a,f,e/this.lineHeight),u=s.left,f=s.width,n=o):f+=s.kernedWidth;o&&(t.fillStyle=o,t.fillRect(h+i+u,l+a,f,e/this.lineHeight)),a+=e}else a+=e;t.fillStyle=c,this._removeShadow(t)}},getFontCache:function(t){var i=t.fontFamily.toLowerCase();e.charWidthsCache[i]||(e.charWidthsCache[i]={});var r=e.charWidthsCache[i],n=t.fontStyle.toLowerCase()+"_"+(t.fontWeight+"").toLowerCase();return r[n]||(r[n]={}),r[n]},_applyCharStyles:function(t,e,i,r,n){this._setFillStyles(e,n),this._setStrokeStyles(e,n),e.font=this._getFontDeclaration(n)},_measureChar:function(t,e,i,r){var n,s,o,a,c=this.getFontCache(e),h=this._getFontDeclaration(e),l=this._getFontDeclaration(r),u=i+t,f=h===l,d=e.fontSize/this.CACHE_FONT_SIZE;if(i&&void 0!==c[i]&&(o=c[i]),void 0!==c[t]&&(a=n=c[t]),f&&void 0!==c[u]&&(s=c[u],a=s-o),void 0===n||void 0===o||void 0===s){var g=this.getMeasuringContext();this._setTextStyles(g,e,!0)}return void 0===n&&(a=n=g.measureText(t).width,c[t]=n),void 0===o&&f&&i&&(o=g.measureText(i).width,c[i]=o),f&&void 0===s&&(s=g.measureText(u).width,c[u]=s,a=s-o),{width:n*d,kernedWidth:a*d}},getHeightOfChar:function(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")},measureLine:function(t){var e=this._measureLine(t);return 0!==this.charSpacing&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e},_measureLine:function(t){var e,i,r,n,s=0,o=this._textLines[t],a=0,c=new Array(o.length);for(this.__charBounds[t]=c,e=0;e0&&!n){var f=this.__charBounds[e][i-1];u.left=f.left+f.width+c.kernedWidth-c.width}return u},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),r=1,n=e.length;n>r;r++)i=Math.max(this.getHeightOfChar(t,r),i);return this.__lineHeights[t]=i*this.lineHeight*this._fontSizeMult},calcTextHeight:function(){for(var t,e=0,i=0,r=this._textLines.length;r>i;i++)t=this.getHeightOfLine(i),e+=i===r-1?t/this.lineHeight:t;return e},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},_applyPatternGradientTransform:function(t,e){if(!e||!e.toLive)return{offsetX:0,offsetY:0};var i=-this.width/2+e.offsetX||0,r=-this.height/2+e.offsetY||0;return t.transform(1,0,0,1,i,r),{offsetX:i,offsetY:r}},_renderTextCommon:function(t,e){t.save();for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=this._applyPatternGradientTransform(t,"fillText"===e?this.fill:this.stroke),o=0,a=this._textLines.length;a>o;o++){var c=this.getHeightOfLine(o),h=c/this.lineHeight,l=this._getLineLeftOffset(o);this._renderTextLine(e,t,this._textLines[o],r+l-s.offsetX,n+i+h-s.offsetY,o),i+=c}t.restore()},_renderTextFill:function(t){(this.fill||this.styleHas("fill"))&&this._renderTextCommon(t,"fillText")},_renderTextStroke:function(t){(this.stroke&&0!==this.strokeWidth||!this.isEmptyStyles())&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray),t.beginPath(),this._renderTextCommon(t,"strokeText"),t.closePath(),t.restore())},_renderChars:function(t,e,i,r,n,s){var o,a,c,h,l=this.getHeightOfLine(s),u=-1!==this.textAlign.indexOf("justify"),f="",d=0,g=!u&&0===this.charSpacing&&this.isEmptyStyles(s);if(e.save(),n-=l*this._fontSizeFraction/this.lineHeight,g)return this._renderChar(t,e,s,0,this.textLines[s],r,n,l),void e.restore();for(var p=0,v=i.length-1;v>=p;p++)h=p===v||this.charSpacing,f+=i[p],c=this.__charBounds[s][p],0===d?(r+=c.kernedWidth-c.width,d+=c.width):d+=c.kernedWidth,u&&!h&&this._reSpaceAndTab.test(i[p])&&(h=!0),h||(o=o||this.getCompleteStyleDeclaration(s,p),a=this.getCompleteStyleDeclaration(s,p+1),h=this._hasStyleChanged(o,a)),h&&(this._renderChar(t,e,s,p,f,r,n,l),f="",o=a,r+=d,d=0);e.restore()},_renderChar:function(t,e,i,r,n,s,o){var a=this._getStyleDeclaration(i,r),c=this.getCompleteStyleDeclaration(i,r),h="fillText"===t&&c.fill,l="strokeText"===t&&c.stroke&&c.strokeWidth;(l||h)&&(a&&e.save(),this._applyCharStyles(t,e,i,r,c),a&&a.textBackgroundColor&&this._removeShadow(e),a&&a.deltaY&&(o+=a.deltaY),h&&e.fillText(n,s,o),l&&e.strokeText(n,s,o),a&&e.restore())},setSuperscript:function(t,e){return this._setScript(t,e,this.superscript)},setSubscript:function(t,e){return this._setScript(t,e,this.subscript)},_setScript:function(t,e,i){var r=this.get2DCursorLocation(t,!0),n=this.getValueOfPropertyAt(r.lineIndex,r.charIndex,"fontSize"),s=this.getValueOfPropertyAt(r.lineIndex,r.charIndex,"deltaY"),o={fontSize:n*i.size,deltaY:s+n*i.baseline};return this.setSelectionStyles(o,t,e),this},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth||t.fontSize!==e.fontSize||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.deltaY!==e.deltaY},_hasStyleChangedForSvg:function(t,e){return this._hasStyleChanged(t,e)||t.overline!==e.overline||t.underline!==e.underline||t.linethrough!==e.linethrough},_getLineLeftOffset:function(t){var e=this.getLineWidth(t);return"center"===this.textAlign?(this.width-e)/2:"right"===this.textAlign?this.width-e:"justify-center"===this.textAlign&&this.isEndOfWrapping(t)?(this.width-e)/2:"justify-right"===this.textAlign&&this.isEndOfWrapping(t)?this.width-e:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.dirty=!0,this._forceClearCache=!1),t},getLineWidth:function(t){if(this.__lineWidths[t])return this.__lineWidths[t];var e,i,r=this._textLines[t];return""===r?e=0:(i=this.measureLine(t),e=i.width),this.__lineWidths[t]=e,e},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},getValueOfPropertyAt:function(t,e,i){var r=this._getStyleDeclaration(t,e);return r&&"undefined"!=typeof r[i]?r[i]:this[i]},_renderTextDecoration:function(t,e){if(this[e]||this.styleHas(e)){for(var i,r,n,s,o,a,c,h,l,u,f,d,g,p,v,b,m=this._getLeftOffset(),_=this._getTopOffset(),y=this._getWidthOfCharSpacing(),x=0,C=this._textLines.length;C>x;x++)if(i=this.getHeightOfLine(x),this[e]||this.styleHas(e,x)){c=this._textLines[x],p=i/this.lineHeight,s=this._getLineLeftOffset(x),u=0,f=0,h=this.getValueOfPropertyAt(x,0,e),b=this.getValueOfPropertyAt(x,0,"fill"),l=_+p*(1-this._fontSizeFraction),r=this.getHeightOfChar(x,0),o=this.getValueOfPropertyAt(x,0,"deltaY");for(var w=0,S=c.length;S>w;w++)d=this.__charBounds[x][w],g=this.getValueOfPropertyAt(x,w,e),v=this.getValueOfPropertyAt(x,w,"fill"),n=this.getHeightOfChar(x,w),a=this.getValueOfPropertyAt(x,w,"deltaY"),(g!==h||v!==b||n!==r||a!==o)&&f>0?(t.fillStyle=b,h&&b&&t.fillRect(m+s+u,l+this.offsets[e]*r+o,f,this.fontSize/15),u=d.left,f=d.width,h=g,b=v,r=n,o=a):f+=d.kernedWidth;t.fillStyle=v,g&&v&&t.fillRect(m+s+u,l+this.offsets[e]*r+o,f-y,this.fontSize/15),_+=i}else _+=i;this._removeShadow(t)}},_getFontDeclaration:function(t,i){var r=t||this,n=this.fontFamily,s=e.Text.genericFonts.indexOf(n.toLowerCase())>-1,o=void 0===n||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||s?r.fontFamily:'"'+r.fontFamily+'"';return[e.isLikelyNode?r.fontWeight:r.fontStyle,e.isLikelyNode?r.fontStyle:r.fontWeight,i?this.CACHE_FONT_SIZE+"px":r.fontSize+"px",o].join(" ")},render:function(t){this.visible&&(!this.canvas||!this.canvas.skipOffscreen||this.group||this.isOnScreen())&&(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),r=new Array(i.length),n=["\n"],s=[],o=0;on;n++){if(t<=i[n].length)return{lineIndex:n,charIndex:t};t-=i[n].length+this.missingNewlineOffset(n)}return{lineIndex:n-1,charIndex:i[n-1].lengthn;n++)r.push(this.getStyleAtPosition(n,i));return r},getStyleAtPosition:function(t,e){var i=this.get2DCursorLocation(t),r=e?this.getCompleteStyleDeclaration(i.lineIndex,i.charIndex):this._getStyleDeclaration(i.lineIndex,i.charIndex);return r||{}},setSelectionStyles:function(t,e,i){"undefined"==typeof e&&(e=this.selectionStart||0),"undefined"==typeof i&&(i=this.selectionEnd||e);for(var r=e;i>r;r++)this._extendStyles(r,t);return this._forceClearCache=!0,this},_getStyleDeclaration:function(t,e){var i=this.styles&&this.styles[t];return i?i[e]:null},getCompleteStyleDeclaration:function(t,e){for(var i,r=this._getStyleDeclaration(t,e)||{},n={},s=0;s-1&&(t.underline=!0),t.textDecoration.indexOf("line-through")>-1&&(t.linethrough=!0),t.textDecoration.indexOf("overline")>-1&&(t.overline=!0),delete t.textDecoration)}fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(t,e){this.callSuper("initialize",t,e),this.initBehavior()},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(t){this.clearContextTop(),this.callSuper("render",t),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(t){this.callSuper("_render",t)},clearContextTop:function(t){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this.canvas.contextTop,i=this.canvas.viewportTransform;e.save(),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(e),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),this._clearTextArea(e),t||e.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var t=this._getCursorBoundaries(),e=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(t,e):this.renderSelection(t,e),e.restore()}},_clearTextArea:function(t){var e=this.width+4,i=this.height+4;t.clearRect(-e/2,-i/2,e,i)},_getCursorBoundaries:function(t){"undefined"==typeof t&&(t=this.selectionStart);var e=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(t);return{left:e,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(t){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var e,i,r,n,s=0,o=0,a=this.get2DCursorLocation(t);r=a.charIndex,i=a.lineIndex;for(var c=0;i>c;c++)s+=this.getHeightOfLine(c);e=this._getLineLeftOffset(i);var h=this.__charBounds[i][r];return h&&(o=h.left),0!==this.charSpacing&&r===this._textLines[i].length&&(o-=this._getWidthOfCharSpacing()),n={top:s,left:e+(o>0?o:0)},this.cursorOffsetCache=n,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,s=this.getValueOfPropertyAt(r,n,"fontSize"),o=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/o,c=t.topOffset,h=this.getValueOfPropertyAt(r,n,"deltaY");c+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-s*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(t,e),e.fillStyle=this.getValueOfPropertyAt(r,n,"fill"),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+t.leftOffset-a/2,c+t.top+h,a,s)},renderSelection:function(t,e){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,n=-1!==this.textAlign.indexOf("justify"),s=this.get2DCursorLocation(i),o=this.get2DCursorLocation(r),a=s.lineIndex,c=o.lineIndex,h=s.charIndex<0?0:s.charIndex,l=o.charIndex<0?0:o.charIndex,u=a;c>=u;u++){var f=this._getLineLeftOffset(u)||0,d=this.getHeightOfLine(u),g=0,p=0,v=0;if(u===a&&(p=this.__charBounds[a][h].left),u>=a&&c>u)v=n&&!this.isEndOfWrapping(u)?this.width:this.getLineWidth(u)||5;else if(u===c)if(0===l)v=this.__charBounds[c][l].left;else{var b=this._getWidthOfCharSpacing();v=this.__charBounds[c][l-1].left+this.__charBounds[c][l-1].width-b}g=d,(this.lineHeight<1||u===c&&this.lineHeight>1)&&(d/=this.lineHeight),this.inCompositionMode?(e.fillStyle=this.compositionColor||"black",e.fillRect(t.left+f+p,t.top+t.topOffset+d,v-p,1)):(e.fillStyle=this.selectionColor,e.fillRect(t.left+f+p,t.top+t.topOffset,v-p,d)),t.topOffset+=g}},getCurrentCharFontSize:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")},getCurrentCharColor:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fill")},_getCurrentCharIndex:function(){var t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}}),fabric.IText.fromObject=function(e,i){if(t(e),e.styles)for(var r in e.styles)for(var n in e.styles[r])t(e.styles[r][n]);fabric.Object._fromObject("IText",e,i,"text")}}();!function(){var t=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var t=this;this.on("added",function(){var e=t.canvas;e&&(e._hasITextHandlers||(e._hasITextHandlers=!0,t._initCanvasHandlers(e)),e._iTextInstances=e._iTextInstances||[],e._iTextInstances.push(t))})},initRemovedHandler:function(){var t=this;this.on("removed",function(){var e=t.canvas;e&&(e._iTextInstances=e._iTextInstances||[],fabric.util.removeFromArray(e._iTextInstances,t),0===e._iTextInstances.length&&(e._hasITextHandlers=!1,t._removeCanvasHandlers(e)))})},_initCanvasHandlers:function(t){t._mouseUpITextHandler=function(){t._iTextInstances&&t._iTextInstances.forEach(function(t){t.__isMousedown=!1})},t.on("mouse:up",t._mouseUpITextHandler)},_removeCanvasHandlers:function(t){t.off("mouse:up",t._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(t,e,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},t.animate("_currentCursorOpacity",e,{duration:i,onComplete:function(){n.isAborted||t[r]()},onChange:function(){t.canvas&&t.selectionStart===t.selectionEnd&&t.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var t=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){t._currentTickCompleteState=t._animateCursor(t,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(t){var e=this,i=t?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){e._tick()},i)},abortCursorAnimation:function(){var t=this._currentTickState||this._currentTickCompleteState,e=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,t&&e&&e.clearContext(e.contextTop||e.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(t){var e=0,i=t-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i--;for(;/\S/.test(this._text[i])&&i>-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i++;for(;/\S/.test(this._text[i])&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this._text[i])&&i0&&rthis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),(this.selectionStart!==i||this.selectionEnd!==r)&&(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(t,e,i){var r=i.slice(0,t),n=fabric.util.string.graphemeSplit(r).length;if(t===e)return{selectionStart:n,selectionEnd:n};var s=i.slice(t,e),o=fabric.util.string.graphemeSplit(s).length;return{selectionStart:n,selectionEnd:n+o}},fromGraphemeToStringSelection:function(t,e,i){var r=i.slice(0,t),n=r.join("").length;if(t===e)return{selectionStart:n,selectionEnd:n};var s=i.slice(t,e),o=s.join("").length;return{selectionStart:n,selectionEnd:n+o}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var t=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=t.selectionStart,this.hiddenTextarea.selectionEnd=t.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var t=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=t.selectionEnd,this.inCompositionMode||(this.selectionStart=t.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.inCompositionMode?this.compositionStart:this.selectionStart,e=this._getCursorBoundaries(t),i=this.get2DCursorLocation(t),r=i.lineIndex,n=i.charIndex,s=this.getValueOfPropertyAt(r,n,"fontSize")*this.lineHeight,o=e.leftOffset,a=this.calcTransformMatrix(),c={x:e.left+o,y:e.top+e.topOffset+s},h=this.canvas.getRetinaScaling(),l=this.canvas.upperCanvasEl,u=l.width/h,f=l.height/h,d=u-s,g=f-s,p=l.clientWidth/u,v=l.clientHeight/f;return c=fabric.util.transformPoint(c,a),c=fabric.util.transformPoint(c,this.canvas.viewportTransform),c.x*=p,c.y*=v,c.x<0&&(c.x=0),c.x>d&&(c.x=d),c.y<0&&(c.y=0),c.y>g&&(c.y=g),c.x+=this.canvas._offset.left,c.y+=this.canvas._offset.top,{left:c.x+"px",top:c.y+"px",fontSize:s+"px",charHeight:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text,e=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,e&&(e.blur&&e.blur(),e.parentNode&&e.parentNode.removeChild(e)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},removeStyleFromTo:function(t,e){var i,r,n=this.get2DCursorLocation(t,!0),s=this.get2DCursorLocation(e,!0),o=n.lineIndex,a=n.charIndex,c=s.lineIndex,h=s.charIndex;if(o!==c){if(this.styles[o])for(i=a;i=i;i++)delete this.styles[i];this.shiftLineStyles(c,o-c)}else if(this.styles[o]){r=this.styles[o];var l,u,f=h-a;for(i=a;h>i;i++)delete r[i];for(u in this.styles[o])l=parseInt(u,10),l>=h&&(r[l-f]=r[u],delete r[u])}},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},restartCursorIfNeeded:function(){(!this._currentTickState||this._currentTickState.isAborted||!this._currentTickCompleteState||this._currentTickCompleteState.isAborted)&&this.initDelayedCursor()},insertNewlineStyleObject:function(e,i,r,n){var s,o={},a=!1,c=this._unwrappedTextLines[e].length===i;r||(r=1),this.shiftLineStyles(e,r),this.styles[e]&&(s=this.styles[e][0===i?i:i-1]);for(var h in this.styles[e]){var l=parseInt(h,10);l>=i&&(a=!0,o[l-i]=this.styles[e][h],c&&0===i||delete this.styles[e][h])}var u=!1;for(a&&!c&&(this.styles[e+r]=o,u=!0),u&&r--;r>0;)n&&n[r-1]?this.styles[e+r]={0:t(n[r-1])}:s?this.styles[e+r]={0:t(s)}:delete this.styles[e+r],r--;this._forceClearCache=!0},insertCharStyleObject:function(e,i,r,n){this.styles||(this.styles={});var s=this.styles[e],o=s?t(s):{};r||(r=1);for(var a in o){var c=parseInt(a,10);c>=i&&(s[c+r]=o[c],o[c-r]||delete s[c])}if(this._forceClearCache=!0,n)for(;r--;)Object.keys(n[r]).length&&(this.styles[e]||(this.styles[e]={}),this.styles[e][i+r]=t(n[r]));else if(s)for(var h=s[i?i-1:1];h&&r--;)this.styles[e][i+r]=t(h)},insertNewStyleBlock:function(t,e,i){for(var r=this.get2DCursorLocation(e,!0),n=[0],s=0,o=0;o0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,n[0],i),i=i&&i.slice(n[0]+1)),s&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+n[0],s);for(var o=1;s>o;o++)n[o]>0?this.insertCharStyleObject(r.lineIndex+o,0,n[o],i):i&&(this.styles[r.lineIndex+o][0]=i[0]),i=i&&i.slice(n[o]+1);n[o]>0&&this.insertCharStyleObject(r.lineIndex+o,0,n[o],i)},setSelectionStartEndWithShift:function(t,e,i){t>=i?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&e>i?"right"===this._selectionDirection?this.selectionEnd=i:this.selectionStart=i:(e===t?this._selectionDirection="right":"left"===this._selectionDirection&&(this._selectionDirection="right",this.selectionStart=e),this.selectionEnd=i)},setSelectionInBoundaries:function(){var t=this.text.length;this.selectionStart>t?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}();fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(t){if(this.canvas){this.__newClickTime=+new Date;var e=t.pointer;this.isTripleClick(e)&&(this.fire("tripleclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(t){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(t.e))},tripleClickHandler:function(t){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(t.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(t){!this.canvas||!this.editable||t.e.button&&1!==t.e.button||(this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(t){!this.canvas||!this.editable||t.e.button&&1!==t.e.button||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(t){if(this.__isMousedown=!1,!(!this.editable||this.group||t.transform&&t.transform.actionPerformed||t.e.button&&1!==t.e.button)){if(this.canvas){var e=this.canvas._activeObject;if(e&&e!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,c=0,h=0,l=this._textLines.length;l>h&&o<=r.y;h++)o+=this.getHeightOfLine(h)*this.scaleY,c=h,h>0&&(a+=this._textLines[h-1].length+this.missingNewlineOffset(h-1));e=this._getLineLeftOffset(c),s=e*this.scaleX,i=this._textLines[c];for(var u=0,f=i.length;f>u&&(n=s,s+=this.__charBounds[c][u].kernedWidth*this.scaleX,s<=r.x);u++)a++;return this._getNewSelectionStartFromOffset(r,n,s,a,f)},_getNewSelectionStartFromOffset:function(t,e,i,r,n){var s=t.x-e,o=i-t.x,a=o>s||0>o?0:1,c=r+a;return this.flipX&&(c=n-c),c>this._text.length&&(c=this._text.length),c}});fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; paddingーtop: "+t.fontSize+";",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing&&!this.inCompositionMode){if(t.keyCode in this.keysMap)this[this.keysMap[t.keyCode]](t);else{if(!(t.keyCode in this.ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this.ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone||this.inCompositionMode?void(this._copyDone=!1):void(t.keyCode in this.ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this.ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.requestRenderAll()))},onInput:function(t){var e=this.fromPaste;if(this.fromPaste=!1,t&&t.stopPropagation(),this.isEditing){var i,r,n,s,o,a=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,h=this._text.length,c=a.length,l=c-h,u=this.selectionStart,f=this.selectionEnd,d=u!==f;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var g=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),p=u>g.selectionStart;d?(i=this._text.slice(u,f),l+=f-u):h>c&&(i=p?this._text.slice(f+l,f):this._text.slice(u,u-l));var n;r=a.slice(g.selectionEnd-l,g.selectionEnd),i&&i.length&&(r.length&&(n=this.getSelectionStyles(u,u+1,!0),n=r.map(function(){return n[0]})),d?(s=u,o=f):p?(s=f-i.length,o=f):(s=f,o=f+i.length),this.removeStyleFromTo(s,o)),r.length&&(e&&r.join("")===fabric.copiedText&&!fabric.disableStyleCopyPaste&&(n=fabric.copiedTextStyle),this.insertNewStyleBlock(r,u,n)),this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())}},onCompositionStart:function(){this.inCompositionMode=!0},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){this.compositionStart=t.target.selectionStart,this.compositionEnd=t.target.selectionEnd,this.updateTextareaPosition()},copy:function(){this.selectionStart!==this.selectionEnd&&(fabric.copiedText=this.getSelectedText(),fabric.copiedTextStyle=fabric.disableStyleCopyPaste?null:this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0)},paste:function(){this.fromPaste=!0},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){var i,r=this._getLineLeftOffset(t);return e>0&&(i=this.__charBounds[t][e-1],r+=i.left+i.width),r},getDownCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(n===this._textLines.length-1||t.metaKey||34===t.keyCode)return this._text.length-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n+1,o),h=this._textLines[n].slice(s);return h.length+a+1+this.missingNewlineOffset(n)},_getSelectionForOffset:function(t,e){return t.shiftKey&&this.selectionStart!==this.selectionEnd&&e?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||t.metaKey||33===t.keyCode)return-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n-1,o),h=this._textLines[n].slice(0,s),c=this.missingNewlineOffset(n-1);return-this._textLines[n-1].length+a-h.length+(1-c)},_getIndexOnLine:function(t,e){for(var i,r,n=this._textLines[t],s=this._getLineLeftOffset(t),o=s,a=0,h=0,c=n.length;c>h;h++)if(i=this.__charBounds[t][h].width,o+=i,o>e){r=!0;var l=o-i,u=o,f=Math.abs(l-e),d=Math.abs(u-e);a=f>d?h:h-1;break}return r||(a=n.length-1),a},moveCursorDown:function(t){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){(0!==this.selectionStart||0!==this.selectionEnd)&&this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return 0>t?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){(0!==this.selectionStart||0!==this.selectionEnd)&&this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}return void 0!==typeof r&&this[e]!==r?(this[e]=r,!0):void 0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t,e){"undefined"==typeof e&&(e=t+1),this.removeStyleFromTo(t,e),this._text.splice(t,e-t),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(t,e,i,r){"undefined"==typeof r&&(r=i),r>i&&this.removeStyleFromTo(i,r);var n=fabric.util.string.graphemeSplit(t);this.insertNewStyleBlock(n,i,e),this._text=[].concat(this._text.slice(0,i),n,this._text.slice(r)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}});!function(){var t=fabric.util.toFixed,e=/ +/g;fabric.util.object.extend(fabric.Text.prototype,{_toSVG:function(){var t=this._getSVGLeftTopOffsets(),e=this._getSVGTextAndBg(t.textTop,t.textLeft);return this._wrapSVGTextAndBg(e)},toSVG:function(t){return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(t){var e=!0,i=this.getSvgTextDecoration(this);return[t.textBgRects.join(""),' ",t.textSpans.join(""),"\n"]},_getSVGTextAndBg:function(t,e){var i,r=[],n=[],s=t;this._setSVGBg(n);for(var o=0,a=this._textLines.length;a>o;o++)i=this._getLineLeftOffset(o),(this.textBackgroundColor||this.styleHas("textBackgroundColor",o))&&this._setSVGTextLineBg(n,o,e+i,s),this._setSVGTextLineText(r,o,e+i,s),s+=this.getHeightOfLine(o);return{textSpans:r,textBgRects:n}},_createTextCharSpan:function(i,r,n,s){var o=i!==i.trim()||i.match(e),a=this.getSvgSpanStyles(r,o),c=a?'style="'+a+'"':"",h=r.deltaY,l="",u=fabric.Object.NUM_FRACTION_DIGITS;return h&&(l=' dy="'+t(h,u)+'" '),['",fabric.util.string.escapeXml(i),""].join("")},_setSVGTextLineText:function(t,e,i,r){var n,s,o,a,c,h=this.getHeightOfLine(e),l=-1!==this.textAlign.indexOf("justify"),u="",f=0,d=this._textLines[e];r+=h*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,p=d.length-1;p>=g;g++)c=g===p||this.charSpacing,u+=d[g],o=this.__charBounds[e][g],0===f?(i+=o.kernedWidth-o.width,f+=o.width):f+=o.kernedWidth,l&&!c&&this._reSpaceAndTab.test(d[g])&&(c=!0),c||(n=n||this.getCompleteStyleDeclaration(e,g),s=this.getCompleteStyleDeclaration(e,g+1),c=this._hasStyleChangedForSvg(n,s)),c&&(a=this._getStyleDeclaration(e,g)||{},t.push(this._createTextCharSpan(u,a,i,r)),u="",n=s,i+=f,f=0)},_pushTextBgRect:function(e,i,r,n,s,o){var a=fabric.Object.NUM_FRACTION_DIGITS;e.push(" \n')},_setSVGTextLineBg:function(t,e,i,r){for(var n,s,o=this._textLines[e],a=this.getHeightOfLine(e)/this.lineHeight,c=0,h=0,l=this.getValueOfPropertyAt(e,0,"textBackgroundColor"),u=0,f=o.length;f>u;u++)n=this.__charBounds[e][u],s=this.getValueOfPropertyAt(e,u,"textBackgroundColor"),s!==l?(l&&this._pushTextBgRect(t,l,i+h,r,c,a),h=n.left,c=n.width,l=s):c+=n.kernedWidth;s&&this._pushTextBgRect(t,s,i+h,r,c,a)},_getFillAttributes:function(t){var e=t&&"string"==typeof t?new fabric.Color(t):"";return e&&e.getSource()&&1!==e.getAlpha()?'opacity="'+e.getAlpha()+'" fill="'+e.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_getSVGLineTopOffset:function(t){for(var e=0,i=0,r=0;t>r;r++)e+=this.getHeightOfLine(r);return i=this.getHeightOfLine(r),{lineTop:e,offset:(this._fontSizeMult-this._fontSizeFraction)*i/(this.lineHeight*this._fontSizeMult)}},getSvgStyles:function(t){var e=fabric.Object.prototype.getSvgStyles.call(this,t);return e+" white-space: pre;"}})}();!function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingFlip:!0,noScaleCache:!1,_dimensionAffectingProps:e.Text.prototype._dimensionAffectingProps.concat("width"),_wordJoiners:/[ \t\r]/,splitByGrapheme:!1,initDimensions:function(){this.__skipDimension||(this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(t){for(var e=0,i=0,r=0,n={},s=0;s0?(i=0,r++,e++):!this.splitByGrapheme&&this._reSpaceAndTab.test(t.graphemeText[r])&&s>0&&(i++,r++),n[s]={line:e,offset:i},r+=t.graphemeLines[s].length,i+=t.graphemeLines[s].length;return n},styleHas:function(t,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return e.Text.prototype.styleHas.call(this,t,i)},isEmptyStyles:function(t){if(!this.styles)return!0;var e,i,r=0,n=t+1,s=!1,o=this._styleMap[t],a=this._styleMap[t+1];o&&(t=o.line,r=o.offset),a&&(n=a.line,s=n===t,e=a.offset),i="undefined"==typeof t?this.styles:{line:this.styles[t]};for(var h in i)for(var c in i[h])if(c>=r&&(!s||e>c))for(var l in i[h][c])return!1;return!0},_getStyleDeclaration:function(t,e){if(this._styleMap&&!this.isWrapping){var i=this._styleMap[t];if(!i)return null;t=i.line,e=i.offset+e}return this.callSuper("_getStyleDeclaration",t,e)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return!!this.styles[e.line]},_setLineStyle:function(t){var e=this._styleMap[t];this.styles[e.line]={}},_wrapText:function(t,e){var i,r=[];for(this.isWrapping=!0,i=0;io;o++){var h=this._getGraphemeBox(t[o],e,o+i,r,s);n+=h.kernedWidth,r=t[o]}return n},_wrapLine:function(t,i,r,n){var s=0,o=this.splitByGrapheme,a=[],h=[],c=o?e.util.string.graphemeSplit(t):t.split(this._wordJoiners),l="",u=0,f=o?"":" ",d=0,g=0,p=0,v=!0,m=o?0:this._getWidthOfCharSpacing(),n=n||0;0===c.length&&c.push([]),r-=n;for(var b=0;b=r&&!v?(a.push(h),h=[],s=d,v=!0):s+=m,v||o||h.push(f),h=h.concat(l),g=this._measureWord([f],i,u),u++,v=!1,d>p&&(p=d);return b&&a.push(h),p+n>this.dynamicMinWidth&&(this.dynamicMinWidth=p-m+n),a},isEndOfWrapping:function(t){return this._styleMap[t+1]?this._styleMap[t+1].line!==this._styleMap[t].line?!0:!1:!0},missingNewlineOffset:function(t){return this.splitByGrapheme?this.isEndOfWrapping(t)?1:0:1},_splitTextIntoLines:function(t){for(var i=e.Text.prototype._splitTextIntoLines.call(this,t),r=this._wrapText(i.lines,this.width),n=new Array(r.length),s=0;s=h.getMinWidth()?(c=d!==h.width,h.set("width",d),c):void 0},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]}})}(); \ No newline at end of file diff --git a/site/assets/js/lzss.js b/site/assets/js/lzss.js new file mode 100644 index 0000000..384dd45 --- /dev/null +++ b/site/assets/js/lzss.js @@ -0,0 +1,557 @@ +'use strict'; + +class LZ { + stepCount = 0; + stepCountBtn; + + found = false; + outputToken = false; + index = 0; + scanningChars = ""; + + colorDefault = "#320b86"; + colorStep = "#03fcd3"; + colorCurrent = "#fcba03"; + + showMouse = false; + fullscreen = false; + + delay = 500; + autostep = false; + autostepElement; + lzss = false; + lzssElement; + + canvas; + text; + searchBufferTitle; + searchBufferText; + + outputTitle; + outputText; + + scanningTitle; + scanningText; + + texts = [] + resizeTexts = []; + + idNamespace = ""; + + async stepThrough() { + this.stepCountBtn.disabled = true; + this.highlight(this.text, this.stepCount, this.colorStep); + + var character = this.text.text[this.stepCount]; + + this.scan(character); + + await this.sleep(this.delay); + var r = await this.lookForScanningChars(); + this.found = r[0] + if (r[1] !== -1) { + this.index = r[1]; + } + if (!this.found && this.scanningChars.length > 1) { + var offset = this.searchBufferText.text.length - this.index; + var length = this.scanningChars.length - 1; + var tok = "<" + offset + "," + length + ">"; + if ((length > tok.length) || !this.lzss) + this.output(tok) + else + this.output(this.scanningChars.substring(0, this.scanningChars.length - 1)) + this.outputToken = true; + this.index = 0; + this.addToSearchBuffer(this.scanningChars.substring(0, this.scanningChars.length - 1)); + this.scanningChars = [this.scanningChars.substring(this.scanningChars.length - 1, this.scanningChars.length)]; + var r = await this.lookForScanningChars(); + this.found = r[0] + if (r[1] !== -1) { + this.index = r[1]; + } + } else if (this.found && this.stepCount == this.text.text.length - 1) { + var offset = this.searchBufferText.text.length - this.index; + var length = this.scanningChars.length; + var tok = "<" + offset + "," + length + ">"; + if ((length > tok.length) || !this.lzss) + this.output(tok) + else + this.output(this.scanningChars.substring(0, this.scanningChars.length)) + this.outputToken = true; + this.found = false; + this.index = 0; + this.addToSearchBuffer(this.scanningChars); + this.resetScanning(); + } + + this.clearHightlights(this.searchBufferText); + + this.canvas.renderAll(); + + if (!this.found && !this.outputToken) { + this.output(character); + this.addToSearchBuffer(this.scanningChars); + this.resetScanning(); + } + + if (this.outputToken) { + this.outputToken = false; + } + + if (!this.fullscreen) { + this.resizeText(); + } + + this.stepCount++; + + if (this.stepCount >= this.text.text.length) { + this.stepCountBtn.disabled = true; + if (this.idNamespace === "encode-" && document.getElementById("decode-input-text")) { + document.getElementById("decode-input-text").dispatchEvent(new Event("change")); + } + } else { + this.stepCountBtn.disabled = false; + } + + if (this.autostep && !this.stepCountBtn.disabled) { + this.stepThrough(); + } + } + + async lookForScanningChars() { + var offset = 0; + + for (var i = this.index; i < this.searchBufferText.text.length; i++) { + if (this.scanningChars.length <= offset) { + // this.found all scanning characters + return [true, i - this.scanningChars.length] + } + + this.highlightRange(this.searchBufferText, i - offset, i + this.scanningChars.length - offset, this.scanningChars, this.colorDefault); + this.highlightNoClear(this.searchBufferText, i, this.colorCurrent); + this.canvas.renderAll(); + await this.sleep(this.delay); + + var searchChar = this.searchBufferText.text[i]; + + if (this.scanningChars[offset] == searchChar) { + offset++; + } else { + offset = 0; + } + } + + return [false, -1] + } + + + output(text) { + this.outputText.text += text; + document.getElementById(this.idNamespace + "output-text").innerHTML += text; + + if (this.idNamespace === "encode-" && document.getElementById("decode-input-text")) { + document.getElementById("decode-input-text").value += text; + } + } + + addToSearchBuffer(text) { + this.searchBufferText.text += text; + this.canvas.renderAll(); + } + + scan(text) { + this.scanningChars += text; + this.scanningText.text = this.scanningChars; + this.canvas.renderAll(); + } + + resetScanning() { + this.scanningChars = ""; + this.scanningText.text = this.scanningChars; + } + + clearHightlights(textObj) { + if (textObj.highlights) { + for (var i = 0; i < textObj.highlights.length; i++) { + this.canvas.remove(textObj.highlights[i]) + } + } + textObj.highlights = []; + + if (textObj.chars) { + for (var i = 0; i < textObj.chars.length; i++) { + this.canvas.remove(textObj.chars[i]) + } + } + textObj.chars = []; + } + + highlightRange(textObj, start, end, chars, color) { + this.clearHightlights(textObj); + + this.highlightRangeNoClear(textObj, start, end, chars, color) + } + + highlightRangeNoClear(textObj, start, end, chars, color) { + for (var i = start; i < end; i++) { + var positions = this.getCharacterOfText(textObj, i); + var rect = new fabric.Rect({ + width: textObj.fontSize / 2, + height: 10, + fill: color, + left: positions[0], + top: positions[1], + }); + this.canvas.add(rect); + textObj.highlights.push(rect); + + if (chars.length > (i - start)) { + var char = new fabric.Text(chars[i - start], { + fontFamily: "Roboto Mono", + fontSize: textObj.fontSize / 2, + left: positions[0], + top: positions[1] + textObj.fontSize / 2, + }) + char.left += char.width / 2 - 3; + char.setCoords() + this.canvas.add(char) + textObj.chars.push(char) + this.canvas.renderAll(); + } + } + } + + highlightNoClear(textObj, index, color) { + var upper = index + 1; + return this.highlightRangeNoClear(textObj, index, upper, "", color); + } + + highlight(textObj, index, color) { + var upper = index + 1; + return this.highlightRange(textObj, index, upper, "", color); + } + + process() { + this.stepCount = 0; + this.stepCountBtn.disabled = false; + this.canvas.clear(); + this.found = false; + document.getElementById(this.idNamespace + "output-text").innerHTML = ""; + + if (this.idNamespace === "encode-" && document.getElementById("decode-input-text")) { + document.getElementById("decode-input-text").value = ""; + } + + var input = document.getElementById(this.idNamespace + "input-text").value; + + // create a this.text object + this.text = new fabric.Text(input, { + fontFamily: "Roboto Mono", + fontSize: 72, + selectable: false, + originX: "left", + originY: "top" + }); + + this.text.reposition = function () { + this.center(); + this.set("top", 20); + if (this.width > this.canvas.width && this.fullscreen) { + this.searchBufferText.left = this.left; + this.searchBufferTitle.left = this.left; + this.outputTitle.left = this.left; + this.outputText.left = this.left; + this.scanningTitle.left = this.left; + this.scanningText.left = this.left; + } + } + + this.canvas.add(this.text); + + this.searchBufferTitle = new fabric.Text("Search Buffer:", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (2 / 4), + selectable: false, + }); + this.searchBufferText = new fabric.Text("", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (2 / 4) + 36, + selectable: false, + }); + + this.searchBufferText.reposition = function () { + this.left = 0; + this.top = this.canvas.height * (2 / 4) + 36; + this.setCoords(); + } + + this.canvas.add(this.searchBufferText); + this.canvas.add(this.searchBufferTitle); + + + this.outputTitle = new fabric.Text("Output:", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (3 / 4), + selectable: false, + }); + this.outputText = new fabric.Text("", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (3 / 4) + 36, + selectable: false, + }); + + this.outputText.reposition = function () { + this.left = 0; + this.top = this.canvas.height * (3 / 4) + 36; + this.setCoords(); + } + + this.canvas.add(this.outputTitle); + this.canvas.add(this.outputText); + + this.scanningTitle = new fabric.Text("Scanning:", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (1 / 4), + selectable: false, + }); + this.scanningText = new fabric.Text("", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (1 / 4) + 36, + selectable: false, + }); + + this.scanningText.reposition = function () { + this.left = 0; + this.top = this.canvas.height * (1 / 4) + 36; + this.setCoords(); + } + + this.canvas.add(this.scanningTitle); + this.canvas.add(this.scanningText); + + // this.text.set("selecteable", false) + + this.texts = [this.searchBufferTitle, this.scanningTitle, this.outputTitle, this.searchBufferText, this.scanningText, this.outputText, this.text] + this.resizeTexts = [this.searchBufferText, this.scanningText, this.outputText, this.text] + + if (this.showMouse) { + var coords = new fabric.Text(" , ", { + fontFamily: "Roboto Mono", + }); + this.canvas.add(coords); + coords.adjustPosition("left"); + coords.top = this.canvas.height - 80; + + console.log(this.text.left + ", " + this.text.top); + + this.canvas.on("mouse:move", function (options) { + var pointer = this.canvas.getPointer(event.e); + var posX = pointer.x; + var posY = pointer.y; + coords.text = posX + ", " + posY; + this.canvas.renderAll(); + }); + } + + if (!this.fullscreen) { + this.resizeText(); + } + + this.text.reposition(); + if (this.text.width > this.canvas.width && this.fullscreen) { + this.canvas.zoomToPoint(new fabric.Point(this.text.left + (this.text.width / 2), this.text.top + (this.text.height / 2)), (this.canvas.width / (this.text.width))); + } + this.canvas.renderAll(); + + this.checkAutostep(); + this.checkLzss(); + } + + + resizeText() { + var _this = this; + this.resizeTexts.forEach(function (textObj) { + while (textObj.width > _this.canvas.width) { + textObj.fontSize--; + _this.canvas.renderAll(); + // console.log(textObj.fontSize) + } + if (textObj.reposition) { + textObj.reposition(); + } + }); + this.canvas.renderAll(); + } + + getCharacterOfText(text, characterIndex) { + var x = text.left; + var y = text.top; + + y = y + text.fontSize; + + var characterWidth = text.width / text.text.length; + x = x + characterWidth * characterIndex; + + return [x, y]; + } + + constructor({ ns = "encode-", fs = false }) { + this.idNamespace = ns; + this.fullscreen = fs; + + var _this = this; + window.addEventListener("load", function () { _this.load(); }); + if (document.readyState === "complete") { this.load(); } + } + + load() { + var _this = this; + document.getElementById(this.idNamespace + "form").onsubmit = function () { + _this.process(); + return false; + }; + + this.stepCountBtn = document.getElementById(this.idNamespace + "step"); + + this.stepCountBtn.addEventListener("click", function () { + _this.stepThrough(); + }); + + this.canvas = document.getElementById(this.idNamespace + "canvas"); + if (!this.canvas.getContext) { + alert("Please use a browser that supports an HTML5 this.canvas"); + } + + // create a wrapper around native this.canvas element (with id="this.canvas") + this.canvas = new fabric.Canvas(this.idNamespace + "canvas", { + selection: false, + evented: false, + enableRetinaScaling: true + }); + + if (this.fullscreen) { + this.canvas.defaultCursor = "all-scroll"; + this.canvas.hoverCursor = "all-scroll"; + } else { + this.canvas.defaultCursor = "default"; + this.canvas.hoverCursor = "default"; + } + + this.canvas.setDimensions({ + width: document.getElementById(this.idNamespace + "canvas-container-jtd").offsetWidth, + height: document.getElementById(this.idNamespace + "canvas-container-jtd").offsetHeight, + }); + + var slider = document.getElementById(this.idNamespace + 'speed-slider'); + + noUiSlider.create(slider, { + start: [150], + range: { + 'min': [0], + 'max': [2500] + }, + step: 50, + connect: true, + }); + + + + var sliderValueElement = document.getElementById(this.idNamespace + 'slider-range-value'); + + slider.noUiSlider.on('update', function (values, handle) { + _this.delay = values[handle]; + sliderValueElement.innerHTML = values[handle]; + }); + + this.autostepElement = document.getElementById(this.idNamespace + "autostep"); + this.autostepElement.addEventListener('change', function () { _this.checkAutostep(); }); + + this.lzssElement = document.getElementById("lzss"); + this.lzssElement.addEventListener('change', function () { _this.checkLzss }) + + document.getElementById(this.idNamespace + "input-text").addEventListener("change", function () { + _this.process(); + }) + + if (this.fullscreen) { + this.canvas.on('mouse:down', function (opt) { + var evt = opt.e; + this.isDragging = true; + this.selection = false; + this.lastPosX = evt.clientX; + this.lastPosY = evt.clientY; + }); + this.canvas.on('mouse:move', function (opt) { + if (this.isDragging) { + var e = opt.e; + var vpt = this.viewportTransform; + vpt[4] += e.clientX - this.lastPosX; + vpt[5] += e.clientY - this.lastPosY; + this.requestRenderAll(); + this.lastPosX = e.clientX; + this.lastPosY = e.clientY; + } + }); + this.canvas.on('mouse:up', function (opt) { + // on mouse up we want to recalculate new interaction + // for all objects, so we call setViewportTransform + this.setViewportTransform(this.viewportTransform); + this.isDragging = false; + this.selection = true; + }); + this.canvas.on('mouse:wheel', function (opt) { + var delta = opt.e.deltaY; + var zoom = this.canvas.getZoom(); + zoom *= 0.990 ** delta; + if (zoom > 20) zoom = 20; + if (zoom < 0.01) zoom = 0.01; + this.canvas.zoomToPoint({ x: opt.e.offsetX, y: opt.e.offsetY }, zoom); + opt.e.preventDefault(); + opt.e.stopPropagation(); + this.texts.forEach(function (textObj) { + console.log(textObj); + this.canvas.remove(textObj); + this.canvas.add(textObj); + }); + }) + } + this.process(); + } + + checkAutostep() { + if (this.autostepElement.checked) { + this.autostep = true; + if (!this.stepCountBtn.disabled) { + this.stepThrough(); + } + } else { + this.autostep = false; + } + } + + checkLzss() { + if (this.lzssElement.checked) { + this.lzss = true; + } else { + this.lzss = false; + } + } + + + + sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } +} \ No newline at end of file diff --git a/site/assets/js/lzss_decode.js b/site/assets/js/lzss_decode.js new file mode 100644 index 0000000..33b8fb5 --- /dev/null +++ b/site/assets/js/lzss_decode.js @@ -0,0 +1,332 @@ +'use strict'; + +class LZDecoder extends LZ { + constructor(...args) { + super(...args); + this.colorStepToken = "#e042f5" + this.inToken = false; + this.parseOffset = false; + + this.offsetText = "Token Offset: " + this.lengthText = "Token Length: " + } + + async stepThrough() { + this.stepCountBtn.disabled = true; + this.highlight(this.text, this.stepCount, this.inToken ? this.colorStepToken : this.colorStep); + + var character = this.text.text[this.stepCount]; + + this.scan(character); + + await this.sleep(this.delay / 2); + + if (character === "<") { + this.inToken = true; + this.parseOffset = true; + + this.clearHightlights(this.text); + this.highlight(this.text, this.stepCount, this.colorStepToken); + + this.tokenOffset.fontWeight = "bold"; + } else if (character === ">") { + this.inToken = false; + this.tokenLength.fontWeight = "normal"; + + var offset = parseInt(this.tokenOffset.text.substr(this.offsetText.length, this.tokenOffset.length)); + var length = parseInt(this.tokenLength.text.substr(this.lengthText.length, this.tokenLength.length)); + + for (var i = 0; i <= offset; i++) { + var start = this.outputText.text.length - i; + var end = this.outputText.text.length - i + length; + this.highlightRange(this.outputText, start, end, (offset - i).toString() + " ".repeat(length - 1), this.colorCurrent); + await this.sleep(this.delay); + } + this.clearHightlights(this.outputText) + await this.sleep(this.delay / 2) + this.output(this.outputText.text.substr(this.outputText.text.length - offset, length)) + + this.tokenOffset.text = this.offsetText; + this.tokenLength.text = this.lengthText; + } else if (character === ",") { + this.parseOffset = false; + this.tokenOffset.fontWeight = "normal"; + this.tokenLength.fontWeight = "bold"; + } else if (this.inToken) { + if (this.parseOffset) { + this.tokenOffset.text += character; + } else { + this.tokenLength.text += character; + } + } else { + this.output(character); + } + + await this.sleep(this.delay / 2); + + this.resetScanning(); + + this.canvas.renderAll(); + + if (!this.fullscreen) { + this.resizeText(); + } + + this.stepCount++; + + if (this.stepCount >= this.text.text.length) { + this.stepCountBtn.disabled = true; + } else { + this.stepCountBtn.disabled = false; + } + + if (this.autostep && !this.stepCountBtn.disabled) { + this.stepThrough(); + } + } + + process() { + this.stepCount = 0; + this.stepCountBtn.disabled = false; + this.canvas.clear(); + this.found = false; + document.getElementById(this.idNamespace + "output-text").innerHTML = ""; + + var input = document.getElementById(this.idNamespace + "input-text").value; + + // create a this.text object + this.text = new fabric.Text(input, { + fontFamily: "Roboto Mono", + fontSize: 72, + selectable: false, + originX: "left", + originY: "top" + }); + + this.text.reposition = function () { + this.center(); + this.set("top", 20); + if (this.width > this.canvas.width && this.fullscreen) { + this.outputTitle.left = this.left; + this.outputText.left = this.left; + this.scanningTitle.left = this.left; + this.scanningText.left = this.left; + } + } + + this.canvas.add(this.text); + + this.tokenOffset = new fabric.Text(this.offsetText, { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (1 / 4), + selectable: false, + }); + this.tokenLength = new fabric.Text(this.lengthText, { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (1 / 4) + (36 * 2), + selectable: false, + }); + + this.canvas.add(this.tokenOffset); + this.canvas.add(this.tokenLength); + + this.outputTitle = new fabric.Text("Output:", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (3 / 4), + selectable: false, + }); + this.outputText = new fabric.Text("", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (3 / 4) + 36, + selectable: false, + }); + + this.outputText.reposition = function () { + this.left = 0; + this.top = this.canvas.height * (3 / 4) + 36; + this.setCoords(); + } + + this.canvas.add(this.outputTitle); + this.canvas.add(this.outputText); + + this.scanningTitle = new fabric.Text("Scanning:", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (2 / 4), + selectable: false, + }); + this.scanningText = new fabric.Text("", { + fontFamily: "Roboto Mono", + fontSize: 36, + left: 0, + top: this.canvas.height * (2 / 4) + 36, + selectable: false, + }); + + this.scanningText.reposition = function () { + this.left = 0; + this.top = this.canvas.height * (2 / 4) + 36; + this.setCoords(); + } + + this.canvas.add(this.scanningTitle); + this.canvas.add(this.scanningText); + + // this.text.set("selecteable", false) + + this.texts = [this.scanningTitle, this.outputTitle, this.scanningText, this.outputText, this.text] + this.resizeTexts = [this.scanningText, this.outputText, this.text] + + if (this.showMouse) { + var coords = new fabric.Text(" , ", { + fontFamily: "Roboto Mono", + }); + this.canvas.add(coords); + coords.adjustPosition("left"); + coords.top = this.canvas.height - 80; + + console.log(this.text.left + ", " + this.text.top); + + this.canvas.on("mouse:move", function (options) { + var pointer = this.canvas.getPointer(event.e); + var posX = pointer.x; + var posY = pointer.y; + coords.text = posX + ", " + posY; + this.canvas.renderAll(); + }); + } + + if (!this.fullscreen) { + this.resizeText(); + } + + this.text.reposition(); + if (this.text.width > this.canvas.width && this.fullscreen) { + this.canvas.zoomToPoint(new fabric.Point(this.text.left + (this.text.width / 2), this.text.top + (this.text.height / 2)), (this.canvas.width / (this.text.width))); + } + this.canvas.renderAll(); + + this.checkAutostep(); + } + + load() { + var _this = this; + document.getElementById(this.idNamespace + "form").onsubmit = function () { + _this.process(); + return false; + }; + + this.stepCountBtn = document.getElementById(this.idNamespace + "step"); + + this.stepCountBtn.addEventListener("click", function () { + _this.stepThrough(); + }); + + this.canvas = document.getElementById(this.idNamespace + "canvas"); + if (!this.canvas.getContext) { + alert("Please use a browser that supports an HTML5 this.canvas"); + } + + // create a wrapper around native this.canvas element (with id="this.canvas") + this.canvas = new fabric.Canvas(this.idNamespace + "canvas", { + selection: false, + evented: false, + enableRetinaScaling: true + }); + + if (this.fullscreen) { + this.canvas.defaultCursor = "all-scroll"; + this.canvas.hoverCursor = "all-scroll"; + } else { + this.canvas.defaultCursor = "default"; + this.canvas.hoverCursor = "default"; + } + + this.canvas.setDimensions({ + width: document.getElementById(this.idNamespace + "canvas-container-jtd").offsetWidth, + height: document.getElementById(this.idNamespace + "canvas-container-jtd").offsetHeight, + }); + + var slider = document.getElementById(this.idNamespace + 'speed-slider'); + + noUiSlider.create(slider, { + start: [150], + range: { + 'min': [0], + 'max': [2500] + }, + step: 50, + connect: true, + }); + + + + var sliderValueElement = document.getElementById(this.idNamespace + 'slider-range-value'); + + slider.noUiSlider.on('update', function (values, handle) { + _this.delay = values[handle]; + sliderValueElement.innerHTML = values[handle]; + }); + + this.autostepElement = document.getElementById(this.idNamespace + "autostep"); + this.autostepElement.addEventListener('change', function () { _this.checkAutostep(); }); + + document.getElementById(this.idNamespace + "input-text").addEventListener("change", function () { + _this.process(); + }) + + if (this.fullscreen) { + this.canvas.on('mouse:down', function (opt) { + var evt = opt.e; + this.isDragging = true; + this.selection = false; + this.lastPosX = evt.clientX; + this.lastPosY = evt.clientY; + }); + this.canvas.on('mouse:move', function (opt) { + if (this.isDragging) { + var e = opt.e; + var vpt = this.viewportTransform; + vpt[4] += e.clientX - this.lastPosX; + vpt[5] += e.clientY - this.lastPosY; + this.requestRenderAll(); + this.lastPosX = e.clientX; + this.lastPosY = e.clientY; + } + }); + this.canvas.on('mouse:up', function (opt) { + // on mouse up we want to recalculate new interaction + // for all objects, so we call setViewportTransform + this.setViewportTransform(this.viewportTransform); + this.isDragging = false; + this.selection = true; + }); + this.canvas.on('mouse:wheel', function (opt) { + var delta = opt.e.deltaY; + var zoom = this.canvas.getZoom(); + zoom *= 0.990 ** delta; + if (zoom > 20) zoom = 20; + if (zoom < 0.01) zoom = 0.01; + this.canvas.zoomToPoint({ x: opt.e.offsetX, y: opt.e.offsetY }, zoom); + opt.e.preventDefault(); + opt.e.stopPropagation(); + this.texts.forEach(function (textObj) { + console.log(textObj); + this.canvas.remove(textObj); + this.canvas.add(textObj); + }); + }) + } + this.process(); + } +} \ No newline at end of file diff --git a/site/assets/js/lzss_decode_fs.js b/site/assets/js/lzss_decode_fs.js new file mode 100644 index 0000000..e092eef --- /dev/null +++ b/site/assets/js/lzss_decode_fs.js @@ -0,0 +1,5 @@ +'use strict'; + +(function () { + var encode = new LZ({ ns: "decode-", fs: true }) +})(); \ No newline at end of file diff --git a/site/assets/js/lzss_encode.js b/site/assets/js/lzss_encode.js new file mode 100644 index 0000000..cb7facb --- /dev/null +++ b/site/assets/js/lzss_encode.js @@ -0,0 +1,5 @@ +'use strict'; + +(function () { + var encode = new LZ({ ns: "encode-" }) +})(); \ No newline at end of file diff --git a/site/assets/js/lzss_encode_fs.js b/site/assets/js/lzss_encode_fs.js new file mode 100644 index 0000000..294a213 --- /dev/null +++ b/site/assets/js/lzss_encode_fs.js @@ -0,0 +1,5 @@ +'use strict'; + +(function () { + var encode = new LZ({ ns: "encode-", fs: true }) +})(); \ No newline at end of file diff --git a/site/assets/js/nouislider.min.js b/site/assets/js/nouislider.min.js new file mode 100644 index 0000000..4b68f9e --- /dev/null +++ b/site/assets/js/nouislider.min.js @@ -0,0 +1,2 @@ +/*! nouislider - 14.6.1 - 8/17/2020 */ +!function(t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():window.noUiSlider=t()}(function(){"use strict";var lt="14.6.1";function ut(t){t.parentElement.removeChild(t)}function a(t){return null!=t}function ct(t){t.preventDefault()}function o(t){return"number"==typeof t&&!isNaN(t)&&isFinite(t)}function pt(t,e,r){0=e[r];)r+=1;return r}function r(t,e,r){if(r>=t.slice(-1)[0])return 100;var n,i,o=f(r,t),s=t[o-1],a=t[o],l=e[o-1],u=e[o];return l+(i=r,p(n=[s,a],n[0]<0?i+Math.abs(n[0]):i-n[0],0)/c(l,u))}function n(t,e,r,n){if(100===n)return n;var i,o,s=f(n,t),a=t[s-1],l=t[s];return r?(l-a)/2this.xPct[i+1];)i++;else t===this.xPct[this.xPct.length-1]&&(i=this.xPct.length-2);r||t!==this.xPct[i+1]||i++;var o=1,s=e[i],a=0,l=0,u=0,c=0;for(n=r?(t-this.xPct[i])/(this.xPct[i+1]-this.xPct[i]):(this.xPct[i+1]-t)/(this.xPct[i+1]-this.xPct[i]);0= 2) required for mode 'count'.");var n=e-1,i=100/n;for(e=[];n--;)e[n]=n*i;e.push(100),t="positions"}return"positions"===t?e.map(function(t){return y.fromStepping(r?y.getStep(t):t)}):"values"===t?r?e.map(function(t){return y.fromStepping(y.getStep(y.toStepping(t)))}):e:void 0}(n,t.values||!1,t.stepped||!1),a=(m=i,g=n,v=s,b={},e=y.xVal[0],r=y.xVal[y.xVal.length-1],S=x=!1,w=0,(v=v.slice().sort(function(t,e){return t-e}).filter(function(t){return!this[t]&&(this[t]=!0)},{}))[0]!==e&&(v.unshift(e),x=!0),v[v.length-1]!==r&&(v.push(r),S=!0),v.forEach(function(t,e){var r,n,i,o,s,a,l,u,c,p,f=t,d=v[e+1],h="steps"===g;if(h&&(r=y.xNumSteps[e]),r||(r=d-f),!1!==f)for(void 0===d&&(d=f),r=Math.max(r,1e-7),n=f;n<=d;n=(n+r).toFixed(7)/1){for(u=(s=(o=y.toStepping(n))-w)/m,p=s/(c=Math.round(u)),i=1;i<=c;i+=1)b[(a=w+i*p).toFixed(5)]=[y.fromStepping(a),0];l=-1r.stepAfter.startValue&&(i=r.stepAfter.startValue-n),o=n>r.thisStep.startValue?r.thisStep.step:!1!==r.stepBefore.step&&n-r.stepBefore.highestStep,100===e?i=null:0===e&&(o=null);var s=y.countStepDecimals();return null!==i&&!1!==i&&(i=Number(i.toFixed(s))),null!==o&&!1!==o&&(o=Number(o.toFixed(s))),[o,i]}return ht(e=h,b.cssClasses.target),0===b.dir?ht(e,b.cssClasses.ltr):ht(e,b.cssClasses.rtl),0===b.ort?ht(e,b.cssClasses.horizontal):ht(e,b.cssClasses.vertical),ht(e,"rtl"===getComputedStyle(e).direction?b.cssClasses.textDirectionRtl:b.cssClasses.textDirectionLtr),l=V(e,b.cssClasses.base),function(t,e){var r=V(e,b.cssClasses.connects);u=[],(s=[]).push(M(r,t[0]));for(var n=0;n { + // Map multiple JavaScript environments to a single common API, + // preferring web standards over Node.js API. + // + // Environments considered: + // - Browsers + // - Node.js + // - Electron + // - Parcel + + if (typeof global !== "undefined") { + // global already exists + } else if (typeof window !== "undefined") { + window.global = window; + } else if (typeof self !== "undefined") { + self.global = self; + } else { + throw new Error("cannot export Go (neither global, window nor self is defined)"); + } + + if (!global.require && typeof require !== "undefined") { + global.require = require; + } + + if (!global.fs && global.require) { + const fs = require("fs"); + if (Object.keys(fs) !== 0) { + global.fs = fs; + } + } + + const enosys = () => { + const err = new Error("not implemented"); + err.code = "ENOSYS"; + return err; + }; + + if (!global.fs) { + let outputBuf = ""; + global.fs = { + constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused + writeSync(fd, buf) { + outputBuf += decoder.decode(buf); + const nl = outputBuf.lastIndexOf("\n"); + if (nl != -1) { + console.log(outputBuf.substr(0, nl)); + outputBuf = outputBuf.substr(nl + 1); + } + return buf.length; + }, + write(fd, buf, offset, length, position, callback) { + if (offset !== 0 || length !== buf.length || position !== null) { + callback(enosys()); + return; + } + const n = this.writeSync(fd, buf); + callback(null, n); + }, + chmod(path, mode, callback) { callback(enosys()); }, + chown(path, uid, gid, callback) { callback(enosys()); }, + close(fd, callback) { callback(enosys()); }, + fchmod(fd, mode, callback) { callback(enosys()); }, + fchown(fd, uid, gid, callback) { callback(enosys()); }, + fstat(fd, callback) { callback(enosys()); }, + fsync(fd, callback) { callback(null); }, + ftruncate(fd, length, callback) { callback(enosys()); }, + lchown(path, uid, gid, callback) { callback(enosys()); }, + link(path, link, callback) { callback(enosys()); }, + lstat(path, callback) { callback(enosys()); }, + mkdir(path, perm, callback) { callback(enosys()); }, + open(path, flags, mode, callback) { callback(enosys()); }, + read(fd, buffer, offset, length, position, callback) { callback(enosys()); }, + readdir(path, callback) { callback(enosys()); }, + readlink(path, callback) { callback(enosys()); }, + rename(from, to, callback) { callback(enosys()); }, + rmdir(path, callback) { callback(enosys()); }, + stat(path, callback) { callback(enosys()); }, + symlink(path, link, callback) { callback(enosys()); }, + truncate(path, length, callback) { callback(enosys()); }, + unlink(path, callback) { callback(enosys()); }, + utimes(path, atime, mtime, callback) { callback(enosys()); }, + }; + } + + if (!global.process) { + global.process = { + getuid() { return -1; }, + getgid() { return -1; }, + geteuid() { return -1; }, + getegid() { return -1; }, + getgroups() { throw enosys(); }, + pid: -1, + ppid: -1, + umask() { throw enosys(); }, + cwd() { throw enosys(); }, + chdir() { throw enosys(); }, + } + } + + if (!global.crypto) { + const nodeCrypto = require("crypto"); + global.crypto = { + getRandomValues(b) { + nodeCrypto.randomFillSync(b); + }, + }; + } + + if (!global.performance) { + global.performance = { + now() { + const [sec, nsec] = process.hrtime(); + return sec * 1000 + nsec / 1000000; + }, + }; + } + + if (!global.TextEncoder) { + global.TextEncoder = require("util").TextEncoder; + } + + if (!global.TextDecoder) { + global.TextDecoder = require("util").TextDecoder; + } + + // End of polyfills for common API. + + const encoder = new TextEncoder("utf-8"); + const decoder = new TextDecoder("utf-8"); + + global.Go = class { + constructor() { + this.argv = ["js"]; + this.env = {}; + this.exit = (code) => { + if (code !== 0) { + console.warn("exit code:", code); + } + }; + this._exitPromise = new Promise((resolve) => { + this._resolveExitPromise = resolve; + }); + this._pendingEvent = null; + this._scheduledTimeouts = new Map(); + this._nextCallbackTimeoutID = 1; + + const setInt64 = (addr, v) => { + this.mem.setUint32(addr + 0, v, true); + this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true); + } + + const getInt64 = (addr) => { + const low = this.mem.getUint32(addr + 0, true); + const high = this.mem.getInt32(addr + 4, true); + return low + high * 4294967296; + } + + const loadValue = (addr) => { + const f = this.mem.getFloat64(addr, true); + if (f === 0) { + return undefined; + } + if (!isNaN(f)) { + return f; + } + + const id = this.mem.getUint32(addr, true); + return this._values[id]; + } + + const storeValue = (addr, v) => { + const nanHead = 0x7FF80000; + + if (typeof v === "number" && v !== 0) { + if (isNaN(v)) { + this.mem.setUint32(addr + 4, nanHead, true); + this.mem.setUint32(addr, 0, true); + return; + } + this.mem.setFloat64(addr, v, true); + return; + } + + if (v === undefined) { + this.mem.setFloat64(addr, 0, true); + return; + } + + let id = this._ids.get(v); + if (id === undefined) { + id = this._idPool.pop(); + if (id === undefined) { + id = this._values.length; + } + this._values[id] = v; + this._goRefCounts[id] = 0; + this._ids.set(v, id); + } + this._goRefCounts[id]++; + let typeFlag = 0; + switch (typeof v) { + case "object": + if (v !== null) { + typeFlag = 1; + } + break; + case "string": + typeFlag = 2; + break; + case "symbol": + typeFlag = 3; + break; + case "function": + typeFlag = 4; + break; + } + this.mem.setUint32(addr + 4, nanHead | typeFlag, true); + this.mem.setUint32(addr, id, true); + } + + const loadSlice = (addr) => { + const array = getInt64(addr + 0); + const len = getInt64(addr + 8); + return new Uint8Array(this._inst.exports.mem.buffer, array, len); + } + + const loadSliceOfValues = (addr) => { + const array = getInt64(addr + 0); + const len = getInt64(addr + 8); + const a = new Array(len); + for (let i = 0; i < len; i++) { + a[i] = loadValue(array + i * 8); + } + return a; + } + + const loadString = (addr) => { + const saddr = getInt64(addr + 0); + const len = getInt64(addr + 8); + return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len)); + } + + const timeOrigin = Date.now() - performance.now(); + this.importObject = { + go: { + // Go's SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters) + // may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported + // function. A goroutine can switch to a new stack if the current stack is too small (see morestack function). + // This changes the SP, thus we have to update the SP used by the imported function. + + // func wasmExit(code int32) + "runtime.wasmExit": (sp) => { + const code = this.mem.getInt32(sp + 8, true); + this.exited = true; + delete this._inst; + delete this._values; + delete this._goRefCounts; + delete this._ids; + delete this._idPool; + this.exit(code); + }, + + // func wasmWrite(fd uintptr, p unsafe.Pointer, n int32) + "runtime.wasmWrite": (sp) => { + const fd = getInt64(sp + 8); + const p = getInt64(sp + 16); + const n = this.mem.getInt32(sp + 24, true); + fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n)); + }, + + // func resetMemoryDataView() + "runtime.resetMemoryDataView": (sp) => { + this.mem = new DataView(this._inst.exports.mem.buffer); + }, + + // func nanotime1() int64 + "runtime.nanotime1": (sp) => { + setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000); + }, + + // func walltime1() (sec int64, nsec int32) + "runtime.walltime1": (sp) => { + const msec = (new Date).getTime(); + setInt64(sp + 8, msec / 1000); + this.mem.setInt32(sp + 16, (msec % 1000) * 1000000, true); + }, + + // func scheduleTimeoutEvent(delay int64) int32 + "runtime.scheduleTimeoutEvent": (sp) => { + const id = this._nextCallbackTimeoutID; + this._nextCallbackTimeoutID++; + this._scheduledTimeouts.set(id, setTimeout( + () => { + this._resume(); + while (this._scheduledTimeouts.has(id)) { + // for some reason Go failed to register the timeout event, log and try again + // (temporary workaround for https://github.com/golang/go/issues/28975) + console.warn("scheduleTimeoutEvent: missed timeout event"); + this._resume(); + } + }, + getInt64(sp + 8) + 1, // setTimeout has been seen to fire up to 1 millisecond early + )); + this.mem.setInt32(sp + 16, id, true); + }, + + // func clearTimeoutEvent(id int32) + "runtime.clearTimeoutEvent": (sp) => { + const id = this.mem.getInt32(sp + 8, true); + clearTimeout(this._scheduledTimeouts.get(id)); + this._scheduledTimeouts.delete(id); + }, + + // func getRandomData(r []byte) + "runtime.getRandomData": (sp) => { + crypto.getRandomValues(loadSlice(sp + 8)); + }, + + // func finalizeRef(v ref) + "syscall/js.finalizeRef": (sp) => { + const id = this.mem.getUint32(sp + 8, true); + this._goRefCounts[id]--; + if (this._goRefCounts[id] === 0) { + const v = this._values[id]; + this._values[id] = null; + this._ids.delete(v); + this._idPool.push(id); + } + }, + + // func stringVal(value string) ref + "syscall/js.stringVal": (sp) => { + storeValue(sp + 24, loadString(sp + 8)); + }, + + // func valueGet(v ref, p string) ref + "syscall/js.valueGet": (sp) => { + const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16)); + sp = this._inst.exports.getsp(); // see comment above + storeValue(sp + 32, result); + }, + + // func valueSet(v ref, p string, x ref) + "syscall/js.valueSet": (sp) => { + Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32)); + }, + + // func valueDelete(v ref, p string) + "syscall/js.valueDelete": (sp) => { + Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16)); + }, + + // func valueIndex(v ref, i int) ref + "syscall/js.valueIndex": (sp) => { + storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16))); + }, + + // valueSetIndex(v ref, i int, x ref) + "syscall/js.valueSetIndex": (sp) => { + Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24)); + }, + + // func valueCall(v ref, m string, args []ref) (ref, bool) + "syscall/js.valueCall": (sp) => { + try { + const v = loadValue(sp + 8); + const m = Reflect.get(v, loadString(sp + 16)); + const args = loadSliceOfValues(sp + 32); + const result = Reflect.apply(m, v, args); + sp = this._inst.exports.getsp(); // see comment above + storeValue(sp + 56, result); + this.mem.setUint8(sp + 64, 1); + } catch (err) { + storeValue(sp + 56, err); + this.mem.setUint8(sp + 64, 0); + } + }, + + // func valueInvoke(v ref, args []ref) (ref, bool) + "syscall/js.valueInvoke": (sp) => { + try { + const v = loadValue(sp + 8); + const args = loadSliceOfValues(sp + 16); + const result = Reflect.apply(v, undefined, args); + sp = this._inst.exports.getsp(); // see comment above + storeValue(sp + 40, result); + this.mem.setUint8(sp + 48, 1); + } catch (err) { + storeValue(sp + 40, err); + this.mem.setUint8(sp + 48, 0); + } + }, + + // func valueNew(v ref, args []ref) (ref, bool) + "syscall/js.valueNew": (sp) => { + try { + const v = loadValue(sp + 8); + const args = loadSliceOfValues(sp + 16); + const result = Reflect.construct(v, args); + sp = this._inst.exports.getsp(); // see comment above + storeValue(sp + 40, result); + this.mem.setUint8(sp + 48, 1); + } catch (err) { + storeValue(sp + 40, err); + this.mem.setUint8(sp + 48, 0); + } + }, + + // func valueLength(v ref) int + "syscall/js.valueLength": (sp) => { + setInt64(sp + 16, parseInt(loadValue(sp + 8).length)); + }, + + // valuePrepareString(v ref) (ref, int) + "syscall/js.valuePrepareString": (sp) => { + const str = encoder.encode(String(loadValue(sp + 8))); + storeValue(sp + 16, str); + setInt64(sp + 24, str.length); + }, + + // valueLoadString(v ref, b []byte) + "syscall/js.valueLoadString": (sp) => { + const str = loadValue(sp + 8); + loadSlice(sp + 16).set(str); + }, + + // func valueInstanceOf(v ref, t ref) bool + "syscall/js.valueInstanceOf": (sp) => { + this.mem.setUint8(sp + 24, (loadValue(sp + 8) instanceof loadValue(sp + 16)) ? 1 : 0); + }, + + // func copyBytesToGo(dst []byte, src ref) (int, bool) + "syscall/js.copyBytesToGo": (sp) => { + const dst = loadSlice(sp + 8); + const src = loadValue(sp + 32); + if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) { + this.mem.setUint8(sp + 48, 0); + return; + } + const toCopy = src.subarray(0, dst.length); + dst.set(toCopy); + setInt64(sp + 40, toCopy.length); + this.mem.setUint8(sp + 48, 1); + }, + + // func copyBytesToJS(dst ref, src []byte) (int, bool) + "syscall/js.copyBytesToJS": (sp) => { + const dst = loadValue(sp + 8); + const src = loadSlice(sp + 16); + if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) { + this.mem.setUint8(sp + 48, 0); + return; + } + const toCopy = src.subarray(0, dst.length); + dst.set(toCopy); + setInt64(sp + 40, toCopy.length); + this.mem.setUint8(sp + 48, 1); + }, + + "debug": (value) => { + console.log(value); + }, + } + }; + } + + async run(instance) { + this._inst = instance; + this.mem = new DataView(this._inst.exports.mem.buffer); + this._values = [ // JS values that Go currently has references to, indexed by reference id + NaN, + 0, + null, + true, + false, + global, + this, + ]; + this._goRefCounts = new Array(this._values.length).fill(Infinity); // number of references that Go has to a JS value, indexed by reference id + this._ids = new Map([ // mapping from JS values to reference ids + [0, 1], + [null, 2], + [true, 3], + [false, 4], + [global, 5], + [this, 6], + ]); + this._idPool = []; // unused ids that have been garbage collected + this.exited = false; // whether the Go program has exited + + // Pass command line arguments and environment variables to WebAssembly by writing them to the linear memory. + let offset = 4096; + + const strPtr = (str) => { + const ptr = offset; + const bytes = encoder.encode(str + "\0"); + new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes); + offset += bytes.length; + if (offset % 8 !== 0) { + offset += 8 - (offset % 8); + } + return ptr; + }; + + const argc = this.argv.length; + + const argvPtrs = []; + this.argv.forEach((arg) => { + argvPtrs.push(strPtr(arg)); + }); + argvPtrs.push(0); + + const keys = Object.keys(this.env).sort(); + keys.forEach((key) => { + argvPtrs.push(strPtr(`${key}=${this.env[key]}`)); + }); + argvPtrs.push(0); + + const argv = offset; + argvPtrs.forEach((ptr) => { + this.mem.setUint32(offset, ptr, true); + this.mem.setUint32(offset + 4, 0, true); + offset += 8; + }); + + this._inst.exports.run(argc, argv); + if (this.exited) { + this._resolveExitPromise(); + } + await this._exitPromise; + } + + _resume() { + if (this.exited) { + throw new Error("Go program has already exited"); + } + this._inst.exports.resume(); + if (this.exited) { + this._resolveExitPromise(); + } + } + + _makeFuncWrapper(id) { + const go = this; + return function () { + const event = { id: id, this: this, args: arguments }; + go._pendingEvent = event; + go._resume(); + return event.result; + }; + } + } + + if ( + global.require && + global.require.main === module && + global.process && + global.process.versions && + !global.process.versions.electron + ) { + if (process.argv.length < 3) { + console.error("usage: go_js_wasm_exec [wasm binary] [arguments]"); + process.exit(1); + } + + const go = new Go(); + go.argv = process.argv.slice(2); + go.env = Object.assign({ TMPDIR: require("os").tmpdir() }, process.env); + go.exit = process.exit; + WebAssembly.instantiate(fs.readFileSync(process.argv[2]), go.importObject).then((result) => { + process.on("exit", (code) => { // Node.js exits if no event handler is pending + if (code === 0 && !go.exited) { + // deadlock, make Go print error and stack traces + go._pendingEvent = { id: 0 }; + go._resume(); + } + }); + return go.run(result.instance); + }).catch((err) => { + console.error(err); + process.exit(1); + }); + } +})(); diff --git a/site/assets/wasm/arithmetic.wasm b/site/assets/wasm/arithmetic.wasm new file mode 100755 index 0000000..2651d62 Binary files /dev/null and b/site/assets/wasm/arithmetic.wasm differ diff --git a/site/attributions.md b/site/attributions.md new file mode 100644 index 0000000..35cff84 --- /dev/null +++ b/site/attributions.md @@ -0,0 +1,16 @@ +--- +layout: default +title: Attributions +nav_order: 9 +--- + +# Attributions + +This non-exhaustive list of wonderful projects, frameworks, tools, and libraries were used to help build this website. + +- [Just the Docs Jekyll theme](https://github.com/pmarsceill/just-the-docs) +- [Jekyll](https://jekyllrb.com/) +- [pretty-checkbox.css](https://github.com/lokesh-coder/pretty-checkbox) +- [noUiSlider](https://github.com/leongersen/noUiSlider) +- [Pure CSS](https://github.com/pure-css/pure/) +- [Fabric.js](https://github.com/fabricjs/fabric.js) diff --git a/site/contributing.md b/site/contributing.md new file mode 100644 index 0000000..7a28aa8 --- /dev/null +++ b/site/contributing.md @@ -0,0 +1,11 @@ +--- +layout: default +title: Contributing +nav_order: 8 +--- + +# Contributing + +This site is intended to be used as living documentation that is constantly updated by the community, if you feel like something's missing or would simply like to contribute, please [create an issue](https://github.com/go-compression/go-compression.github.io/issues/new) or [create a pull request](https://github.com/go-compression/go-compression.github.io/compare). + +The best way to ask a question is to [file an issue](https://github.com/go-compression/go-compression.github.io/issues/new) and we'll try to get back to you as soon as possible. diff --git a/site/getting_started.md b/site/getting_started.md new file mode 100644 index 0000000..9d5bdc8 --- /dev/null +++ b/site/getting_started.md @@ -0,0 +1,15 @@ +--- +layout: default +title: Getting Started +nav_order: 2 +--- + +# Getting Started + +When jumping into this guide, it's important to identify what you want to gain from it. For example, if you'd simply like to familiarize yourself with different compression algorithms, you could just skim over the different algorithms and play with the interactive algorithms. However, if you're interested in understanding each algorithm at a deep level and creating your implementations, you'd likely want to take more time to read each page section-by-section. + +Though as a general guide, it's a good idea to get started in the [interactive algorithms section]({% link interactive/interactive.md %}) to get an idea of how each algorithm works visually by experimenting. After taking some time to see how each algorithm works, it's a good idea to dive into the [overview of algorithms]({% link algorithms/overview.md %}) and get started with an algorithm that interests you (Lempel-Ziv is a good starting choice). + +Lastly, you should familiarize yourself with the [reference]({% link reference/reference.md %}) section and skim over any subjects you feel unfamiliar with. This section acts as a quick reference about different subjects that will inevitably come into play during the understanding and implementing of compression algorithms. + +Or, if you'd like to dive right in, you should start with [Lempel-Ziv]({% link algorithms/lz.md %}) and [Lempel-Ziv-Storer-Szymanski]({% link algorithms/lzss.md %}). diff --git a/index.md b/site/index.md similarity index 60% rename from index.md rename to site/index.md index c96bc36..de35d9d 100644 --- a/index.md +++ b/site/index.md @@ -1,6 +1,6 @@ --- layout: default -title: The Hitchhiker's Guide to Compression +title: Overview nav_order: 1 --- @@ -8,15 +8,15 @@ nav_order: 1 Far out in the uncharted backwaters of the unfashionable end of the western spiral arm of the Galaxy lies a small unregarded yellow sun. -Orbiting this at a distance of roughly ninety-two million miles is an utterly insignificant little blue green planet whose ape- descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea. +Orbiting this at a distance of roughly ninety-two million miles is an utterly insignificant little blue green planet whose ape-descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea. -This planet has - or rather had - a problem, which was this: files were too big. Many solutions were suggested for solving this problem via lossless compression, such as Lempel-Ziv and Huffman coding, but most of these were implemented into common compression utilities and promptly forgotten. Today, much of the relevant work to compression is in an obscure corner of the internet between lengthy PhD thesis papers and hard-to-find gems. +This planet has a problem, which was this: files are too big. Many solutions were suggested for solving this problem via lossless compression, such as Lempel-Ziv and Huffman coding, but most of these were implemented into common compression utilities and promptly forgotten. Today, much of the relevant work to compression is in an obscure corner of the internet between lengthy PhD thesis papers and hard-to-find gems. ## Why compression Lossless file compression, and file compression in general has become a lost art. The modern developer community has moved on from working on compression algorithms to bigger and better problems, such as creating the next major NodeJS framework. However, compression as it stands in the computer science aspect is still as interesting as it was in 1980s, possibly [even more so today](https://www.webfx.com/internet-real-time/) with an estimated [463 Exabytes of data to be created everyday in 2025](http://rcnt.eu/un8bg). -It's no secret that the internet is growing rapidly, and with it more people are becoming connected. From urban dwellers to rural farmers, fast internet speeds are not a given. To counter this, there [are](https://www.bbc.com/news/technology-44886803) [numerous](https://www.microsoft.com/en-us/corporate-responsibility/airband) [projects](https://en.wikipedia.org/wiki/Starlink) focused on improving internet speeds for rural users, but there are almost no projects focused on the other half of improving internet access: compressing data. +It's no secret that the internet is growing rapidly, and with it more people are becoming connected. From urban dwellers to rural farmers, fast internet speeds are not a given. To counter this, there [are](https://www.bbc.com/news/technology-44886803) [numerous](https://www.microsoft.com/en-us/corporate-responsibility/airband) [projects](https://en.wikipedia.org/wiki/Starlink) focused on improving internet speeds for rural users, but there are far fewer projects focused on the other half of improving internet access: compressing data. These claims about the "lost of art of compression" may seem a bit unsubstantiated, as there are new and actively developed compression projects out there today, such as, but not limited to: @@ -25,11 +25,17 @@ These claims about the "lost of art of compression" may seem a bit unsubstantiat - [LZ4](https://github.com/lz4/lz4) - [Shrynk](https://github.com/kootenpv/shrynk) -However this argument still holds true, compression isn't really mainstream, and I don't know why it isn't. Internet speeds is a real problem and better compression stands as a promising solution. The possibilities of better compression are truly endless: +There are also some other notable projects which I've included at the end, but either they aren't active or universal enough to be included in this short list. + +However this argument still holds true, compression isn't really mainstream, and I don't know why it isn't. Internet speeds are a real problem for much of the world and better compression stands as a promising solution. The possibilities of better compression are truly endless: - Faster 4k video streaming -- Faster app downloads -- Less delay loading websites and content +- Faster download speeds +- Faster upload speeds +- Faster website and content loading speeds +- Better accessibility to services in regions with poor internet connections +- Higher quality video and voice calls +- Less expensive deep data storage costs - and more ## The Goal @@ -40,14 +46,18 @@ Additionally, this project itself is intended to be a community-sourced resource With all of that said, if you're interested in learning more about the world of compression, you should [get started]({% link getting_started.md %}). -## Notable Compression Project Mentions +## Forewarning -There are also some other notable projects which I've included at the end, but either they aren't active enough or univeral to be included here. +As a forewarning it should be noted that although this project is intended to be comprehensive, it is not. This is because the two primary authors, myself, Phillip Cutter, and Arnav Chawla, are currently high school seniors who are working on finishing college applications, schoolwork, internships, and other commitments and do not have the time to continue this project, and [Raisin]({% link reference/raisin.md %}), at the same rate that they did over the first three months. However, both of us are committed to maintaining this project and improving it for the forseeable future. + +## Notable Compression Project Mentions Notable mentions: - [LZHAM](https://github.com/richgel999/lzham_codec) (not super active) -- [Google's WebP](https://developers.google.com/speed/webp/) (only for images, but a notable mention) +- [Google's WebP](https://developers.google.com/speed/webp/) (only for images) - [Dropbox's DivANS](https://github.com/dropbox/divans) - [Dropbox's avrecode](https://github.com/dropbox/avrecode) +- [Dropbox's Lepton](https://github.com/dropbox/lepton) - [H.266/VCC Codec](https://www.leawo.org/tutorial/h266-vs-h-265-whats-the-difference-1398.html) (domain-specific for video) +- [Pied Piper Middle-Out](http://www.piedpiper.com/) (abandoned and closed-source unfortunately) diff --git a/site/interactive/arithmetic.md b/site/interactive/arithmetic.md new file mode 100644 index 0000000..6efd445 --- /dev/null +++ b/site/interactive/arithmetic.md @@ -0,0 +1,10 @@ +--- +layout: arithmetic/interactive +title: Arithmetic Encoder +parent: Interactive Algorithms +nav_order: 2 +--- + +# Arithmetic Encoder + + diff --git a/site/interactive/interactive.md b/site/interactive/interactive.md new file mode 100644 index 0000000..58d143f --- /dev/null +++ b/site/interactive/interactive.md @@ -0,0 +1,10 @@ +--- +layout: default +title: Interactive Algorithms +nav_order: 4 +has_children: true +--- + +# Interactive Algorithms + +This section serves as a collection of interactive algorithms that make it easier to experiment and visually see how an data compression algorithm works. diff --git a/site/interactive/lz/fullscreen_decoder.md b/site/interactive/lz/fullscreen_decoder.md new file mode 100644 index 0000000..8354402 --- /dev/null +++ b/site/interactive/lz/fullscreen_decoder.md @@ -0,0 +1,15 @@ +--- +layout: lzss/fullscreen_decoder +title: Fullscreen Decoder +parent: LZ77/LZSS +grand_parent: Interactive Algorithms +nav_order: 3 +--- + +# Fullscreen Decoder + +The fullscreen version: + +- Does not resize content to fit your canvas +- Allows you to pan and zoom +- Has a larger canvas window diff --git a/site/interactive/lz/fullscreen_encoder.md b/site/interactive/lz/fullscreen_encoder.md new file mode 100644 index 0000000..d207734 --- /dev/null +++ b/site/interactive/lz/fullscreen_encoder.md @@ -0,0 +1,15 @@ +--- +layout: lzss/fullscreen_encoder +title: Fullscreen Encoder +parent: LZ77/LZSS +grand_parent: Interactive Algorithms +nav_order: 2 +--- + +# Fullscreen Encoder + +The fullscreen version: + +- Does not resize content to fit your canvas +- Allows you to pan and zoom +- Has a larger canvas window diff --git a/site/interactive/lz/lz.md b/site/interactive/lz/lz.md new file mode 100644 index 0000000..b99dbda --- /dev/null +++ b/site/interactive/lz/lz.md @@ -0,0 +1,9 @@ +--- +layout: lzss/interactive +title: LZ77/LZSS +parent: Interactive Algorithms +has_children: true +nav_order: 1 +--- + +# LZ77/LZSS diff --git a/site/reference/bytes.md b/site/reference/bytes.md new file mode 100644 index 0000000..930bff1 --- /dev/null +++ b/site/reference/bytes.md @@ -0,0 +1,146 @@ +--- +layout: default +title: Bytes and Binary +nav_order: 1 +parent: Reference +--- + +# Bytes and Binary + +When it comes to working with computers, one thing becomes very apparently: there's a lot of data. Now naturally, when you have a lot of data you have to figure out how you want to **store** the data. Just like how leftover Christmas decorations are stored in bins inside of garages, data is stored inside of bytes inside of a file. So what is a byte? + +Bytes are a term used to represent 8 bits, simply a `1` or a `0`. So, a byte might look something like this: `00111010`. + +## Binary + +These ones and zeroes are used in something called binary. Now, in most of the world you count with a base-10 decimal number system. One is `1`, two is `2`, all the way up to 10 being `10`, and so forth. The number system is based around `10` being the base. + +| Base | Power | Decimal | +| :--: | :---: | :-----: | +| 10 | 0 | 1 | +| 10 | 1 | 10 | +| 10 | 2 | 100 | +| 10 | 3 | 1,000 | + +Now binary works the same way, except the base is actually 2, not 10. + +| Base | Power | Decimal | Binary | +| :--: | :---: | :-----: | :----: | +| 2 | 0 | 1 | 0001 | +| 2 | 1 | 2 | 0010 | +| 2 | 2 | 4 | 0100 | +| 2 | 3 | 8 | 1000 | + +With this simple example, you start to see a simple pattern emerge. The right-most bit (the 1 or 0) represents 2^0, left of that is 2^1, left of that is 2^2, etc. Using this simple system we can represent any number using 1s and 0s, which is precisely what a computer uses to store numbers. + +Let's take a look at a few more examples because unless you have a PhD in mathematics or computer science, the entire "different number base" thing might be still be a bit confusing. + +So let's take the binary number `0110010`, and convert it to decimal so our human minds can understand what it means. Now remember, the right most bit (also known as the [least significant bit](https://en.wikipedia.org/wiki/Bit_numbering#Least_significant_bit)) represents 2^0, which is 1. This means that if the right most bit is a `1`, then we add `1` to the result, otherwise we add `0`. The next bit to the left represents 2^1, which is 2, so if it's a `1`, then we add a `2`, otherwise we add a `0`. Hopefully the pattern is starting to become clear: + +| Binary | 0 | 1 | 1 | 0 | 0 | 1 | 0 | +| ------: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | +| Decimal | 64 | 32 | 16 | 8 | 4 | 2 | 1 | + +Then we can add our decimal numbers together: + +| 0\*64 | 1\*32 | 1\*16 | 0\*8 | 0\*4 | 1\*2 | 0\*1 | +| :---: | :---: | :---: | :--: | :--: | :--: | :--: | +| 0 + | 32 + | 16 + | 0 + | 0 + | 2 + | 0 | = 50 | + +And we get `50`! + +If it's still a bit cloudy or you would just like some more practice, make sure to search online for information about "binary numbers", or check out some of these great resources: + +- [Wikipedia](https://en.wikipedia.org/wiki/Binary_number) +- [RapidTables Binary Calculator](https://www.rapidtables.com/convert/number/decimal-to-binary.html) +- [Visual 8-bit Binary to Decimal Converter](https://www.openprocessing.org/sketch/160659/) + +So now that you understand binary, where do they fit within bytes and how do they store text? + +## Bytes + +Bytes are the answer to storing text, and basically everything, on a computer. A byte is essentially a chunk of bits (1s and 0s), generally 8. Bytes are used nearly everywhere in a computer, they're used to store variables in memory, to transfer data over wires or the internet, and most importantly to compression, to store data in files. + +Every character in English is stored as a **byte** in a file. And as we know a byte is 8 bits. So, from our knowledge we know that the largest number an 8 bit binary number can store is 2^8, or 256. This means that a single byte can store exactly 256 different numbers, or in our case, 256 unique characters. + +In 1960 computers are still brand new and largely used by English speaking countries, so there was a need for a system to represent English characters, without worrying about any other language. The answer to this is [ASCII](https://en.wikipedia.org/wiki/ASCII). While there's a massive amount of history behind ASCII and all of the other computer history being created at the time, the basis is simple. The English alphabet, and generally every other special character English uses can be assigned a number from 0-255 (remember the largest 8 bit number is `11111111`, which is only 255 in decimal, but `00000000` represents 0, so there are 256 possibilities). + +Let's take a look at the ASCII codes for capital A-F on the alphabet: + +| Letter | ASCII Code | Binary Code | +| :----: | :--------: | :---------: | +| A | 65 | 01000001 | +| B | 66 | 01000010 | +| C | 67 | 01000011 | +| D | 68 | 01000100 | +| E | 69 | 01000101 | +| F | 70 | 01000110 | + +For a complete table, check out the [RapidTables ASCII Table](https://www.rapidtables.com/code/text/ascii-table.html). + +These binary representations of each character would then be stored in a file. Later when you wanted to read the file again, your computer would take each chunk of 8 bits, lookup the letter it represents in an ASCII table, and output the represented character before moving on. This system worked perfectly for a while until more people started using computers. + +Now as it turns out, there are a lot of people who want to use computers who don't speak English and need to represent characters that we don't have in English (Arabic, Spanish, French, Chinese, etc.). The solution to this is using a different type of encoding rather than ASCII, referred to as [file encodings]({% link reference/encodings.md %}). + +However, the most common encoding, `UTF-8`, simply extends ASCII to add extra characters because ASCII does not use all 256 numbers, it only uses around 127. So, in a modern day file, the word "Hello" would be represents as follows: + +```text +Text: Hello +UTF-8 Decimal: 72 101 108 108 111 +UTF-8 Binary: 01001000 01100101 01101100 01101100 01101111 +``` + +To try this out on your own, check out [Online Utf8 Tools](https://onlineutf8tools.com/convert-utf8-to-binary). + +## Endianness + +When working with bytes and storing them in memory you run into a problem. How do you store a sequency of bytes in memory? So, for example, let's say we have the following bytes: + +| 11110000 | 01011010 | + +And let's save we have some memory allocated for our 2 bytes that looks like this: + +| (empty byte) | (empty byte) | + +How do you want to store the bytes in memory? + +Looking at it like this, the simple solution is to just store them sequentially with the first byte being stored in the first byte of memory, and the second byte in the second byte of memory. + +Our memory would then look like this: + +| 11110000 | 01011010 | + +This approach is called **big endian ordering**. The other approach is called **little endian ordering** which, you guessed it, is the opposite. If we were to store the same two bytes with little endian ordering in memory, it would look like this: + +| 01011010 | 11110000 | + +Now using big vs little endian ordering doesn't make a large difference in practice, it's just important that all of the software and hardware interacting with the memory knows which endian ordering it's using. It's also important to ensure that other computers receiving data know what endian ordering the data is being transmitted with so the other computer can correctly interpret the bytes. + +If endianness still doesn't make complete sense or you're interested in learning more, you should check out [Computerphile's video about endianness](https://www.youtube.com/watch?v=thrx3SBEpL8) or [the article about it on Wikipedia](https://en.wikipedia.org/wiki/Endianness). + +## Kilobytes, Megabytes, and Beyond + +When dealing with data in the real world, you'll often encounter files larger than a few hundreds bytes. Often these files can reach into the thousands, millions, and even billions of bytes. Luckily, rather than saying that a file of 1,000,000 bytes is 1,000,000 bytes, we can simply say it is 1 **megabyte**. This is the same reason we say the Moon is 384,400 km away from the Earth, not 384,400,000 meters. Bytes use standard [metric prefixes](https://en.wikipedia.org/wiki/Metric_prefix), so any metric prefix means the same thing when talking about meters, bytes, or any other metric measurement. + +| Name | Base 10 | Decimal | +| -------- | ------------- | --------------------- | +| Kilobyte | $ 10 ^ 3 $ | 1,000 | +| Megabyte | $ 10 ^ 6 $ | 1,000,000 | +| Gigabyte | $ 10 ^ 9 $ | 1,000,000,000 | +| Terabyte | $ 10 ^ {12} $ | 1,000,000,000,000 | +| Petabyte | $ 10 ^ {15} $ | 1,000,000,000,000,000 | + +You can learn more about binary prefixes [on Wikipedia](https://en.wikipedia.org/wiki/Binary_prefix). + +## Resources + +If you want to learn more about bytes and binary in general, check out some of these great resources: + +- [Binary on Wikipedia](https://en.wikipedia.org/wiki/Binary_number) +- [Endianness on Wikipedia](https://en.wikipedia.org/wiki/Endianness) +- [Byte on Wikipedia](https://en.wikipedia.org/wiki/Byte) +- [Bit on Wikipedia](https://en.wikipedia.org/wiki/Bit) +- [Khan Academy Binary Course](https://www.khanacademy.org/computing/computers-and-internet/xcae6f4a7ff015e7d:digital-information/xcae6f4a7ff015e7d:binary-numbers/a/bits-and-binary) +- [Byte Size Infographic](https://www.redcentricplc.com/resources/byte-size-infographic/) +- [Why Use Binary? - Computerphile](https://www.youtube.com/watch?v=thrx3SBEpL8) +- [Endianness Explained With an Egg - Computerphile](https://www.youtube.com/watch?v=NcaiHcBvDR4) diff --git a/site/reference/compression_ratios.md b/site/reference/compression_ratios.md new file mode 100644 index 0000000..df38bc2 --- /dev/null +++ b/site/reference/compression_ratios.md @@ -0,0 +1,26 @@ +--- +layout: default +title: Compression Ratios +nav_order: 3 +parent: Reference +--- + +# Compression Ratios + +Compression ratios are generally used to represent how good a compression algorithm is at compressing. Generally, this is represented as the uncompressed size divided by the compressed size, yielding a number (hopefully) greater than 1. The higher the compression ratio, the better the compression algorithm is. + +

+ Compression Ratio Equation +

+ +> Equation from [Wikipedia](https://en.wikipedia.org/wiki/Data_compression_ratio) + +It should also be noted that a better compression ratio does not always indicate a better compression algorithm. Some algorithms are designed to give a moderate compression ratio with very good speed, while others are focused on good compression ratios and moderate speed. The use case of a compression algorithm are what determines what factors of a compression algorithm are favorable. For example, when streaming video you must be able to decode each frame relatively quickly, but when downloading a large game it may be preferable to download a smaller file and take time to decode the compressed files. + +## Resources + +Some good resources to learn more about compression algorithms include: + +- [Data compression ratio on Wikipedia](https://en.wikipedia.org/wiki/Data_compression_ratio) +- [Comparison of Algorithms](https://cran.r-project.org/web/packages/brotli/vignettes/brotli-2015-09-22.pdf) (helpful to see how compression ratios are compared) +- [Comparison of Different Compression Algorithms](https://www.cs.rit.edu/~std3246/thesis/node36.html) (helpful to see how compression ratios are compared) diff --git a/site/reference/encodings.md b/site/reference/encodings.md new file mode 100644 index 0000000..c624f54 --- /dev/null +++ b/site/reference/encodings.md @@ -0,0 +1,34 @@ +--- +layout: default +title: Character Encodings +nav_order: 2 +parent: Reference +--- + +# Character Encodings + +When it comes to encoding every character that we use as a number there are many different ways we can do it. For example, how many bytes should a character represent? Should byte length be dynamic based on the character? Should you prioritize shorter encodings for more frequent characters? + +These are the types of questions that are answered with the many different [character encodings](https://en.wikipedia.org/wiki/Character_encoding) that exist today. The most popular of these are arguably UTF-8 and UTF-16, both encodings for Unicode. + +## UTF-8 and UTF-16 + +UTF-8 is covered briefly in the the reference on [bytes and binary]({% link reference/bytes.md %}), but generally the first 127 numbers in UTF-8 are the same as the ASCII encoding which makes transitioning between the two formats very easy. Additionally because of this property, UTF-8 results in smaller file sizes for primarily English data which is another contributing factor in it's popularity. + +In order for UTF-8 to replicate ASCII encodings, it must use anywhere from one to four bytes to represent all 1,112,064 different characters defined by Unicode. This means that a single rendered character could take up 4 bytes which can be inefficient depending on what data you are encoding. + +The largest alternative encoding is UTF-16 which is very similar to UTF-8 except that it uses one or two 16-bit units, essentially two bytes or four bytes, never one or three. The advantage of doing this is that in some cases where a large range of non-English characters are being encoded, such as Mandarin or emoji characters, it can be more efficient than UTF-8 encodings. + +## Other Encodings + +Aside from UTF-8 and UTF-16 many different types of file encodings exist such as UTF-32, ISO standardized encodings, Mac OS Roman, Windows encodings, and more. Luckily however, Unicode has risen in popularity to the point that there is generally great support and standardization around Unicode encodings like UTF-8 and UTF-16. If you are interested in checking out some other file encodings, you should check out Wikipedia's list on [common character encodings](https://en.wikipedia.org/wiki/Character_encoding). + +## Resources + +If you're interested in learning more about Unicode and other character encodings, check out some of these great resources: + +- [Character encoding on Wikipedia](https://en.wikipedia.org/wiki/Character_encoding) +- [Unicode on Wikipedia](https://en.wikipedia.org/wiki/Unicode) +- [Difference between UTF-8, UTF-16 and UTF-32 Character Encoding](https://javarevisited.blogspot.com/2015/02/difference-between-utf-8-utf-16-and-utf.html) +- [Comparison of Unicode encodings on Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings) +- [UTF-8, UTF-16, and UTF-32 on StackOverflow](https://stackoverflow.com/questions/496321/utf-8-utf-16-and-utf-32) diff --git a/site/reference/magic_numbers.md b/site/reference/magic_numbers.md new file mode 100644 index 0000000..9ecba02 --- /dev/null +++ b/site/reference/magic_numbers.md @@ -0,0 +1,32 @@ +--- +layout: default +title: Unix Magic Numbers +nav_order: 3 +parent: Reference +--- + +# Unix Magic Numbers + +Unix magic types, also known as magic numbers, or format indicators are a small sequence of bytes at the beginning of a file used to identify the file type. + +Here are just a few examples of file magic numbers from [Wikipedia](): + +- GIFs: `GIF89a` +- Unix scripts: `#!` +- PDFs: `25 50 44 46` +- JPEGs: `FF D8` + +Magic numbers are important to understand if you start writing and reading compressed files. Written compressed files should include your own custom magic number that represents your compression format and doesn't conflict with any other magic number. You can also read these magic types to determine the format of a compressed file. + +These magic numbers and the corresponding file type are generally stored in a file called the magic patterns, also known as the magic database or magic data. This file is used by Unix systems to lookup the file type based off of a file's magic numbers. + +For a more complete list of different magic numbers, check out the Wikipedia entry for a [list of file extensions](https://en.wikipedia.org/wiki/List_of_file_signatures). + +## Resources + +To learn more about magic numbers, check out these resources: + +- [Linux man page for `file`](https://linux.die.net/man/1/file) +- [List of file signatures on Wikipedia](https://en.wikipedia.org/wiki/List_of_file_signatures) +- [Format indicators on Wikipedia]() +- [Working with Magic numbers in Linux](https://www.geeksforgeeks.org/working-with-magic-numbers-in-linux/) diff --git a/site/reference/raisin.md b/site/reference/raisin.md new file mode 100644 index 0000000..5395b62 --- /dev/null +++ b/site/reference/raisin.md @@ -0,0 +1,12 @@ +--- +layout: default +title: Raisin +nav_order: 5 +parent: Reference +--- + +# Raisin + +[Raisin](https://github.com/go-compression/raisin) is a compression project that myself, Phillip Cutter, and Arnav Chawla built under the guidance of our mentor, Skip Tavakkolian. This project spanned 6 weeks and encompasses our work in implementing various compression algorithms in Go along with an easy-to-use CLI interface. This website is the project encompassing our learning along our journey of researching and implementing lossless compression algorithms. + +Most compression algorithm documents on this site should be implemented within this project in a performant manner, though if not, you should check the [examples repo](https://github.com/go-compression/examples). diff --git a/site/reference/reference.md b/site/reference/reference.md new file mode 100644 index 0000000..a917bbd --- /dev/null +++ b/site/reference/reference.md @@ -0,0 +1,10 @@ +--- +layout: default +title: Reference +nav_order: 6 +has_children: true +--- + +# Reference + +This section serves to be a reference to topics that aren't directly related to compression, but inveitably come into play. A basic understanding of these concepts are invaluable when building your own implementation or algorithm or simply understanding how these algorithms work. diff --git a/site/resources.md b/site/resources.md new file mode 100644 index 0000000..69f18e1 --- /dev/null +++ b/site/resources.md @@ -0,0 +1,16 @@ +--- +layout: default +title: Resources +nav_order: 7 +--- + +# Resources + +This is a list of great resources for learning about compression in a broad sense. If you're looking for other places to learn more about data compression then any of these entries are a great start. + +- [Compressor Head](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) - Google Compression Show +- [mathematicalmonk on Information Theory](https://www.youtube.com/playlist?list=PLE125425EC837021F) - Very in-depth and comprehensive YouTube lectures +- [Data compression on Wikipedia](https://en.wikipedia.org/wiki/Data_compression) - A good rabbit hole on Wikipedia +- [GitHub compression-algorithm Topic](https://github.com/topics/compression-algorithm) - The latest GitHub compression projects + +Know another great resource not included on this list? Consider [contributing]({% link contributing.md %}).