├── .babelrc
├── .github
└── workflows
│ └── npmpublish.yml
├── .gitignore
├── .npmignore
├── CHANGELOG.md
├── README.md
├── ci.sh
├── examples
├── simple-chart.js
└── simple-chart.mjml
├── lib
└── index.js
├── package-lock.json
├── package.json
├── scripts
├── generateComponent.js
├── generateREADME.js
├── model.js
├── swagger.json
└── templates
│ ├── README.md.tmpl
│ └── component.js.tmpl
├── src
└── index.js
└── test
└── mjml-chart.test.js
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015", "react", "stage-0"],
3 | "plugins": ["transform-decorators-legacy"]
4 | }
5 |
--------------------------------------------------------------------------------
/.github/workflows/npmpublish.yml:
--------------------------------------------------------------------------------
1 | # This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
3 |
4 | name: mjml-chart
5 |
6 | on:
7 | repository_dispatch:
8 | types: gitlab
9 | schedule:
10 | # Every week at 00:00 on Sunday
11 | - cron: '0 0 * * 0'
12 | push:
13 | branches:
14 | - master
15 |
16 | jobs:
17 | build-publish-npm:
18 | runs-on: ubuntu-latest
19 | steps:
20 | - uses: actions/checkout@v2
21 | with:
22 | fetch-depth: 0
23 | - uses: actions/setup-node@v1
24 | with:
25 | node-version: 12
26 | registry-url: https://registry.npmjs.org/
27 | - run: npm ci
28 | - run: |
29 | git config --global user.name "github-action"
30 | git config --global user.email "action@github.com"
31 | npm run ci
32 | env:
33 | NODE_AUTH_TOKEN: ${{secrets.npm_token}}
34 |
35 | - name: Coveralls
36 | uses: coverallsapp/github-action@master
37 | with:
38 | github-token: ${{ secrets.GITHUB_TOKEN }}
39 |
40 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | yarn.lock
2 | coverage
3 | node_modules/
4 | home/
5 | .nyc_output/
6 | .env
7 | examples/*.html
8 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | src
3 | test
4 | scripts
5 | examples
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## mjml-chart for [mjml](https://mjml.io/)
2 |
3 | [](https://circleci.com/gh/image-charts/mjml-chart/) [](https://coveralls.io/github/image-charts/mjml-chart) [](https://david-dm.org/image-charts/mjml-chart) [](http://badge.fury.io/js/mjml-chart) [](https://www.npmjs.com/package/mjml-chart) 
4 |
5 | Displays charts as images in your email. Note that the chart can be animated (gif) when the `chan` attribute is specified.
6 |
7 | #### 🎩 Usage
8 |
9 |
10 | ```xml
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | ```
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | ##### 🚀 Setup
29 |
30 |
31 | - `mjml-chart` v5.x.x is built for *MJML4* ([Community components](https://mjml.io/documentation/#community-components)):
32 |
33 | ```bash
34 | npm install mjml-chart@5 --save
35 |
36 | cat < .mjmlconfig
37 | {
38 | "packages": [
39 | "mjml-chart/lib/index.js"
40 | ]
41 | }
42 | EOF
43 | ```
44 |
45 | - `mjml-chart` v4.x.x is built for *MJML3*:
46 |
47 | ```bash
48 | npm install mjml-chart@4 --save
49 | ```
50 |
51 |
52 | ##### 🚧 Documentation
53 |
54 |
55 | | attribute | description | value examples |
56 | | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
57 | | [cht](https://documentation.image-charts.com/reference/chart-type/) | Chart type | `bvg`, `p` |
58 | | [chd](https://documentation.image-charts.com/reference/data-format/) | chart data | `a:-100,200.5,75.55,110`, `t:10,20,30\|15,25,35`, `s:BTb19_,Mn5tzb`, `e:BaPoqM2s,-A__RMD6` |
59 | | [chds](https://documentation.image-charts.com/reference/data-format/#text-format-with-custom-scaling) | data format with custom scaling | `-80,140` |
60 | | [choe](https://documentation.image-charts.com/qr-codes/#data-encoding) | QRCode data encoding | `UTF-8` |
61 | | [chld](https://documentation.image-charts.com/qr-codes/#error-correction-level-and-margin) | QRCode error correction level and optional margin | `L\|4`, `M\|10`, `Q\|5`, `H\|18` |
62 | | [chxr](https://documentation.image-charts.com/reference/chart-axis/#axis-range) | Axis data-range | `0,0,200`, `0,10,50,5`, `0,0,500\|1,0,200` |
63 | | [chof](https://documentation.image-charts.com/reference/output-format/) | Image output format | `.png`, `.svg`, `.gif` |
64 | | [chs](https://documentation.image-charts.com/reference/chart-size/) | Chart size (x) | `400x400` |
65 | | [chdl](https://documentation.image-charts.com/reference/legend-text-and-style/) | Text for each series, to display in the legend | `NASDAQ\|FTSE100\|DOW` |
66 | | [chdls](https://documentation.image-charts.com/reference/legend-text-and-style/) | Chart legend text and style | `9e9e9e,17` |
67 | | [chg](https://documentation.image-charts.com/reference/grid-lines/) | Solid or dotted grid lines | `1,1`, `0,1,1,5`, `1,1,FF00FF`, `1,1,1,1,CECECE` |
68 | | [chco](https://documentation.image-charts.com/bar-charts/#examples) | series colors | `FFC48C`, `FF0000,00FF00,0000FF` |
69 | | [chtt](https://documentation.image-charts.com/reference/chart-title/) | chart title | `My beautiful chart` |
70 | | [chts](https://documentation.image-charts.com/reference/chart-title/) | chart title colors and font size | `00FF00,17` |
71 | | [chxt](https://documentation.image-charts.com/reference/chart-axis/#visible-axes) | Display values on your axis lines or change which axes are shown | `y`, `x,y`, `x,x,y`, `x,y,t,r,t` |
72 | | [chxl](https://documentation.image-charts.com/reference/chart-axis/#custom-axis-labels) | Custom string axis labels on any axis | `0:\|Jan\|July\|Jan`, `0:\|Jan\|July\|Jan\|1\|10\|20\|30` |
73 | | [chxs](https://documentation.image-charts.com/reference/chart-axis/#axis-label-styles) | Font size, color for axis labels, both custom labels and default label values | `1,0000DD`, `1N*cUSD*Mil,FF0000`, `1N*cEUR*,FF0000`, `2,0000DD,13,0,t`, `0N*p*per-month,0000FF`, `0N*e*,000000\|1N*cUSD*Mil,FF0000\|2N*2sz*,…` |
74 | | [chm](https://documentation.image-charts.com/reference/compound-charts/) | compound charts and line fills | |
75 | | [chls](https://documentation.image-charts.com/line-charts/#line-styles) | line thickness and solid/dashed style | `10`, `3,6,3\|5` |
76 | | [chl](https://documentation.image-charts.com/reference/chart-label/) | bar, pie slice, doughnut slice and polar slice chart labels | `label1\|label2`, `multi\nline\nlabel1\|label2` |
77 | | [chlps](https://documentation.image-charts.com/reference/chart-label/#positionning-and-formatting) | Position and style of labels on data | `align,top\|offset,10\|color,FF00FF`, `align,top\|offset,10\|color,FF00FF` |
78 | | [chma](https://documentation.image-charts.com/reference/chart-margin/) | chart margins | `30,30,30,30`, `40,20` |
79 | | [chdlp](https://documentation.image-charts.com/reference/legend-text-and-style/) | Position of the legend and order of the legend entries | |
80 | | [chf](https://documentation.image-charts.com/reference/background-fill/) | Background Fills | `b0,lg,0,f44336,0.3,03a9f4,0.8` |
81 | | [chbr](https://documentation.image-charts.com/bar-charts/#rounded-bar) | Bar corner radius. Display bars with rounded corner. | `5`, `10` |
82 | | [chan](https://documentation.image-charts.com/reference/animation/) | gif configuration | `1200`, `1300\|easeInOutSine` |
83 | | [chli](https://documentation.image-charts.com/pie-charts/#inside-label) | doughnut chart inside label | `95K€`, `45%` |
84 | | [icac](https://documentation.image-charts.com/enterprise/) | image-charts enterprise `account_id` | `accountId` |
85 | | [ichm](https://documentation.image-charts.com/enterprise/) | HMAC-SHA256 signature required to activate paid features | `0785cf22a0381c2e0239e27c126de4181f501d11…` |
86 | | [icff](https://documentation.image-charts.com/reference/chart-font/) | Default font family for all text from Google Fonts. Use same syntax as Google Font CSS API | `Abel`, `Akronim`, `Alfa Slab One` |
87 | | [icfs](https://documentation.image-charts.com/reference/chart-font/) | Default font style for all text | `normal`, `italic` |
88 | | [iclocale]() | localization (ISO 639-1) | `en` |
89 | | [icretina](https://documentation.image-charts.com/reference/retina/) | retina mode | `1` |
90 | | [icqrb](https://documentation.image-charts.com/qr-codes/#background-color) | Background color for QR Codes | `FFFFFF` |
91 | | [icqrf](https://documentation.image-charts.com/qr-codes/#foreground-color) | Foreground color for QR Codes | `000000` |
92 |
93 |
94 | Since `mjml-chart` is a wrapper for `mjml-image`, `mjml-image` attributes are also available:
95 |
96 | | attribute | default values |
97 | | ----------------------------------------- | -------------- |
98 | | [alt](#mjml-image) | n/a |
99 | | [name](#mjml-image) | n/a |
100 | | [srcset](#mjml-image) | n/a |
101 | | [sizes](#mjml-image) | n/a |
102 | | [title](#mjml-image) | n/a |
103 | | [rel](#mjml-image) | n/a |
104 | | [align](#mjml-image) | center |
105 | | [border](#mjml-image) | 0 |
106 | | [border-bottom](#mjml-image) | n/a |
107 | | [border-left](#mjml-image) | n/a |
108 | | [border-right](#mjml-image) | n/a |
109 | | [border-top](#mjml-image) | n/a |
110 | | [border-radius](#mjml-image) | n/a |
111 | | [container-background-color](#mjml-image) | n/a |
112 | | [fluid-on-mobile](#mjml-image) | n/a |
113 | | [padding](#mjml-image) | 10px 25px |
114 | | [padding-bottom](#mjml-image) | n/a |
115 | | [padding-left](#mjml-image) | n/a |
116 | | [padding-right](#mjml-image) | n/a |
117 | | [padding-top](#mjml-image) | n/a |
118 | | [max-height](#mjml-image) | n/a |
119 | | [font-size](#mjml-image) | 13px |
120 | | [usemap](#mjml-image) | n/a |
121 |
122 |
123 | Note:
124 | - `src` attribute is not customizable, it's generated by `mjml-chart`
125 | - `width` and `height` are automatically generated by `mjml-chart` based on the `chs` attribute
126 |
127 | ## Troubleshooting
128 |
129 | ### Receiving Error: `Error when registering custom component`
130 |
131 | If this warning appears in your log when you use mjml-chart, check your `mjml` version and be sure you have the last
132 |
133 |
134 |
--------------------------------------------------------------------------------
/ci.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | release_changelog_push () {
4 | npm run release --release_version=$1
5 | }
6 |
7 | npm run --silent generate-swagger
8 | npm run --silent generate
9 | npm run --silent test
10 | npm run --silent test-coverage
11 |
12 | echo "Update deps"
13 | UPDATR_RESULT=$(npm run --silent updtr)
14 | echo $UPDATR_RESULT
15 |
16 | (git add package.json || true) && (git add package-lock.json || true) && (git commit -m 'update deps' || true)
17 |
18 | SWAGGER_VERSION=$(jq '.info.version' ./scripts/swagger.json)
19 | # Remove all "
20 | SWAGGER_VERSION=${SWAGGER_VERSION//\"/}
21 |
22 | MJML_CHART_VERSION=$(jq '.version' ./package.json)
23 | # Remove all "
24 | MJML_CHART_VERSION=${MJML_CHART_VERSION//\"/}
25 |
26 | SWAGGER_VERSION_SPLIT=(${SWAGGER_VERSION//./ })
27 |
28 | MJML_CHART_VERSION_SPLIT=(${MJML_CHART_VERSION//./ })
29 |
30 | MJML_CHART_MAJOR_VERSION=${MJML_CHART_VERSION_SPLIT[0]}
31 | MJML_CHART_MINOR_VERSION=${MJML_CHART_VERSION_SPLIT[1]}
32 | MJML_CHART_PATCH_VERSION=${MJML_CHART_VERSION_SPLIT[2]}
33 |
34 | # Check if major/minor version of image-charts have changed to update mjml-chart version
35 | if [[ $MJML_CHART_MAJOR_VERSION -ne ${SWAGGER_VERSION_SPLIT[0]} || $MJML_CHART_MINOR_VERSION -ne ${SWAGGER_VERSION_SPLIT[1]} ]]
36 | then
37 | release_changelog_push $SWAGGER_VERSION
38 | # Check if deps have been bumped. Updtr return "up-to-date" if no deps are outdated
39 | elif [[ $(echo $UPDATR_RESULT | grep -c "up-to-date") -eq 0 ]]
40 | then
41 | release_changelog_push "$MJML_CHART_MAJOR_VERSION.$MJML_CHART_MINOR_VERSION.$(($MJML_CHART_PATCH_VERSION+1))"
42 | fi
43 |
44 | npm run --silent changelog-commit
45 | npm run --silent git-push
46 |
--------------------------------------------------------------------------------
/examples/simple-chart.js:
--------------------------------------------------------------------------------
1 | import path from 'path'
2 |
3 | import mjml2html from 'mjml';
4 | import {registerComponent, components } from 'mjml-core';
5 | import ChartComponent from '../src';
6 |
7 | // First require mjml-chart:
8 | // import mjmlchart from 'mjml-chart'
9 | // ^^^ this import should be used in your project instead
10 | import mjmlchart from '../'
11 |
12 | // Then register mjml-chart
13 | registerComponent(mjmlchart);
14 |
15 |
16 | /*
17 | Compile an mjml string
18 | */
19 | const {errors, html} = mjml2html(require('fs').readFileSync(path.resolve(__dirname, 'simple-chart.mjml'), 'utf8'))
20 |
21 | if(errors.length > 0){
22 | console.error(errors);
23 | process.exit(1);
24 | }
25 | /*
26 | Print the responsive HTML generated
27 | */
28 | console.log(html); // eslint-disable-line no-console
29 |
--------------------------------------------------------------------------------
/examples/simple-chart.mjml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Hello World!
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | Object.defineProperty(exports, "__esModule", {
4 | value: true
5 | });
6 | exports.default = undefined;
7 |
8 | var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
9 |
10 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
11 |
12 | var _class, _temp; /**
13 | * GENERATED-CODE
14 | *
15 | * Beware don't edit `index.js` it was automatically generated with `npm run update`, edit `scripts/templates/component.js.tmpl` instead.
16 | */
17 |
18 | var _mjmlCore = require('mjml-core');
19 |
20 | var _mjmlValidator = require('mjml-validator');
21 |
22 | var _querystring = require('querystring');
23 |
24 | var _querystring2 = _interopRequireDefault(_querystring);
25 |
26 | var _memoize = require('lodash/memoize');
27 |
28 | var _memoize2 = _interopRequireDefault(_memoize);
29 |
30 | var _toNumber = require('lodash/toNumber');
31 |
32 | var _toNumber2 = _interopRequireDefault(_toNumber);
33 |
34 | var _includes = require('lodash/includes');
35 |
36 | var _includes2 = _interopRequireDefault(_includes);
37 |
38 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
39 |
40 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
41 |
42 | function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
43 |
44 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
45 |
46 | (0, _mjmlValidator.registerDependencies)({
47 | // Tell the validator which tags are allowed as our component's parent
48 | 'mj-hero': ['mj-chart'],
49 | 'mj-column': ['mj-chart'],
50 | // Tell the validator which tags are allowed as our component's children
51 | 'mj-chart': []
52 | });
53 |
54 | var imageChartsParameters = [{
55 | "name": "cht",
56 | "examples": ["bvg", "p"],
57 | "required": true,
58 | "enum": ["bvs", "bvg", "bhs", "bhg", "bvo", "p", "p3", "pc", "pd", "ls", "lc", "lxy", "ls:nda", "lc:nda", "lxy:nda", "pa", "bb", "gv", "gv:dot", "gv:neato", "gv:circo", "gv:fdp", "gv:osage", "gv:twopi", "qr", "r"]
59 | }, {
60 | "name": "chd",
61 | "pattern": "^(([at]\\d*:(?:[\\-0-9_\\.]*[,|])*[\\-0-9_\\.]*)|(s\\d*:[a-z0-9_,]+)|(e\\d*:[a-z0-9_,-\\.]+))$",
62 | "examples": ["a:-100,200.5,75.55,110", "t:10,20,30|15,25,35", "s:BTb19_,Mn5tzb", "e:BaPoqM2s,-A__RMD6"]
63 | }, {
64 | "name": "chds",
65 | "pattern": "a|([0-9-],?)+",
66 | "examples": ["-80,140"],
67 | "required": false
68 | }, {
69 | "name": "choe",
70 | "examples": ["UTF-8"],
71 | "enum": ["UTF-8"]
72 | }, {
73 | "name": "chld",
74 | "pattern": "^[LMQH]{1}(?:\\|[0-9]+)?$",
75 | "examples": ["L|4", "M|10", "Q|5", "H|18"]
76 | }, {
77 | "name": "chxr",
78 | "pattern": "^(?:(?:[0-9-.]+)(?:,(?:[0-9-.]+)){2,3}\\|?)+$",
79 | "examples": ["0,0,200", "0,10,50,5", "0,0,500|1,0,200"],
80 | "required": false
81 | }, {
82 | "name": "chof",
83 | "examples": [".png", ".svg", ".gif"],
84 | "required": false
85 | }, {
86 | "name": "chs",
87 | "pattern": "^[1-9][0-9]{0,2}x[1-9][0-9]{0,2}$",
88 | "examples": ["400x400"]
89 | }, {
90 | "name": "chdl",
91 | "pattern": "^(?:[^\\|]*\\|?)+$",
92 | "examples": ["NASDAQ|FTSE100|DOW"],
93 | "required": false
94 | }, {
95 | "name": "chdls",
96 | "pattern": "^[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?(?:,[0-9]+)?$",
97 | "examples": ["9e9e9e,17"],
98 | "required": false
99 | }, {
100 | "name": "chg",
101 | "pattern": "^(?:[0-9.]+)(?:,(?:[0-9.]+)+){0,5}?(?:,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?)?$",
102 | "examples": ["1,1", "0,1,1,5", "1,1,FF00FF", "1,1,1,1,CECECE"],
103 | "required": false
104 | }, {
105 | "name": "chco",
106 | "pattern": "^([0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,?\\|?)+$",
107 | "examples": ["FFC48C", "FF0000,00FF00,0000FF"],
108 | "required": false
109 | }, {
110 | "name": "chtt",
111 | "pattern": "^[a-z0-9sW -⟯一-龿-ゟ゠-ヿ⺀-⿕㆐-㆟㐀-䶿一-鿌豈-節]+$",
112 | "examples": ["My beautiful chart"],
113 | "required": false
114 | }, {
115 | "name": "chts",
116 | "pattern": "^([0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?),[0-9]+,?[lcr]?(,(ABeeZee|Abel|Abhaya Libre|Abril Fatface|Aclonica|Acme|Actor|Adamina|Advent Pro|Aguafina Script|Akronim|Aladin|Aldrich|Alef|Alegreya|Alegreya SC|Alegreya Sans|Alegreya Sans SC|Aleo|Alex Brush|Alfa Slab One|Alice|Alike|Alike Angular|Allan|Allerta|Allerta Stencil|Allura|Almarai|Almendra|Almendra Display|Almendra SC|Amarante|Amaranth|Amatic SC|Amethysta|Amiko|Amiri|Amita|Anaheim|Andada|Andika|Angkor|Annie Use Your Telescope|Anonymous Pro|Antic|Antic Didone|Antic Slab|Anton|Arapey|Arbutus|Arbutus Slab|Architects Daughter|Archivo|Archivo Black|Archivo Narrow|Aref Ruqaa|Arima Madurai|Arimo|Arizonia|Armata|Arsenal|Artifika|Arvo|Arya|Asap|Asap Condensed|Asar|Asset|Assistant|Astloch|Asul|Athiti|Atma|Atomic Age|Aubrey|Audiowide|Autour One|Average|Average Sans|Averia Gruesa Libre|Averia Libre|Averia Sans Libre|Averia Serif Libre|B612|B612 Mono|Bad Script|Bahiana|Bahianita|Bai Jamjuree|Baloo|Baloo Bhai|Baloo Bhaijaan|Baloo Bhaina|Baloo Chettan|Baloo Da|Baloo Paaji|Baloo Tamma|Baloo Tammudu|Baloo Thambi|Balthazar|Bangers|Barlow|Barlow Condensed|Barlow Semi Condensed|Barriecito|Barrio|Basic|Battambang|Baumans|Bayon|Be Vietnam|Belgrano|Bellefair|Belleza|BenchNine|Bentham|Berkshire Swash|Beth Ellen|Bevan|Big Shoulders Display|Big Shoulders Text|Bigelow Rules|Bigshot One|Bilbo|Bilbo Swash Caps|BioRhyme|BioRhyme Expanded|Biryani|Bitter|Black And White Picture|Black Han Sans|Black Ops One|Blinker|Bokor|Bonbon|Boogaloo|Bowlby One|Bowlby One SC|Brawler|Bree Serif|Bubblegum Sans|Bubbler One|Buda|Buenard|Bungee|Bungee Hairline|Bungee Inline|Bungee Outline|Bungee Shade|Butcherman|Butterfly Kids|Cabin|Cabin Condensed|Cabin Sketch|Caesar Dressing|Cagliostro|Cairo|Calligraffitti|Cambay|Cambo|Candal|Cantarell|Cantata One|Cantora One|Capriola|Cardo|Carme|Carrois Gothic|Carrois Gothic SC|Carter One|Catamaran|Caudex|Caveat|Caveat Brush|Cedarville Cursive|Ceviche One|Chakra Petch|Changa|Changa One|Chango|Charm|Charmonman|Chathura|Chau Philomene One|Chela One|Chelsea Market|Chenla|Cherry Cream Soda|Cherry Swash|Chewy|Chicle|Chilanka|Chivo|Chonburi|Cinzel|Cinzel Decorative|Clicker Script|Coda|Coda Caption|Codystar|Coiny|Combo|Comfortaa|Coming Soon|Concert One|Condiment|Content|Contrail One|Convergence|Cookie|Copse|Corben|Cormorant|Cormorant Garamond|Cormorant Infant|Cormorant SC|Cormorant Unicase|Cormorant Upright|Courgette|Cousine|Coustard|Covered By Your Grace|Crafty Girls|Creepster|Crete Round|Crimson Pro|Crimson Text|Croissant One|Crushed|Cuprum|Cute Font|Cutive|Cutive Mono|DM Sans|DM Serif Display|DM Serif Text|Damion|Dancing Script|Dangrek|Darker Grotesque|David Libre|Dawning of a New Day|Days One|Dekko|Delius|Delius Swash Caps|Delius Unicase|Della Respira|Denk One|Devonshire|Dhurjati|Didact Gothic|Diplomata|Diplomata SC|Do Hyeon|Dokdo|Domine|Donegal One|Doppio One|Dorsa|Dosis|Dr Sugiyama|Duru Sans|Dynalight|EB Garamond|Eagle Lake|East Sea Dokdo|Eater|Economica|Eczar|El Messiri|Electrolize|Elsie|Elsie Swash Caps|Emblema One|Emilys Candy|Encode Sans|Encode Sans Condensed|Encode Sans Expanded|Encode Sans Semi Condensed|Encode Sans Semi Expanded|Engagement|Englebert|Enriqueta|Erica One|Esteban|Euphoria Script|Ewert|Exo|Exo 2|Expletus Sans|Fahkwang|Fanwood Text|Farro|Farsan|Fascinate|Fascinate Inline|Faster One|Fasthand|Fauna One|Faustina|Federant|Federo|Felipa|Fenix|Finger Paint|Fira Code|Fira Mono|Fira Sans|Fira Sans Condensed|Fira Sans Extra Condensed|Fjalla One|Fjord One|Flamenco|Flavors|Fondamento|Fontdiner Swanky|Forum|Francois One|Frank Ruhl Libre|Freckle Face|Fredericka the Great|Fredoka One|Freehand|Fresca|Frijole|Fruktur|Fugaz One|GFS Didot|GFS Neohellenic|Gabriela|Gaegu|Gafata|Galada|Galdeano|Galindo|Gamja Flower|Gayathri|Gentium Basic|Gentium Book Basic|Geo|Geostar|Geostar Fill|Germania One|Gidugu|Gilda Display|Give You Glory|Glass Antiqua|Glegoo|Gloria Hallelujah|Goblin One|Gochi Hand|Gorditas|Gothic A1|Goudy Bookletter 1911|Graduate|Grand Hotel|Gravitas One|Great Vibes|Grenze|Griffy|Gruppo|Gudea|Gugi|Gurajada|Habibi|Halant|Hammersmith One|Hanalei|Hanalei Fill|Handlee|Hanuman|Happy Monkey|Harmattan|Headland One|Heebo|Henny Penny|Hepta Slab|Herr Von Muellerhoff|Hi Melody|Hind|Hind Guntur|Hind Madurai|Hind Siliguri|Hind Vadodara|Holtwood One SC|Homemade Apple|Homenaje|IBM Plex Mono|IBM Plex Sans|IBM Plex Sans Condensed|IBM Plex Serif|IM Fell DW Pica|IM Fell DW Pica SC|IM Fell Double Pica|IM Fell Double Pica SC|IM Fell English|IM Fell English SC|IM Fell French Canon|IM Fell French Canon SC|IM Fell Great Primer|IM Fell Great Primer SC|Iceberg|Iceland|Imprima|Inconsolata|Inder|Indie Flower|Inika|Inknut Antiqua|Irish Grover|Istok Web|Italiana|Italianno|Itim|Jacques Francois|Jacques Francois Shadow|Jaldi|Jim Nightshade|Jockey One|Jolly Lodger|Jomhuria|Jomolhari|Josefin Sans|Josefin Slab|Joti One|Jua|Judson|Julee|Julius Sans One|Junge|Jura|Just Another Hand|Just Me Again Down Here|K2D|Kadwa|Kalam|Kameron|Kanit|Kantumruy|Karla|Karma|Katibeh|Kaushan Script|Kavivanar|Kavoon|Kdam Thmor|Keania One|Kelly Slab|Kenia|Khand|Khmer|Khula|Kirang Haerang|Kite One|Knewave|KoHo|Kodchasan|Kosugi|Kosugi Maru|Kotta One|Koulen|Kranky|Kreon|Kristi|Krona One|Krub|Kumar One|Kumar One Outline|Kurale|La Belle Aurore|Lacquer|Laila|Lakki Reddy|Lalezar|Lancelot|Lateef|Lato|League Script|Leckerli One|Ledger|Lekton|Lemon|Lemonada|Lexend Deca|Lexend Exa|Lexend Giga|Lexend Mega|Lexend Peta|Lexend Tera|Lexend Zetta|Libre Barcode 128|Libre Barcode 128 Text|Libre Barcode 39|Libre Barcode 39 Extended|Libre Barcode 39 Extended Text|Libre Barcode 39 Text|Libre Baskerville|Libre Caslon Display|Libre Caslon Text|Libre Franklin|Life Savers|Lilita One|Lily Script One|Limelight|Linden Hill|Literata|Liu Jian Mao Cao|Livvic|Lobster|Lobster Two|Londrina Outline|Londrina Shadow|Londrina Sketch|Londrina Solid|Long Cang|Lora|Love Ya Like A Sister|Loved by the King|Lovers Quarrel|Luckiest Guy|Lusitana|Lustria|M PLUS 1p|M PLUS Rounded 1c|Ma Shan Zheng|Macondo|Macondo Swash Caps|Mada|Magra|Maiden Orange|Maitree|Major Mono Display|Mako|Mali|Mallanna|Mandali|Manjari|Mansalva|Manuale|Marcellus|Marcellus SC|Marck Script|Margarine|Markazi Text|Marko One|Marmelad|Martel|Martel Sans|Marvel|Mate|Mate SC|Maven Pro|McLaren|Meddon|MedievalSharp|Medula One|Meera Inimai|Megrim|Meie Script|Merienda|Merienda One|Merriweather|Merriweather Sans|Metal|Metal Mania|Metamorphous|Metrophobic|Michroma|Milonga|Miltonian|Miltonian Tattoo|Mina|Miniver|Miriam Libre|Mirza|Miss Fajardose|Mitr|Modak|Modern Antiqua|Mogra|Molengo|Molle|Monda|Monofett|Monoton|Monsieur La Doulaise|Montaga|Montez|Montserrat|Montserrat Alternates|Montserrat Subrayada|Moul|Moulpali|Mountains of Christmas|Mouse Memoirs|Mr Bedfort|Mr Dafoe|Mr De Haviland|Mrs Saint Delafield|Mrs Sheppards|Mukta|Mukta Mahee|Mukta Malar|Mukta Vaani|Muli|Mystery Quest|NTR|Nanum Brush Script|Nanum Gothic|Nanum Gothic Coding|Nanum Myeongjo|Nanum Pen Script|Neucha|Neuton|New Rocker|News Cycle|Niconne|Niramit|Nixie One|Nobile|Nokora|Norican|Nosifer|Notable|Nothing You Could Do|Noticia Text|Noto Sans|Noto Sans HK|Noto Sans JP|Noto Sans KR|Noto Sans SC|Noto Sans TC|Noto Serif|Noto Serif JP|Noto Serif KR|Noto Serif SC|Noto Serif TC|Nova Cut|Nova Flat|Nova Mono|Nova Oval|Nova Round|Nova Script|Nova Slim|Nova Square|Numans|Nunito|Nunito Sans|Odor Mean Chey|Offside|Old Standard TT|Oldenburg|Oleo Script|Oleo Script Swash Caps|Open Sans|Open Sans Condensed|Oranienbaum|Orbitron|Oregano|Orienta|Original Surfer|Oswald|Over the Rainbow|Overlock|Overlock SC|Overpass|Overpass Mono|Ovo|Oxygen|Oxygen Mono|PT Mono|PT Sans|PT Sans Caption|PT Sans Narrow|PT Serif|PT Serif Caption|Pacifico|Padauk|Palanquin|Palanquin Dark|Pangolin|Paprika|Parisienne|Passero One|Passion One|Pathway Gothic One|Patrick Hand|Patrick Hand SC|Pattaya|Patua One|Pavanam|Paytone One|Peddana|Peralta|Permanent Marker|Petit Formal Script|Petrona|Philosopher|Piedra|Pinyon Script|Pirata One|Plaster|Play|Playball|Playfair Display|Playfair Display SC|Podkova|Poiret One|Poller One|Poly|Pompiere|Pontano Sans|Poor Story|Poppins|Port Lligat Sans|Port Lligat Slab|Pragati Narrow|Prata|Preahvihear|Press Start 2P|Pridi|Princess Sofia|Prociono|Prompt|Prosto One|Proza Libre|Puritan|Purple Purse|Quando|Quantico|Quattrocento|Quattrocento Sans|Questrial|Quicksand|Quintessential|Qwigley|Racing Sans One|Radley|Rajdhani|Rakkas|Raleway|Raleway Dots|Ramabhadra|Ramaraja|Rambla|Rammetto One|Ranchers|Rancho|Ranga|Rasa|Rationale|Ravi Prakash|Red Hat Display|Red Hat Text|Redressed|Reem Kufi|Reenie Beanie|Revalia|Rhodium Libre|Ribeye|Ribeye Marrow|Righteous|Risque|Roboto|Roboto Condensed|Roboto Mono|Roboto Slab|Rochester|Rock Salt|Rokkitt|Romanesco|Ropa Sans|Rosario|Rosarivo|Rouge Script|Rozha One|Rubik|Rubik Mono One|Ruda|Rufina|Ruge Boogie|Ruluko|Rum Raisin|Ruslan Display|Russo One|Ruthie|Rye|Sacramento|Sahitya|Sail|Saira|Saira Condensed|Saira Extra Condensed|Saira Semi Condensed|Saira Stencil One|Salsa|Sanchez|Sancreek|Sansita|Sarabun|Sarala|Sarina|Sarpanch|Satisfy|Sawarabi Gothic|Sawarabi Mincho|Scada|Scheherazade|Schoolbell|Scope One|Seaweed Script|Secular One|Sedgwick Ave|Sedgwick Ave Display|Sevillana|Seymour One|Shadows Into Light|Shadows Into Light Two|Shanti|Share|Share Tech|Share Tech Mono|Shojumaru|Short Stack|Shrikhand|Siemreap|Sigmar One|Signika|Signika Negative|Simonetta|Single Day|Sintony|Sirin Stencil|Six Caps|Skranji|Slabo 13px|Slabo 27px|Slackey|Smokum|Smythe|Sniglet|Snippet|Snowburst One|Sofadi One|Sofia|Song Myung|Sonsie One|Sorts Mill Goudy|Source Code Pro|Source Sans Pro|Source Serif Pro|Space Mono|Special Elite|Spectral|Spectral SC|Spicy Rice|Spinnaker|Spirax|Squada One|Sree Krushnadevaraya|Sriracha|Srisakdi|Staatliches|Stalemate|Stalinist One|Stardos Stencil|Stint Ultra Condensed|Stint Ultra Expanded|Stoke|Strait|Stylish|Sue Ellen Francisco|Suez One|Sumana|Sunflower|Sunshiney|Supermercado One|Sura|Suranna|Suravaram|Suwannaphum|Swanky and Moo Moo|Syncopate|Tajawal|Tangerine|Taprom|Tauri|Taviraj|Teko|Telex|Tenali Ramakrishna|Tenor Sans|Text Me One|Thasadith|The Girl Next Door|Tienne|Tillana|Timmana|Tinos|Titan One|Titillium Web|Trade Winds|Trirong|Trocchi|Trochut|Trykker|Tulpen One|Turret Road|Ubuntu|Ubuntu Condensed|Ubuntu Mono|Ultra|Uncial Antiqua|Underdog|Unica One|UnifrakturCook|UnifrakturMaguntia|Unkempt|Unlock|Unna|VT323|Vampiro One|Varela|Varela Round|Vast Shadow|Vesper Libre|Vibes|Vibur|Vidaloka|Viga|Voces|Volkhov|Vollkorn|Vollkorn SC|Voltaire|Waiting for the Sunrise|Wallpoet|Walter Turncoat|Warnes|Wellfleet|Wendy One|Wire One|Work Sans|Yanone Kaffeesatz|Yantramanav|Yatra One|Yellowtail|Yeon Sung|Yeseva One|Yesteryear|Yrsa|ZCOOL KuaiLe|ZCOOL QingKe HuangYou|ZCOOL XiaoWei|Zeyada|Zhi Mang Xing|Zilla Slab|Zilla Slab Highlight))?(,(normal|italic))?$",
117 | "examples": ["00FF00,17"],
118 | "required": false
119 | }, {
120 | "name": "chxt",
121 | "pattern": "^(?:[xytr])(,(?:[xytr]))*$",
122 | "examples": ["y", "x,y", "x,x,y", "x,y,t,r,t"],
123 | "required": false
124 | }, {
125 | "name": "chxl",
126 | "pattern": "^\\|?[0-9]+:\\|(?:[^\\|]*\\|?)+",
127 | "examples": ["0:|Jan|July|Jan", "0:|Jan|July|Jan|1|10|20|30"],
128 | "required": false
129 | }, {
130 | "name": "chxs",
131 | "pattern": "^^(?:[0-9]+(?:N[^\\*]*\\*(?:[f|p|e]|(?:c[a-z]{3}))?(?:[0-9]+)?(?:[zs]{1,2}?)?(?:[x|y])?\\*(?:[^,]*)?)?(?:,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?)?(?:,[0-9.]+(?:,-?[0|1](?:,(?:(?:[l|t]t?)|_)(?:,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?(?:,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?)?)?)?)?)?(?:,(?:s))?(?:,(?:((?:min|max)[-0-9]{1,3}){1,2}))?\\|?)+$",
132 | "examples": ["1,0000DD", "1N*cUSD*Mil,FF0000", "1N*cEUR*,FF0000", "2,0000DD,13,0,t", "0N*p*per-month,0000FF", "0N*e*,000000|1N*cUSD*Mil,FF0000|2N*2sz*,0000FF"],
133 | "required": false
134 | }, {
135 | "name": "chm",
136 | "pattern": "^(?:b|B),[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,\\d+,0|(N|N[^\\*]*\\*(?:[f|p|e]|(?:c[a-z]{3}))?(?:[0-9]+)?(?:[zs]{1,2}?)?(?:[x|y])?\\*(?:[^,]*)?),[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,(?:-?\\d+(?:(?::-?\\d+(?::-?\\d+)?)?|(?:\\.\\d+)))?,\\d+((,(\\d+)?)?(,(.?(s|c|e):?:?))?(,?(ABeeZee|Abel|Abhaya Libre|Abril Fatface|Aclonica|Acme|Actor|Adamina|Advent Pro|Aguafina Script|Akronim|Aladin|Aldrich|Alef|Alegreya|Alegreya SC|Alegreya Sans|Alegreya Sans SC|Aleo|Alex Brush|Alfa Slab One|Alice|Alike|Alike Angular|Allan|Allerta|Allerta Stencil|Allura|Almarai|Almendra|Almendra Display|Almendra SC|Amarante|Amaranth|Amatic SC|Amethysta|Amiko|Amiri|Amita|Anaheim|Andada|Andika|Angkor|Annie Use Your Telescope|Anonymous Pro|Antic|Antic Didone|Antic Slab|Anton|Arapey|Arbutus|Arbutus Slab|Architects Daughter|Archivo|Archivo Black|Archivo Narrow|Aref Ruqaa|Arima Madurai|Arimo|Arizonia|Armata|Arsenal|Artifika|Arvo|Arya|Asap|Asap Condensed|Asar|Asset|Assistant|Astloch|Asul|Athiti|Atma|Atomic Age|Aubrey|Audiowide|Autour One|Average|Average Sans|Averia Gruesa Libre|Averia Libre|Averia Sans Libre|Averia Serif Libre|B612|B612 Mono|Bad Script|Bahiana|Bahianita|Bai Jamjuree|Baloo|Baloo Bhai|Baloo Bhaijaan|Baloo Bhaina|Baloo Chettan|Baloo Da|Baloo Paaji|Baloo Tamma|Baloo Tammudu|Baloo Thambi|Balthazar|Bangers|Barlow|Barlow Condensed|Barlow Semi Condensed|Barriecito|Barrio|Basic|Battambang|Baumans|Bayon|Be Vietnam|Belgrano|Bellefair|Belleza|BenchNine|Bentham|Berkshire Swash|Beth Ellen|Bevan|Big Shoulders Display|Big Shoulders Text|Bigelow Rules|Bigshot One|Bilbo|Bilbo Swash Caps|BioRhyme|BioRhyme Expanded|Biryani|Bitter|Black And White Picture|Black Han Sans|Black Ops One|Blinker|Bokor|Bonbon|Boogaloo|Bowlby One|Bowlby One SC|Brawler|Bree Serif|Bubblegum Sans|Bubbler One|Buda|Buenard|Bungee|Bungee Hairline|Bungee Inline|Bungee Outline|Bungee Shade|Butcherman|Butterfly Kids|Cabin|Cabin Condensed|Cabin Sketch|Caesar Dressing|Cagliostro|Cairo|Calligraffitti|Cambay|Cambo|Candal|Cantarell|Cantata One|Cantora One|Capriola|Cardo|Carme|Carrois Gothic|Carrois Gothic SC|Carter One|Catamaran|Caudex|Caveat|Caveat Brush|Cedarville Cursive|Ceviche One|Chakra Petch|Changa|Changa One|Chango|Charm|Charmonman|Chathura|Chau Philomene One|Chela One|Chelsea Market|Chenla|Cherry Cream Soda|Cherry Swash|Chewy|Chicle|Chilanka|Chivo|Chonburi|Cinzel|Cinzel Decorative|Clicker Script|Coda|Coda Caption|Codystar|Coiny|Combo|Comfortaa|Coming Soon|Concert One|Condiment|Content|Contrail One|Convergence|Cookie|Copse|Corben|Cormorant|Cormorant Garamond|Cormorant Infant|Cormorant SC|Cormorant Unicase|Cormorant Upright|Courgette|Cousine|Coustard|Covered By Your Grace|Crafty Girls|Creepster|Crete Round|Crimson Pro|Crimson Text|Croissant One|Crushed|Cuprum|Cute Font|Cutive|Cutive Mono|DM Sans|DM Serif Display|DM Serif Text|Damion|Dancing Script|Dangrek|Darker Grotesque|David Libre|Dawning of a New Day|Days One|Dekko|Delius|Delius Swash Caps|Delius Unicase|Della Respira|Denk One|Devonshire|Dhurjati|Didact Gothic|Diplomata|Diplomata SC|Do Hyeon|Dokdo|Domine|Donegal One|Doppio One|Dorsa|Dosis|Dr Sugiyama|Duru Sans|Dynalight|EB Garamond|Eagle Lake|East Sea Dokdo|Eater|Economica|Eczar|El Messiri|Electrolize|Elsie|Elsie Swash Caps|Emblema One|Emilys Candy|Encode Sans|Encode Sans Condensed|Encode Sans Expanded|Encode Sans Semi Condensed|Encode Sans Semi Expanded|Engagement|Englebert|Enriqueta|Erica One|Esteban|Euphoria Script|Ewert|Exo|Exo 2|Expletus Sans|Fahkwang|Fanwood Text|Farro|Farsan|Fascinate|Fascinate Inline|Faster One|Fasthand|Fauna One|Faustina|Federant|Federo|Felipa|Fenix|Finger Paint|Fira Code|Fira Mono|Fira Sans|Fira Sans Condensed|Fira Sans Extra Condensed|Fjalla One|Fjord One|Flamenco|Flavors|Fondamento|Fontdiner Swanky|Forum|Francois One|Frank Ruhl Libre|Freckle Face|Fredericka the Great|Fredoka One|Freehand|Fresca|Frijole|Fruktur|Fugaz One|GFS Didot|GFS Neohellenic|Gabriela|Gaegu|Gafata|Galada|Galdeano|Galindo|Gamja Flower|Gayathri|Gentium Basic|Gentium Book Basic|Geo|Geostar|Geostar Fill|Germania One|Gidugu|Gilda Display|Give You Glory|Glass Antiqua|Glegoo|Gloria Hallelujah|Goblin One|Gochi Hand|Gorditas|Gothic A1|Goudy Bookletter 1911|Graduate|Grand Hotel|Gravitas One|Great Vibes|Grenze|Griffy|Gruppo|Gudea|Gugi|Gurajada|Habibi|Halant|Hammersmith One|Hanalei|Hanalei Fill|Handlee|Hanuman|Happy Monkey|Harmattan|Headland One|Heebo|Henny Penny|Hepta Slab|Herr Von Muellerhoff|Hi Melody|Hind|Hind Guntur|Hind Madurai|Hind Siliguri|Hind Vadodara|Holtwood One SC|Homemade Apple|Homenaje|IBM Plex Mono|IBM Plex Sans|IBM Plex Sans Condensed|IBM Plex Serif|IM Fell DW Pica|IM Fell DW Pica SC|IM Fell Double Pica|IM Fell Double Pica SC|IM Fell English|IM Fell English SC|IM Fell French Canon|IM Fell French Canon SC|IM Fell Great Primer|IM Fell Great Primer SC|Iceberg|Iceland|Imprima|Inconsolata|Inder|Indie Flower|Inika|Inknut Antiqua|Irish Grover|Istok Web|Italiana|Italianno|Itim|Jacques Francois|Jacques Francois Shadow|Jaldi|Jim Nightshade|Jockey One|Jolly Lodger|Jomhuria|Jomolhari|Josefin Sans|Josefin Slab|Joti One|Jua|Judson|Julee|Julius Sans One|Junge|Jura|Just Another Hand|Just Me Again Down Here|K2D|Kadwa|Kalam|Kameron|Kanit|Kantumruy|Karla|Karma|Katibeh|Kaushan Script|Kavivanar|Kavoon|Kdam Thmor|Keania One|Kelly Slab|Kenia|Khand|Khmer|Khula|Kirang Haerang|Kite One|Knewave|KoHo|Kodchasan|Kosugi|Kosugi Maru|Kotta One|Koulen|Kranky|Kreon|Kristi|Krona One|Krub|Kumar One|Kumar One Outline|Kurale|La Belle Aurore|Lacquer|Laila|Lakki Reddy|Lalezar|Lancelot|Lateef|Lato|League Script|Leckerli One|Ledger|Lekton|Lemon|Lemonada|Lexend Deca|Lexend Exa|Lexend Giga|Lexend Mega|Lexend Peta|Lexend Tera|Lexend Zetta|Libre Barcode 128|Libre Barcode 128 Text|Libre Barcode 39|Libre Barcode 39 Extended|Libre Barcode 39 Extended Text|Libre Barcode 39 Text|Libre Baskerville|Libre Caslon Display|Libre Caslon Text|Libre Franklin|Life Savers|Lilita One|Lily Script One|Limelight|Linden Hill|Literata|Liu Jian Mao Cao|Livvic|Lobster|Lobster Two|Londrina Outline|Londrina Shadow|Londrina Sketch|Londrina Solid|Long Cang|Lora|Love Ya Like A Sister|Loved by the King|Lovers Quarrel|Luckiest Guy|Lusitana|Lustria|M PLUS 1p|M PLUS Rounded 1c|Ma Shan Zheng|Macondo|Macondo Swash Caps|Mada|Magra|Maiden Orange|Maitree|Major Mono Display|Mako|Mali|Mallanna|Mandali|Manjari|Mansalva|Manuale|Marcellus|Marcellus SC|Marck Script|Margarine|Markazi Text|Marko One|Marmelad|Martel|Martel Sans|Marvel|Mate|Mate SC|Maven Pro|McLaren|Meddon|MedievalSharp|Medula One|Meera Inimai|Megrim|Meie Script|Merienda|Merienda One|Merriweather|Merriweather Sans|Metal|Metal Mania|Metamorphous|Metrophobic|Michroma|Milonga|Miltonian|Miltonian Tattoo|Mina|Miniver|Miriam Libre|Mirza|Miss Fajardose|Mitr|Modak|Modern Antiqua|Mogra|Molengo|Molle|Monda|Monofett|Monoton|Monsieur La Doulaise|Montaga|Montez|Montserrat|Montserrat Alternates|Montserrat Subrayada|Moul|Moulpali|Mountains of Christmas|Mouse Memoirs|Mr Bedfort|Mr Dafoe|Mr De Haviland|Mrs Saint Delafield|Mrs Sheppards|Mukta|Mukta Mahee|Mukta Malar|Mukta Vaani|Muli|Mystery Quest|NTR|Nanum Brush Script|Nanum Gothic|Nanum Gothic Coding|Nanum Myeongjo|Nanum Pen Script|Neucha|Neuton|New Rocker|News Cycle|Niconne|Niramit|Nixie One|Nobile|Nokora|Norican|Nosifer|Notable|Nothing You Could Do|Noticia Text|Noto Sans|Noto Sans HK|Noto Sans JP|Noto Sans KR|Noto Sans SC|Noto Sans TC|Noto Serif|Noto Serif JP|Noto Serif KR|Noto Serif SC|Noto Serif TC|Nova Cut|Nova Flat|Nova Mono|Nova Oval|Nova Round|Nova Script|Nova Slim|Nova Square|Numans|Nunito|Nunito Sans|Odor Mean Chey|Offside|Old Standard TT|Oldenburg|Oleo Script|Oleo Script Swash Caps|Open Sans|Open Sans Condensed|Oranienbaum|Orbitron|Oregano|Orienta|Original Surfer|Oswald|Over the Rainbow|Overlock|Overlock SC|Overpass|Overpass Mono|Ovo|Oxygen|Oxygen Mono|PT Mono|PT Sans|PT Sans Caption|PT Sans Narrow|PT Serif|PT Serif Caption|Pacifico|Padauk|Palanquin|Palanquin Dark|Pangolin|Paprika|Parisienne|Passero One|Passion One|Pathway Gothic One|Patrick Hand|Patrick Hand SC|Pattaya|Patua One|Pavanam|Paytone One|Peddana|Peralta|Permanent Marker|Petit Formal Script|Petrona|Philosopher|Piedra|Pinyon Script|Pirata One|Plaster|Play|Playball|Playfair Display|Playfair Display SC|Podkova|Poiret One|Poller One|Poly|Pompiere|Pontano Sans|Poor Story|Poppins|Port Lligat Sans|Port Lligat Slab|Pragati Narrow|Prata|Preahvihear|Press Start 2P|Pridi|Princess Sofia|Prociono|Prompt|Prosto One|Proza Libre|Puritan|Purple Purse|Quando|Quantico|Quattrocento|Quattrocento Sans|Questrial|Quicksand|Quintessential|Qwigley|Racing Sans One|Radley|Rajdhani|Rakkas|Raleway|Raleway Dots|Ramabhadra|Ramaraja|Rambla|Rammetto One|Ranchers|Rancho|Ranga|Rasa|Rationale|Ravi Prakash|Red Hat Display|Red Hat Text|Redressed|Reem Kufi|Reenie Beanie|Revalia|Rhodium Libre|Ribeye|Ribeye Marrow|Righteous|Risque|Roboto|Roboto Condensed|Roboto Mono|Roboto Slab|Rochester|Rock Salt|Rokkitt|Romanesco|Ropa Sans|Rosario|Rosarivo|Rouge Script|Rozha One|Rubik|Rubik Mono One|Ruda|Rufina|Ruge Boogie|Ruluko|Rum Raisin|Ruslan Display|Russo One|Ruthie|Rye|Sacramento|Sahitya|Sail|Saira|Saira Condensed|Saira Extra Condensed|Saira Semi Condensed|Saira Stencil One|Salsa|Sanchez|Sancreek|Sansita|Sarabun|Sarala|Sarina|Sarpanch|Satisfy|Sawarabi Gothic|Sawarabi Mincho|Scada|Scheherazade|Schoolbell|Scope One|Seaweed Script|Secular One|Sedgwick Ave|Sedgwick Ave Display|Sevillana|Seymour One|Shadows Into Light|Shadows Into Light Two|Shanti|Share|Share Tech|Share Tech Mono|Shojumaru|Short Stack|Shrikhand|Siemreap|Sigmar One|Signika|Signika Negative|Simonetta|Single Day|Sintony|Sirin Stencil|Six Caps|Skranji|Slabo 13px|Slabo 27px|Slackey|Smokum|Smythe|Sniglet|Snippet|Snowburst One|Sofadi One|Sofia|Song Myung|Sonsie One|Sorts Mill Goudy|Source Code Pro|Source Sans Pro|Source Serif Pro|Space Mono|Special Elite|Spectral|Spectral SC|Spicy Rice|Spinnaker|Spirax|Squada One|Sree Krushnadevaraya|Sriracha|Srisakdi|Staatliches|Stalemate|Stalinist One|Stardos Stencil|Stint Ultra Condensed|Stint Ultra Expanded|Stoke|Strait|Stylish|Sue Ellen Francisco|Suez One|Sumana|Sunflower|Sunshiney|Supermercado One|Sura|Suranna|Suravaram|Suwannaphum|Swanky and Moo Moo|Syncopate|Tajawal|Tangerine|Taprom|Tauri|Taviraj|Teko|Telex|Tenali Ramakrishna|Tenor Sans|Text Me One|Thasadith|The Girl Next Door|Tienne|Tillana|Timmana|Tinos|Titan One|Titillium Web|Trade Winds|Trirong|Trocchi|Trochut|Trykker|Tulpen One|Turret Road|Ubuntu|Ubuntu Condensed|Ubuntu Mono|Ultra|Uncial Antiqua|Underdog|Unica One|UnifrakturCook|UnifrakturMaguntia|Unkempt|Unlock|Unna|VT323|Vampiro One|Varela|Varela Round|Vast Shadow|Vesper Libre|Vibes|Vibur|Vidaloka|Viga|Voces|Volkhov|Vollkorn|Vollkorn SC|Voltaire|Waiting for the Sunrise|Wallpoet|Walter Turncoat|Warnes|Wellfleet|Wendy One|Wire One|Work Sans|Yanone Kaffeesatz|Yantramanav|Yatra One|Yellowtail|Yeon Sung|Yeseva One|Yesteryear|Yrsa|ZCOOL KuaiLe|ZCOOL QingKe HuangYou|ZCOOL XiaoWei|Zeyada|Zhi Mang Xing|Zilla Slab|Zilla Slab Highlight))?(,?(normal|italic))?)?|D,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,(?:0|(?:-?\\d+:-?\\d+)),\\d+|(?:a|c|C|d|E|h|H|o|s|v|V|x),[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,(?:-1|(?:-?\\d+:-?\\d+(?::-?\\d+)?)),\\d+(?:\\.\\d+)?(?:[|](?:b|B),[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,\\d+,0|(N|N[^\\*]*\\*(?:[f|p|e]|(?:c[a-z]{3}))?(?:[0-9]+)?(?:[zs]{1,2}?)?(?:[x|y])?\\*(?:[^,]*)?),[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,(?:-?\\d+(?:(?::-?\\d+(?::-?\\d+)?)?|(?:\\.\\d+)))?,\\d+((,(\\d+)?)?(,(.?(s|c|e):?:?))?(,?(ABeeZee|Abel|Abhaya Libre|Abril Fatface|Aclonica|Acme|Actor|Adamina|Advent Pro|Aguafina Script|Akronim|Aladin|Aldrich|Alef|Alegreya|Alegreya SC|Alegreya Sans|Alegreya Sans SC|Aleo|Alex Brush|Alfa Slab One|Alice|Alike|Alike Angular|Allan|Allerta|Allerta Stencil|Allura|Almarai|Almendra|Almendra Display|Almendra SC|Amarante|Amaranth|Amatic SC|Amethysta|Amiko|Amiri|Amita|Anaheim|Andada|Andika|Angkor|Annie Use Your Telescope|Anonymous Pro|Antic|Antic Didone|Antic Slab|Anton|Arapey|Arbutus|Arbutus Slab|Architects Daughter|Archivo|Archivo Black|Archivo Narrow|Aref Ruqaa|Arima Madurai|Arimo|Arizonia|Armata|Arsenal|Artifika|Arvo|Arya|Asap|Asap Condensed|Asar|Asset|Assistant|Astloch|Asul|Athiti|Atma|Atomic Age|Aubrey|Audiowide|Autour One|Average|Average Sans|Averia Gruesa Libre|Averia Libre|Averia Sans Libre|Averia Serif Libre|B612|B612 Mono|Bad Script|Bahiana|Bahianita|Bai Jamjuree|Baloo|Baloo Bhai|Baloo Bhaijaan|Baloo Bhaina|Baloo Chettan|Baloo Da|Baloo Paaji|Baloo Tamma|Baloo Tammudu|Baloo Thambi|Balthazar|Bangers|Barlow|Barlow Condensed|Barlow Semi Condensed|Barriecito|Barrio|Basic|Battambang|Baumans|Bayon|Be Vietnam|Belgrano|Bellefair|Belleza|BenchNine|Bentham|Berkshire Swash|Beth Ellen|Bevan|Big Shoulders Display|Big Shoulders Text|Bigelow Rules|Bigshot One|Bilbo|Bilbo Swash Caps|BioRhyme|BioRhyme Expanded|Biryani|Bitter|Black And White Picture|Black Han Sans|Black Ops One|Blinker|Bokor|Bonbon|Boogaloo|Bowlby One|Bowlby One SC|Brawler|Bree Serif|Bubblegum Sans|Bubbler One|Buda|Buenard|Bungee|Bungee Hairline|Bungee Inline|Bungee Outline|Bungee Shade|Butcherman|Butterfly Kids|Cabin|Cabin Condensed|Cabin Sketch|Caesar Dressing|Cagliostro|Cairo|Calligraffitti|Cambay|Cambo|Candal|Cantarell|Cantata One|Cantora One|Capriola|Cardo|Carme|Carrois Gothic|Carrois Gothic SC|Carter One|Catamaran|Caudex|Caveat|Caveat Brush|Cedarville Cursive|Ceviche One|Chakra Petch|Changa|Changa One|Chango|Charm|Charmonman|Chathura|Chau Philomene One|Chela One|Chelsea Market|Chenla|Cherry Cream Soda|Cherry Swash|Chewy|Chicle|Chilanka|Chivo|Chonburi|Cinzel|Cinzel Decorative|Clicker Script|Coda|Coda Caption|Codystar|Coiny|Combo|Comfortaa|Coming Soon|Concert One|Condiment|Content|Contrail One|Convergence|Cookie|Copse|Corben|Cormorant|Cormorant Garamond|Cormorant Infant|Cormorant SC|Cormorant Unicase|Cormorant Upright|Courgette|Cousine|Coustard|Covered By Your Grace|Crafty Girls|Creepster|Crete Round|Crimson Pro|Crimson Text|Croissant One|Crushed|Cuprum|Cute Font|Cutive|Cutive Mono|DM Sans|DM Serif Display|DM Serif Text|Damion|Dancing Script|Dangrek|Darker Grotesque|David Libre|Dawning of a New Day|Days One|Dekko|Delius|Delius Swash Caps|Delius Unicase|Della Respira|Denk One|Devonshire|Dhurjati|Didact Gothic|Diplomata|Diplomata SC|Do Hyeon|Dokdo|Domine|Donegal One|Doppio One|Dorsa|Dosis|Dr Sugiyama|Duru Sans|Dynalight|EB Garamond|Eagle Lake|East Sea Dokdo|Eater|Economica|Eczar|El Messiri|Electrolize|Elsie|Elsie Swash Caps|Emblema One|Emilys Candy|Encode Sans|Encode Sans Condensed|Encode Sans Expanded|Encode Sans Semi Condensed|Encode Sans Semi Expanded|Engagement|Englebert|Enriqueta|Erica One|Esteban|Euphoria Script|Ewert|Exo|Exo 2|Expletus Sans|Fahkwang|Fanwood Text|Farro|Farsan|Fascinate|Fascinate Inline|Faster One|Fasthand|Fauna One|Faustina|Federant|Federo|Felipa|Fenix|Finger Paint|Fira Code|Fira Mono|Fira Sans|Fira Sans Condensed|Fira Sans Extra Condensed|Fjalla One|Fjord One|Flamenco|Flavors|Fondamento|Fontdiner Swanky|Forum|Francois One|Frank Ruhl Libre|Freckle Face|Fredericka the Great|Fredoka One|Freehand|Fresca|Frijole|Fruktur|Fugaz One|GFS Didot|GFS Neohellenic|Gabriela|Gaegu|Gafata|Galada|Galdeano|Galindo|Gamja Flower|Gayathri|Gentium Basic|Gentium Book Basic|Geo|Geostar|Geostar Fill|Germania One|Gidugu|Gilda Display|Give You Glory|Glass Antiqua|Glegoo|Gloria Hallelujah|Goblin One|Gochi Hand|Gorditas|Gothic A1|Goudy Bookletter 1911|Graduate|Grand Hotel|Gravitas One|Great Vibes|Grenze|Griffy|Gruppo|Gudea|Gugi|Gurajada|Habibi|Halant|Hammersmith One|Hanalei|Hanalei Fill|Handlee|Hanuman|Happy Monkey|Harmattan|Headland One|Heebo|Henny Penny|Hepta Slab|Herr Von Muellerhoff|Hi Melody|Hind|Hind Guntur|Hind Madurai|Hind Siliguri|Hind Vadodara|Holtwood One SC|Homemade Apple|Homenaje|IBM Plex Mono|IBM Plex Sans|IBM Plex Sans Condensed|IBM Plex Serif|IM Fell DW Pica|IM Fell DW Pica SC|IM Fell Double Pica|IM Fell Double Pica SC|IM Fell English|IM Fell English SC|IM Fell French Canon|IM Fell French Canon SC|IM Fell Great Primer|IM Fell Great Primer SC|Iceberg|Iceland|Imprima|Inconsolata|Inder|Indie Flower|Inika|Inknut Antiqua|Irish Grover|Istok Web|Italiana|Italianno|Itim|Jacques Francois|Jacques Francois Shadow|Jaldi|Jim Nightshade|Jockey One|Jolly Lodger|Jomhuria|Jomolhari|Josefin Sans|Josefin Slab|Joti One|Jua|Judson|Julee|Julius Sans One|Junge|Jura|Just Another Hand|Just Me Again Down Here|K2D|Kadwa|Kalam|Kameron|Kanit|Kantumruy|Karla|Karma|Katibeh|Kaushan Script|Kavivanar|Kavoon|Kdam Thmor|Keania One|Kelly Slab|Kenia|Khand|Khmer|Khula|Kirang Haerang|Kite One|Knewave|KoHo|Kodchasan|Kosugi|Kosugi Maru|Kotta One|Koulen|Kranky|Kreon|Kristi|Krona One|Krub|Kumar One|Kumar One Outline|Kurale|La Belle Aurore|Lacquer|Laila|Lakki Reddy|Lalezar|Lancelot|Lateef|Lato|League Script|Leckerli One|Ledger|Lekton|Lemon|Lemonada|Lexend Deca|Lexend Exa|Lexend Giga|Lexend Mega|Lexend Peta|Lexend Tera|Lexend Zetta|Libre Barcode 128|Libre Barcode 128 Text|Libre Barcode 39|Libre Barcode 39 Extended|Libre Barcode 39 Extended Text|Libre Barcode 39 Text|Libre Baskerville|Libre Caslon Display|Libre Caslon Text|Libre Franklin|Life Savers|Lilita One|Lily Script One|Limelight|Linden Hill|Literata|Liu Jian Mao Cao|Livvic|Lobster|Lobster Two|Londrina Outline|Londrina Shadow|Londrina Sketch|Londrina Solid|Long Cang|Lora|Love Ya Like A Sister|Loved by the King|Lovers Quarrel|Luckiest Guy|Lusitana|Lustria|M PLUS 1p|M PLUS Rounded 1c|Ma Shan Zheng|Macondo|Macondo Swash Caps|Mada|Magra|Maiden Orange|Maitree|Major Mono Display|Mako|Mali|Mallanna|Mandali|Manjari|Mansalva|Manuale|Marcellus|Marcellus SC|Marck Script|Margarine|Markazi Text|Marko One|Marmelad|Martel|Martel Sans|Marvel|Mate|Mate SC|Maven Pro|McLaren|Meddon|MedievalSharp|Medula One|Meera Inimai|Megrim|Meie Script|Merienda|Merienda One|Merriweather|Merriweather Sans|Metal|Metal Mania|Metamorphous|Metrophobic|Michroma|Milonga|Miltonian|Miltonian Tattoo|Mina|Miniver|Miriam Libre|Mirza|Miss Fajardose|Mitr|Modak|Modern Antiqua|Mogra|Molengo|Molle|Monda|Monofett|Monoton|Monsieur La Doulaise|Montaga|Montez|Montserrat|Montserrat Alternates|Montserrat Subrayada|Moul|Moulpali|Mountains of Christmas|Mouse Memoirs|Mr Bedfort|Mr Dafoe|Mr De Haviland|Mrs Saint Delafield|Mrs Sheppards|Mukta|Mukta Mahee|Mukta Malar|Mukta Vaani|Muli|Mystery Quest|NTR|Nanum Brush Script|Nanum Gothic|Nanum Gothic Coding|Nanum Myeongjo|Nanum Pen Script|Neucha|Neuton|New Rocker|News Cycle|Niconne|Niramit|Nixie One|Nobile|Nokora|Norican|Nosifer|Notable|Nothing You Could Do|Noticia Text|Noto Sans|Noto Sans HK|Noto Sans JP|Noto Sans KR|Noto Sans SC|Noto Sans TC|Noto Serif|Noto Serif JP|Noto Serif KR|Noto Serif SC|Noto Serif TC|Nova Cut|Nova Flat|Nova Mono|Nova Oval|Nova Round|Nova Script|Nova Slim|Nova Square|Numans|Nunito|Nunito Sans|Odor Mean Chey|Offside|Old Standard TT|Oldenburg|Oleo Script|Oleo Script Swash Caps|Open Sans|Open Sans Condensed|Oranienbaum|Orbitron|Oregano|Orienta|Original Surfer|Oswald|Over the Rainbow|Overlock|Overlock SC|Overpass|Overpass Mono|Ovo|Oxygen|Oxygen Mono|PT Mono|PT Sans|PT Sans Caption|PT Sans Narrow|PT Serif|PT Serif Caption|Pacifico|Padauk|Palanquin|Palanquin Dark|Pangolin|Paprika|Parisienne|Passero One|Passion One|Pathway Gothic One|Patrick Hand|Patrick Hand SC|Pattaya|Patua One|Pavanam|Paytone One|Peddana|Peralta|Permanent Marker|Petit Formal Script|Petrona|Philosopher|Piedra|Pinyon Script|Pirata One|Plaster|Play|Playball|Playfair Display|Playfair Display SC|Podkova|Poiret One|Poller One|Poly|Pompiere|Pontano Sans|Poor Story|Poppins|Port Lligat Sans|Port Lligat Slab|Pragati Narrow|Prata|Preahvihear|Press Start 2P|Pridi|Princess Sofia|Prociono|Prompt|Prosto One|Proza Libre|Puritan|Purple Purse|Quando|Quantico|Quattrocento|Quattrocento Sans|Questrial|Quicksand|Quintessential|Qwigley|Racing Sans One|Radley|Rajdhani|Rakkas|Raleway|Raleway Dots|Ramabhadra|Ramaraja|Rambla|Rammetto One|Ranchers|Rancho|Ranga|Rasa|Rationale|Ravi Prakash|Red Hat Display|Red Hat Text|Redressed|Reem Kufi|Reenie Beanie|Revalia|Rhodium Libre|Ribeye|Ribeye Marrow|Righteous|Risque|Roboto|Roboto Condensed|Roboto Mono|Roboto Slab|Rochester|Rock Salt|Rokkitt|Romanesco|Ropa Sans|Rosario|Rosarivo|Rouge Script|Rozha One|Rubik|Rubik Mono One|Ruda|Rufina|Ruge Boogie|Ruluko|Rum Raisin|Ruslan Display|Russo One|Ruthie|Rye|Sacramento|Sahitya|Sail|Saira|Saira Condensed|Saira Extra Condensed|Saira Semi Condensed|Saira Stencil One|Salsa|Sanchez|Sancreek|Sansita|Sarabun|Sarala|Sarina|Sarpanch|Satisfy|Sawarabi Gothic|Sawarabi Mincho|Scada|Scheherazade|Schoolbell|Scope One|Seaweed Script|Secular One|Sedgwick Ave|Sedgwick Ave Display|Sevillana|Seymour One|Shadows Into Light|Shadows Into Light Two|Shanti|Share|Share Tech|Share Tech Mono|Shojumaru|Short Stack|Shrikhand|Siemreap|Sigmar One|Signika|Signika Negative|Simonetta|Single Day|Sintony|Sirin Stencil|Six Caps|Skranji|Slabo 13px|Slabo 27px|Slackey|Smokum|Smythe|Sniglet|Snippet|Snowburst One|Sofadi One|Sofia|Song Myung|Sonsie One|Sorts Mill Goudy|Source Code Pro|Source Sans Pro|Source Serif Pro|Space Mono|Special Elite|Spectral|Spectral SC|Spicy Rice|Spinnaker|Spirax|Squada One|Sree Krushnadevaraya|Sriracha|Srisakdi|Staatliches|Stalemate|Stalinist One|Stardos Stencil|Stint Ultra Condensed|Stint Ultra Expanded|Stoke|Strait|Stylish|Sue Ellen Francisco|Suez One|Sumana|Sunflower|Sunshiney|Supermercado One|Sura|Suranna|Suravaram|Suwannaphum|Swanky and Moo Moo|Syncopate|Tajawal|Tangerine|Taprom|Tauri|Taviraj|Teko|Telex|Tenali Ramakrishna|Tenor Sans|Text Me One|Thasadith|The Girl Next Door|Tienne|Tillana|Timmana|Tinos|Titan One|Titillium Web|Trade Winds|Trirong|Trocchi|Trochut|Trykker|Tulpen One|Turret Road|Ubuntu|Ubuntu Condensed|Ubuntu Mono|Ultra|Uncial Antiqua|Underdog|Unica One|UnifrakturCook|UnifrakturMaguntia|Unkempt|Unlock|Unna|VT323|Vampiro One|Varela|Varela Round|Vast Shadow|Vesper Libre|Vibes|Vibur|Vidaloka|Viga|Voces|Volkhov|Vollkorn|Vollkorn SC|Voltaire|Waiting for the Sunrise|Wallpoet|Walter Turncoat|Warnes|Wellfleet|Wendy One|Wire One|Work Sans|Yanone Kaffeesatz|Yantramanav|Yatra One|Yellowtail|Yeon Sung|Yeseva One|Yesteryear|Yrsa|ZCOOL KuaiLe|ZCOOL QingKe HuangYou|ZCOOL XiaoWei|Zeyada|Zhi Mang Xing|Zilla Slab|Zilla Slab Highlight))?(,?(normal|italic))?)?|D,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,(?:0|(?:-?\\d+:-?\\d+)),\\d+|(?:a|c|C|d|E|h|H|o|s|v|V|x),[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,(?:-1|(?:-?\\d+:-?\\d+(?::-?\\d+)?)),\\d+(?:\\.\\d+)?)*$",
137 | "examples": [],
138 | "required": false
139 | }, {
140 | "name": "chls",
141 | "pattern": "^(((?:[0-9]\\.?)+,?){1,3}\\|?)+",
142 | "examples": ["10", "3,6,3|5"],
143 | "required": false
144 | }, {
145 | "name": "chl",
146 | "pattern": "^(?:[^\\|]*\\|?)+$",
147 | "examples": ["label1|label2", "multi\nline\nlabel1|label2"],
148 | "required": false
149 | }, {
150 | "name": "chlps",
151 | "pattern": "^(?:align|anchor|backgroundColor|borderColor|borderRadius|borderWidth|clamp|clip|color|display|font\\.size|font\\.style|font\\.weight|font\\.lineHeight|offset|opacity|padding|padding\\.top|padding\\.right|padding\\.bottom|padding\\.left|rotation|textAlign|textStrokeColor|textStrokeWidth|textShadowBlur|textShadowColor),(?:[0-9a-zA-Z.]+)(?:\\|(?:align|anchor|backgroundColor|borderColor|borderRadius|borderWidth|clamp|clip|color|display|font\\.size|font\\.style|font\\.weight|font\\.lineHeight|offset|opacity|padding|padding\\.top|padding\\.right|padding\\.bottom|padding\\.left|rotation|textAlign|textStrokeColor|textStrokeWidth|textShadowBlur|textShadowColor),(?:[0-9a-zA-Z.]+)){0,10}$",
152 | "examples": ["align,top|offset,10|color,FF00FF", "align,top|offset,10|color,FF00FF"]
153 | }, {
154 | "name": "chma",
155 | "pattern": "^(([-0-9\\.]+),?)+\\|?([-0-9\\.],?)+$",
156 | "examples": ["30,30,30,30", "40,20"],
157 | "required": false
158 | }, {
159 | "name": "chdlp",
160 | "pattern": "^(?:tv{0,1}|bv{0,1}|r|l)(\\|(?:l|r|a|[0-9][0-9,]*))?$",
161 | "examples": [],
162 | "required": false
163 | }, {
164 | "name": "chf",
165 | "pattern": '^(?:(?:b(?:[0-9]+|g)|a|c),s,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?|(?:bg,img,(?:(?:(?:[a-z]+:)?\\/\\/)?|www\\.)(?:localhost|(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?:(?:[a-fA-F\\d]{1,4}:){7}(?:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,2}|:)|(?:[a-fA-F\\d]{1,4}:){4}(?:(?::[a-fA-F\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,3}|:)|(?:[a-fA-F\\d]{1,4}:){3}(?:(?::[a-fA-F\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,4}|:)|(?:[a-fA-F\\d]{1,4}:){2}(?:(?::[a-fA-F\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,5}|:)|(?:[a-fA-F\\d]{1,4}:){1}(?:(?::[a-fA-F\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?|(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:northwesternmutual|travelersinsurance|verm\xF6gensberatung|verm\xF6gensberater|americanexpress|kerryproperties|sandvikcoromant|afamilycompany|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|international|lifeinsurance|travelchannel|wolterskluwer|construction|lplfinancial|scholarships|versicherung|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|volkswagen|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|scjohnson|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|yodobashi|\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|budapest|builders|business|capetown|catering|catholic|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|etisalat|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|yokohama|\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|\u043A\u0430\u0442\u043E\u043B\u0438\u043A|\u0627\u062A\u0635\u0627\u0644\u0627\u062A|\u0627\u0644\u0628\u062D\u0631\u064A\u0646|\u0627\u0644\u062C\u0632\u0627\u0626\u0631|\u0627\u0644\u0639\u0644\u064A\u0627\u0646|\u0643\u0627\u062B\u0648\u0644\u064A\u0643|\u067E\u0627\u06A9\u0633\u062A\u0627\u0646|\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE|abarth|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|webcam|xihuan|yachts|yandex|zappos|\u043C\u043E\u0441\u043A\u0432\u0430|\u043E\u043D\u043B\u0430\u0439\u043D|\u0627\u0628\u0648\u0638\u0628\u064A|\u0627\u0631\u0627\u0645\u0643\u0648|\u0627\u0644\u0627\u0631\u062F\u0646|\u0627\u0644\u0645\u063A\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062A|\u0641\u0644\u0633\u0637\u064A\u0646|\u0645\u0644\u064A\u0633\u064A\u0627|\u092D\u093E\u0930\u0924\u092E\u094D|\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8|\u30D5\u30A1\u30C3\u30B7\u30E7\u30F3|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glade|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|lixil|loans|locus|lotte|lotto|macys|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|\u05D9\u05E9\u05E8\u05D0\u05DC|\u0627\u06CC\u0631\u0627\u0646|\u0628\u0627\u0632\u0627\u0631|\u0628\u06BE\u0627\u0631\u062A|\u0633\u0648\u062F\u0627\u0646|\u0633\u0648\u0631\u064A\u0629|\u0647\u0645\u0631\u0627\u0647|\u092D\u093E\u0930\u094B\u0924|\u0938\u0902\u0917\u0920\u0928|\u09AC\u09BE\u0982\u09B2\u09BE|\u0C2D\u0C3E\u0C30\u0C24\u0C4D|\u0D2D\u0D3E\u0D30\u0D24\u0D02|\u5609\u91CC\u5927\u9152\u5E97|aarp|able|adac|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|duck|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|raid|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|\u0434\u0435\u0442\u0438|\u0441\u0430\u0439\u0442|\u0628\u0627\u0631\u062A|\u0628\u064A\u062A\u0643|\u062A\u0648\u0646\u0633|\u0634\u0628\u0643\u0629|\u0639\u0631\u0627\u0642|\u0639\u0645\u0627\u0646|\u0645\u0648\u0642\u0639|\u0680\u0627\u0631\u062A|\u092D\u093E\u0930\u0924|\u09AD\u09BE\u09B0\u09A4|\u09AD\u09BE\u09F0\u09A4|\u0A2D\u0A3E\u0A30\u0A24|\u0AAD\u0ABE\u0AB0\u0AA4|\u0B2D\u0B3E\u0B30\u0B24|\u0CAD\u0CBE\u0CB0\u0CA4|\u0DBD\u0D82\u0D9A\u0DCF|\u30A2\u30DE\u30BE\u30F3|\u30AF\u30E9\u30A6\u30C9|\u30B0\u30FC\u30B0\u30EB|\u30DD\u30A4\u30F3\u30C8|\u7EC4\u7EC7\u673A\u6784|\u96FB\u8A0A\u76C8\u79D1|\u9999\u683C\u91CC\u62C9|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceo|cfa|cfd|com|cpa|crs|csc|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|off|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|\u0431\u0435\u043B|\u043A\u043E\u043C|\u043C\u043A\u0434|\u043C\u043E\u043D|\u043E\u0440\u0433|\u0440\u0443\u0441|\u0441\u0440\u0431|\u0443\u043A\u0440|\u049B\u0430\u0437|\u0570\u0561\u0575|\u05E7\u05D5\u05DD|\u0639\u0631\u0628|\u0642\u0637\u0631|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0915\u0949\u092E|\u0928\u0947\u091F|\u0E04\u0E2D\u0E21|\u0E44\u0E17\u0E22|\u0EA5\u0EB2\u0EA7|\u307F\u3093\u306A|\u30B9\u30C8\u30A2|\u30BB\u30FC\u30EB|\u4E2D\u6587\u7F51|\u4E9A\u9A6C\u900A|\u5929\u4E3B\u6559|\u6211\u7231\u4F60|\u65B0\u52A0\u5761|\u6DE1\u9A6C\u9521|\u8BFA\u57FA\u4E9A|\u98DE\u5229\u6D66|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|\u03B5\u03BB|\u03B5\u03C5|\u0431\u0433|\u0435\u044E|\u0440\u0444|\u10D2\u10D4|\u30B3\u30E0|\u4E16\u754C|\u4E2D\u4FE1|\u4E2D\u56FD|\u4E2D\u570B|\u4F01\u4E1A|\u4F5B\u5C71|\u4FE1\u606F|\u5065\u5EB7|\u516B\u5366|\u516C\u53F8|\u516C\u76CA|\u53F0\u6E7E|\u53F0\u7063|\u5546\u57CE|\u5546\u5E97|\u5546\u6807|\u5609\u91CC|\u5728\u7EBF|\u5927\u62FF|\u5A31\u4E50|\u5BB6\u96FB|\u5E7F\u4E1C|\u5FAE\u535A|\u6148\u5584|\u624B\u673A|\u62DB\u8058|\u653F\u52A1|\u653F\u5E9C|\u65B0\u95FB|\u65F6\u5C1A|\u66F8\u7C4D|\u673A\u6784|\u6E38\u620F|\u6FB3\u9580|\u70B9\u770B|\u79FB\u52A8|\u7F51\u5740|\u7F51\u5E97|\u7F51\u7AD9|\u7F51\u7EDC|\u8054\u901A|\u8C37\u6B4C|\u8D2D\u7269|\u901A\u8CA9|\u96C6\u56E2|\u98DF\u54C1|\u9910\u5385|\u9999\u6E2F|\uB2F7\uB137|\uB2F7\uCEF4|\uC0BC\uC131|\uD55C\uAD6D)))(?::\\d{2,5})?(?:[\\/?#][^\\s"\\)\']*)?)|(?:(?:(?:b(?:[0-9]+|g)|c)|ps[0-9]+-[0-9]+),lg,[0-9]{1,2}(?:,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,[0-9.]+){1,})|(?:(?:b(?:[0-9]+|g)|c),ls,[0-9]{1,2}(?:,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,[0-9.]+){1,})|\\|?)+$',
166 | "examples": ["b0,lg,0,f44336,0.3,03a9f4,0.8"],
167 | "required": false
168 | }, {
169 | "name": "chbr",
170 | "pattern": "^[0-9]{1,3}$",
171 | "examples": ["5", "10"],
172 | "required": false
173 | }, {
174 | "name": "chan",
175 | "pattern": "^[0-9]{2,4}(?:,(?:easeInQuad|easeOutQuad|easeInOutQuad|easeInCubic|easeOutCubic|easeInOutCubic|easeInQuart|easeOutQuart|easeInOutQuart|easeInQuint|easeOutQuint|easeInOutQuint|easeInSine|easeOutSine|easeInOutSine|easeInExpo|easeOutExpo|easeInOutExpo|easeInCirc|easeOutCirc|easeInOutCirc|easeInElastic|easeOutElastic|easeInOutElastic|easeInBack|easeOutBack|easeInOutBack|easeInBounce|easeOutBounce|easeInOutBounce))?$",
176 | "examples": ["1200", "1300|easeInOutSine"],
177 | "required": false
178 | }, {
179 | "name": "chli",
180 | "pattern": "^(?:.*)$",
181 | "examples": ["95K€", "45%"],
182 | "required": false
183 | }, {
184 | "name": "icac",
185 | "examples": ["accountId"],
186 | "required": false
187 | }, {
188 | "name": "ichm",
189 | "examples": ["0785cf22a0381c2e0239e27c126de4181f501d117c2c81745611e9db928b0376"],
190 | "required": false
191 | }, {
192 | "name": "icff",
193 | "examples": ["Abel", "Akronim", "Alfa Slab One"],
194 | "required": false,
195 | "enum": ["ABeeZee", "Abel", "Abhaya Libre", "Abril Fatface", "Aclonica", "Acme", "Actor", "Adamina", "Advent Pro", "Aguafina Script", "Akronim", "Aladin", "Aldrich", "Alef", "Alegreya", "Alegreya SC", "Alegreya Sans", "Alegreya Sans SC", "Aleo", "Alex Brush", "Alfa Slab One", "Alice", "Alike", "Alike Angular", "Allan", "Allerta", "Allerta Stencil", "Allura", "Almarai", "Almendra", "Almendra Display", "Almendra SC", "Amarante", "Amaranth", "Amatic SC", "Amethysta", "Amiko", "Amiri", "Amita", "Anaheim", "Andada", "Andika", "Angkor", "Annie Use Your Telescope", "Anonymous Pro", "Antic", "Antic Didone", "Antic Slab", "Anton", "Arapey", "Arbutus", "Arbutus Slab", "Architects Daughter", "Archivo", "Archivo Black", "Archivo Narrow", "Aref Ruqaa", "Arima Madurai", "Arimo", "Arizonia", "Armata", "Arsenal", "Artifika", "Arvo", "Arya", "Asap", "Asap Condensed", "Asar", "Asset", "Assistant", "Astloch", "Asul", "Athiti", "Atma", "Atomic Age", "Aubrey", "Audiowide", "Autour One", "Average", "Average Sans", "Averia Gruesa Libre", "Averia Libre", "Averia Sans Libre", "Averia Serif Libre", "B612", "B612 Mono", "Bad Script", "Bahiana", "Bahianita", "Bai Jamjuree", "Baloo", "Baloo Bhai", "Baloo Bhaijaan", "Baloo Bhaina", "Baloo Chettan", "Baloo Da", "Baloo Paaji", "Baloo Tamma", "Baloo Tammudu", "Baloo Thambi", "Balthazar", "Bangers", "Barlow", "Barlow Condensed", "Barlow Semi Condensed", "Barriecito", "Barrio", "Basic", "Battambang", "Baumans", "Bayon", "Be Vietnam", "Belgrano", "Bellefair", "Belleza", "BenchNine", "Bentham", "Berkshire Swash", "Beth Ellen", "Bevan", "Big Shoulders Display", "Big Shoulders Text", "Bigelow Rules", "Bigshot One", "Bilbo", "Bilbo Swash Caps", "BioRhyme", "BioRhyme Expanded", "Biryani", "Bitter", "Black And White Picture", "Black Han Sans", "Black Ops One", "Blinker", "Bokor", "Bonbon", "Boogaloo", "Bowlby One", "Bowlby One SC", "Brawler", "Bree Serif", "Bubblegum Sans", "Bubbler One", "Buda", "Buenard", "Bungee", "Bungee Hairline", "Bungee Inline", "Bungee Outline", "Bungee Shade", "Butcherman", "Butterfly Kids", "Cabin", "Cabin Condensed", "Cabin Sketch", "Caesar Dressing", "Cagliostro", "Cairo", "Calligraffitti", "Cambay", "Cambo", "Candal", "Cantarell", "Cantata One", "Cantora One", "Capriola", "Cardo", "Carme", "Carrois Gothic", "Carrois Gothic SC", "Carter One", "Catamaran", "Caudex", "Caveat", "Caveat Brush", "Cedarville Cursive", "Ceviche One", "Chakra Petch", "Changa", "Changa One", "Chango", "Charm", "Charmonman", "Chathura", "Chau Philomene One", "Chela One", "Chelsea Market", "Chenla", "Cherry Cream Soda", "Cherry Swash", "Chewy", "Chicle", "Chilanka", "Chivo", "Chonburi", "Cinzel", "Cinzel Decorative", "Clicker Script", "Coda", "Coda Caption", "Codystar", "Coiny", "Combo", "Comfortaa", "Coming Soon", "Concert One", "Condiment", "Content", "Contrail One", "Convergence", "Cookie", "Copse", "Corben", "Cormorant", "Cormorant Garamond", "Cormorant Infant", "Cormorant SC", "Cormorant Unicase", "Cormorant Upright", "Courgette", "Cousine", "Coustard", "Covered By Your Grace", "Crafty Girls", "Creepster", "Crete Round", "Crimson Pro", "Crimson Text", "Croissant One", "Crushed", "Cuprum", "Cute Font", "Cutive", "Cutive Mono", "DM Sans", "DM Serif Display", "DM Serif Text", "Damion", "Dancing Script", "Dangrek", "Darker Grotesque", "David Libre", "Dawning of a New Day", "Days One", "Dekko", "Delius", "Delius Swash Caps", "Delius Unicase", "Della Respira", "Denk One", "Devonshire", "Dhurjati", "Didact Gothic", "Diplomata", "Diplomata SC", "Do Hyeon", "Dokdo", "Domine", "Donegal One", "Doppio One", "Dorsa", "Dosis", "Dr Sugiyama", "Duru Sans", "Dynalight", "EB Garamond", "Eagle Lake", "East Sea Dokdo", "Eater", "Economica", "Eczar", "El Messiri", "Electrolize", "Elsie", "Elsie Swash Caps", "Emblema One", "Emilys Candy", "Encode Sans", "Encode Sans Condensed", "Encode Sans Expanded", "Encode Sans Semi Condensed", "Encode Sans Semi Expanded", "Engagement", "Englebert", "Enriqueta", "Erica One", "Esteban", "Euphoria Script", "Ewert", "Exo", "Exo 2", "Expletus Sans", "Fahkwang", "Fanwood Text", "Farro", "Farsan", "Fascinate", "Fascinate Inline", "Faster One", "Fasthand", "Fauna One", "Faustina", "Federant", "Federo", "Felipa", "Fenix", "Finger Paint", "Fira Code", "Fira Mono", "Fira Sans", "Fira Sans Condensed", "Fira Sans Extra Condensed", "Fjalla One", "Fjord One", "Flamenco", "Flavors", "Fondamento", "Fontdiner Swanky", "Forum", "Francois One", "Frank Ruhl Libre", "Freckle Face", "Fredericka the Great", "Fredoka One", "Freehand", "Fresca", "Frijole", "Fruktur", "Fugaz One", "GFS Didot", "GFS Neohellenic", "Gabriela", "Gaegu", "Gafata", "Galada", "Galdeano", "Galindo", "Gamja Flower", "Gayathri", "Gentium Basic", "Gentium Book Basic", "Geo", "Geostar", "Geostar Fill", "Germania One", "Gidugu", "Gilda Display", "Give You Glory", "Glass Antiqua", "Glegoo", "Gloria Hallelujah", "Goblin One", "Gochi Hand", "Gorditas", "Gothic A1", "Goudy Bookletter 1911", "Graduate", "Grand Hotel", "Gravitas One", "Great Vibes", "Grenze", "Griffy", "Gruppo", "Gudea", "Gugi", "Gurajada", "Habibi", "Halant", "Hammersmith One", "Hanalei", "Hanalei Fill", "Handlee", "Hanuman", "Happy Monkey", "Harmattan", "Headland One", "Heebo", "Henny Penny", "Hepta Slab", "Herr Von Muellerhoff", "Hi Melody", "Hind", "Hind Guntur", "Hind Madurai", "Hind Siliguri", "Hind Vadodara", "Holtwood One SC", "Homemade Apple", "Homenaje", "IBM Plex Mono", "IBM Plex Sans", "IBM Plex Sans Condensed", "IBM Plex Serif", "IM Fell DW Pica", "IM Fell DW Pica SC", "IM Fell Double Pica", "IM Fell Double Pica SC", "IM Fell English", "IM Fell English SC", "IM Fell French Canon", "IM Fell French Canon SC", "IM Fell Great Primer", "IM Fell Great Primer SC", "Iceberg", "Iceland", "Imprima", "Inconsolata", "Inder", "Indie Flower", "Inika", "Inknut Antiqua", "Irish Grover", "Istok Web", "Italiana", "Italianno", "Itim", "Jacques Francois", "Jacques Francois Shadow", "Jaldi", "Jim Nightshade", "Jockey One", "Jolly Lodger", "Jomhuria", "Jomolhari", "Josefin Sans", "Josefin Slab", "Joti One", "Jua", "Judson", "Julee", "Julius Sans One", "Junge", "Jura", "Just Another Hand", "Just Me Again Down Here", "K2D", "Kadwa", "Kalam", "Kameron", "Kanit", "Kantumruy", "Karla", "Karma", "Katibeh", "Kaushan Script", "Kavivanar", "Kavoon", "Kdam Thmor", "Keania One", "Kelly Slab", "Kenia", "Khand", "Khmer", "Khula", "Kirang Haerang", "Kite One", "Knewave", "KoHo", "Kodchasan", "Kosugi", "Kosugi Maru", "Kotta One", "Koulen", "Kranky", "Kreon", "Kristi", "Krona One", "Krub", "Kumar One", "Kumar One Outline", "Kurale", "La Belle Aurore", "Lacquer", "Laila", "Lakki Reddy", "Lalezar", "Lancelot", "Lateef", "Lato", "League Script", "Leckerli One", "Ledger", "Lekton", "Lemon", "Lemonada", "Lexend Deca", "Lexend Exa", "Lexend Giga", "Lexend Mega", "Lexend Peta", "Lexend Tera", "Lexend Zetta", "Libre Barcode 128", "Libre Barcode 128 Text", "Libre Barcode 39", "Libre Barcode 39 Extended", "Libre Barcode 39 Extended Text", "Libre Barcode 39 Text", "Libre Baskerville", "Libre Caslon Display", "Libre Caslon Text", "Libre Franklin", "Life Savers", "Lilita One", "Lily Script One", "Limelight", "Linden Hill", "Literata", "Liu Jian Mao Cao", "Livvic", "Lobster", "Lobster Two", "Londrina Outline", "Londrina Shadow", "Londrina Sketch", "Londrina Solid", "Long Cang", "Lora", "Love Ya Like A Sister", "Loved by the King", "Lovers Quarrel", "Luckiest Guy", "Lusitana", "Lustria", "M PLUS 1p", "M PLUS Rounded 1c", "Ma Shan Zheng", "Macondo", "Macondo Swash Caps", "Mada", "Magra", "Maiden Orange", "Maitree", "Major Mono Display", "Mako", "Mali", "Mallanna", "Mandali", "Manjari", "Mansalva", "Manuale", "Marcellus", "Marcellus SC", "Marck Script", "Margarine", "Markazi Text", "Marko One", "Marmelad", "Martel", "Martel Sans", "Marvel", "Mate", "Mate SC", "Maven Pro", "McLaren", "Meddon", "MedievalSharp", "Medula One", "Meera Inimai", "Megrim", "Meie Script", "Merienda", "Merienda One", "Merriweather", "Merriweather Sans", "Metal", "Metal Mania", "Metamorphous", "Metrophobic", "Michroma", "Milonga", "Miltonian", "Miltonian Tattoo", "Mina", "Miniver", "Miriam Libre", "Mirza", "Miss Fajardose", "Mitr", "Modak", "Modern Antiqua", "Mogra", "Molengo", "Molle", "Monda", "Monofett", "Monoton", "Monsieur La Doulaise", "Montaga", "Montez", "Montserrat", "Montserrat Alternates", "Montserrat Subrayada", "Moul", "Moulpali", "Mountains of Christmas", "Mouse Memoirs", "Mr Bedfort", "Mr Dafoe", "Mr De Haviland", "Mrs Saint Delafield", "Mrs Sheppards", "Mukta", "Mukta Mahee", "Mukta Malar", "Mukta Vaani", "Muli", "Mystery Quest", "NTR", "Nanum Brush Script", "Nanum Gothic", "Nanum Gothic Coding", "Nanum Myeongjo", "Nanum Pen Script", "Neucha", "Neuton", "New Rocker", "News Cycle", "Niconne", "Niramit", "Nixie One", "Nobile", "Nokora", "Norican", "Nosifer", "Notable", "Nothing You Could Do", "Noticia Text", "Noto Sans", "Noto Sans HK", "Noto Sans JP", "Noto Sans KR", "Noto Sans SC", "Noto Sans TC", "Noto Serif", "Noto Serif JP", "Noto Serif KR", "Noto Serif SC", "Noto Serif TC", "Nova Cut", "Nova Flat", "Nova Mono", "Nova Oval", "Nova Round", "Nova Script", "Nova Slim", "Nova Square", "Numans", "Nunito", "Nunito Sans", "Odor Mean Chey", "Offside", "Old Standard TT", "Oldenburg", "Oleo Script", "Oleo Script Swash Caps", "Open Sans", "Open Sans Condensed", "Oranienbaum", "Orbitron", "Oregano", "Orienta", "Original Surfer", "Oswald", "Over the Rainbow", "Overlock", "Overlock SC", "Overpass", "Overpass Mono", "Ovo", "Oxygen", "Oxygen Mono", "PT Mono", "PT Sans", "PT Sans Caption", "PT Sans Narrow", "PT Serif", "PT Serif Caption", "Pacifico", "Padauk", "Palanquin", "Palanquin Dark", "Pangolin", "Paprika", "Parisienne", "Passero One", "Passion One", "Pathway Gothic One", "Patrick Hand", "Patrick Hand SC", "Pattaya", "Patua One", "Pavanam", "Paytone One", "Peddana", "Peralta", "Permanent Marker", "Petit Formal Script", "Petrona", "Philosopher", "Piedra", "Pinyon Script", "Pirata One", "Plaster", "Play", "Playball", "Playfair Display", "Playfair Display SC", "Podkova", "Poiret One", "Poller One", "Poly", "Pompiere", "Pontano Sans", "Poor Story", "Poppins", "Port Lligat Sans", "Port Lligat Slab", "Pragati Narrow", "Prata", "Preahvihear", "Press Start 2P", "Pridi", "Princess Sofia", "Prociono", "Prompt", "Prosto One", "Proza Libre", "Puritan", "Purple Purse", "Quando", "Quantico", "Quattrocento", "Quattrocento Sans", "Questrial", "Quicksand", "Quintessential", "Qwigley", "Racing Sans One", "Radley", "Rajdhani", "Rakkas", "Raleway", "Raleway Dots", "Ramabhadra", "Ramaraja", "Rambla", "Rammetto One", "Ranchers", "Rancho", "Ranga", "Rasa", "Rationale", "Ravi Prakash", "Red Hat Display", "Red Hat Text", "Redressed", "Reem Kufi", "Reenie Beanie", "Revalia", "Rhodium Libre", "Ribeye", "Ribeye Marrow", "Righteous", "Risque", "Roboto", "Roboto Condensed", "Roboto Mono", "Roboto Slab", "Rochester", "Rock Salt", "Rokkitt", "Romanesco", "Ropa Sans", "Rosario", "Rosarivo", "Rouge Script", "Rozha One", "Rubik", "Rubik Mono One", "Ruda", "Rufina", "Ruge Boogie", "Ruluko", "Rum Raisin", "Ruslan Display", "Russo One", "Ruthie", "Rye", "Sacramento", "Sahitya", "Sail", "Saira", "Saira Condensed", "Saira Extra Condensed", "Saira Semi Condensed", "Saira Stencil One", "Salsa", "Sanchez", "Sancreek", "Sansita", "Sarabun", "Sarala", "Sarina", "Sarpanch", "Satisfy", "Sawarabi Gothic", "Sawarabi Mincho", "Scada", "Scheherazade", "Schoolbell", "Scope One", "Seaweed Script", "Secular One", "Sedgwick Ave", "Sedgwick Ave Display", "Sevillana", "Seymour One", "Shadows Into Light", "Shadows Into Light Two", "Shanti", "Share", "Share Tech", "Share Tech Mono", "Shojumaru", "Short Stack", "Shrikhand", "Siemreap", "Sigmar One", "Signika", "Signika Negative", "Simonetta", "Single Day", "Sintony", "Sirin Stencil", "Six Caps", "Skranji", "Slabo 13px", "Slabo 27px", "Slackey", "Smokum", "Smythe", "Sniglet", "Snippet", "Snowburst One", "Sofadi One", "Sofia", "Song Myung", "Sonsie One", "Sorts Mill Goudy", "Source Code Pro", "Source Sans Pro", "Source Serif Pro", "Space Mono", "Special Elite", "Spectral", "Spectral SC", "Spicy Rice", "Spinnaker", "Spirax", "Squada One", "Sree Krushnadevaraya", "Sriracha", "Srisakdi", "Staatliches", "Stalemate", "Stalinist One", "Stardos Stencil", "Stint Ultra Condensed", "Stint Ultra Expanded", "Stoke", "Strait", "Stylish", "Sue Ellen Francisco", "Suez One", "Sumana", "Sunflower", "Sunshiney", "Supermercado One", "Sura", "Suranna", "Suravaram", "Suwannaphum", "Swanky and Moo Moo", "Syncopate", "Tajawal", "Tangerine", "Taprom", "Tauri", "Taviraj", "Teko", "Telex", "Tenali Ramakrishna", "Tenor Sans", "Text Me One", "Thasadith", "The Girl Next Door", "Tienne", "Tillana", "Timmana", "Tinos", "Titan One", "Titillium Web", "Trade Winds", "Trirong", "Trocchi", "Trochut", "Trykker", "Tulpen One", "Turret Road", "Ubuntu", "Ubuntu Condensed", "Ubuntu Mono", "Ultra", "Uncial Antiqua", "Underdog", "Unica One", "UnifrakturCook", "UnifrakturMaguntia", "Unkempt", "Unlock", "Unna", "VT323", "Vampiro One", "Varela", "Varela Round", "Vast Shadow", "Vesper Libre", "Vibes", "Vibur", "Vidaloka", "Viga", "Voces", "Volkhov", "Vollkorn", "Vollkorn SC", "Voltaire", "Waiting for the Sunrise", "Wallpoet", "Walter Turncoat", "Warnes", "Wellfleet", "Wendy One", "Wire One", "Work Sans", "Yanone Kaffeesatz", "Yantramanav", "Yatra One", "Yellowtail", "Yeon Sung", "Yeseva One", "Yesteryear", "Yrsa", "ZCOOL KuaiLe", "ZCOOL QingKe HuangYou", "ZCOOL XiaoWei", "Zeyada", "Zhi Mang Xing", "Zilla Slab", "Zilla Slab Highlight"]
196 | }, {
197 | "name": "icfs",
198 | "examples": ["normal", "italic"],
199 | "required": false,
200 | "enum": ["normal", "italic"]
201 | }, {
202 | "name": "iclocale",
203 | "examples": ["en"],
204 | "enum": ["fr", "de", "en"]
205 | }, {
206 | "name": "icretina",
207 | "examples": [1],
208 | "required": false,
209 | "enum": ["0", "1"]
210 | }, {
211 | "name": "icqrb",
212 | "pattern": "^[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?$",
213 | "examples": ["FFFFFF"],
214 | "required": false
215 | }, {
216 | "name": "icqrf",
217 | "pattern": "^[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?$",
218 | "examples": ["000000"],
219 | "required": false
220 | }];
221 |
222 | var strToRegExp = (0, _memoize2.default)(function (regexp) {
223 | return new RegExp(regexp, 'i');
224 | });
225 |
226 | function buildURL(getAttribute) {
227 |
228 | function buildQuery() {
229 | return imageChartsParameters.reduce(function (query, attr) {
230 | var val = getAttribute(attr.name);
231 |
232 | if (attr.required && val === undefined) {
233 | throw new Error(attr.name + ' is required. Examples values ' + attr.examples.join(', '));
234 | }
235 |
236 | if (val === undefined) {
237 | return query;
238 | }
239 |
240 | if (attr.pattern && !strToRegExp(attr.pattern).test(val)) {
241 | throw new Error('"' + val + '" is an invalid value for ' + attr.name + '. Examples: ' + attr.examples.join(', '));
242 | }
243 |
244 | if (attr.enum && !(0, _includes2.default)(attr.enum, val)) {
245 | throw new Error('"' + val + '" is not an valid value for ' + attr.name + '. Valid values are: ' + JSON.stringify(attr.enum));
246 | }
247 |
248 | query[attr.name] = val;
249 | return query;
250 | }, {});
251 | }
252 |
253 | return 'https://image-charts.com/chart?' + _querystring2.default.stringify(buildQuery());
254 | }
255 |
256 | var MjChart = (_temp = _class = function (_BodyComponent) {
257 | _inherits(MjChart, _BodyComponent);
258 |
259 | function MjChart() {
260 | _classCallCheck(this, MjChart);
261 |
262 | return _possibleConstructorReturn(this, (MjChart.__proto__ || Object.getPrototypeOf(MjChart)).apply(this, arguments));
263 | }
264 |
265 | _createClass(MjChart, [{
266 | key: 'render',
267 |
268 |
269 | /*
270 | Render is the only required function in a component.
271 | It must return an html string.
272 | */
273 |
274 |
275 | // What the name suggests. Fallback value for this.getAttribute('attribute-name').
276 |
277 | // Tell the parser that our component won't contain other mjml tags
278 | value: function render() {
279 | var getAttribute = this.getAttribute.bind(this);
280 |
281 | var _getAttribute$split$m = getAttribute('chs').split('x').map(_toNumber2.default),
282 | _getAttribute$split$m2 = _slicedToArray(_getAttribute$split$m, 2),
283 | width = _getAttribute$split$m2[0],
284 | height = _getAttribute$split$m2[1];
285 |
286 | var attributes = MjChart.imageAttributes.reduce(function (attrs, _ref) {
287 | var name = _ref.name;
288 |
289 | attrs[name] = getAttribute(name);
290 | return attrs;
291 | }, {
292 | src: buildURL(getAttribute),
293 | width: width + 'px'
294 | });
295 |
296 | return this.renderMJML('');
297 | }
298 |
299 | // Tells the validator which attributes are allowed for mj-chart
300 |
301 |
302 | // Tells the validator which attributes are allowed for mj-chart
303 |
304 | }]);
305 |
306 | return MjChart;
307 | }(_mjmlCore.BodyComponent), _class.endingTag = true, _class.allowedAttributes = {
308 | "cht": "string",
309 | "chd": "string",
310 | "chds": "string",
311 | "choe": "string",
312 | "chld": "string",
313 | "chxr": "string",
314 | "chof": "string",
315 | "chs": "string",
316 | "chdl": "string",
317 | "chdls": "string",
318 | "chg": "string",
319 | "chco": "string",
320 | "chtt": "string",
321 | "chts": "string",
322 | "chxt": "string",
323 | "chxl": "string",
324 | "chxs": "string",
325 | "chm": "string",
326 | "chls": "string",
327 | "chl": "string",
328 | "chlps": "string",
329 | "chma": "string",
330 | "chdlp": "string",
331 | "chf": "string",
332 | "chbr": "string",
333 | "chan": "string",
334 | "chli": "string",
335 | "icac": "string",
336 | "ichm": "string",
337 | "icff": "string",
338 | "icfs": "string",
339 | "iclocale": "string",
340 | "icretina": "string",
341 | "icqrb": "string",
342 | "icqrf": "string",
343 | "alt": "string",
344 | "name": "string",
345 | "srcset": "string",
346 | "sizes": "string",
347 | "title": "string",
348 | "rel": "string",
349 | "align": "string",
350 | "border": "string",
351 | "border-bottom": "string",
352 | "border-left": "string",
353 | "border-right": "string",
354 | "border-top": "string",
355 | "border-radius": "string",
356 | "container-background-color": "string",
357 | "fluid-on-mobile": "string",
358 | "padding": "string",
359 | "padding-bottom": "string",
360 | "padding-left": "string",
361 | "padding-right": "string",
362 | "padding-top": "string",
363 | "max-height": "string",
364 | "font-size": "string",
365 | "usemap": "string"
366 | }, _class.defaultAttributes = {
367 | "align": "center",
368 | "border": "0",
369 | "padding": "10px 25px",
370 | "font-size": "13px"
371 | }, _class.imageAttributes = [{
372 | "name": "alt",
373 | "link": "#mjml-image"
374 | }, {
375 | "name": "name",
376 | "link": "#mjml-image"
377 | }, {
378 | "name": "srcset",
379 | "link": "#mjml-image"
380 | }, {
381 | "name": "sizes",
382 | "link": "#mjml-image"
383 | }, {
384 | "name": "title",
385 | "link": "#mjml-image"
386 | }, {
387 | "name": "rel",
388 | "link": "#mjml-image"
389 | }, {
390 | "name": "align",
391 | "link": "#mjml-image",
392 | "defaultValue": "center"
393 | }, {
394 | "name": "border",
395 | "link": "#mjml-image",
396 | "defaultValue": "0"
397 | }, {
398 | "name": "border-bottom",
399 | "link": "#mjml-image"
400 | }, {
401 | "name": "border-left",
402 | "link": "#mjml-image"
403 | }, {
404 | "name": "border-right",
405 | "link": "#mjml-image"
406 | }, {
407 | "name": "border-top",
408 | "link": "#mjml-image"
409 | }, {
410 | "name": "border-radius",
411 | "link": "#mjml-image"
412 | }, {
413 | "name": "container-background-color",
414 | "link": "#mjml-image"
415 | }, {
416 | "name": "fluid-on-mobile",
417 | "link": "#mjml-image"
418 | }, {
419 | "name": "padding",
420 | "link": "#mjml-image",
421 | "defaultValue": "10px 25px"
422 | }, {
423 | "name": "padding-bottom",
424 | "link": "#mjml-image"
425 | }, {
426 | "name": "padding-left",
427 | "link": "#mjml-image"
428 | }, {
429 | "name": "padding-right",
430 | "link": "#mjml-image"
431 | }, {
432 | "name": "padding-top",
433 | "link": "#mjml-image"
434 | }, {
435 | "name": "max-height",
436 | "link": "#mjml-image"
437 | }, {
438 | "name": "font-size",
439 | "link": "#mjml-image",
440 | "defaultValue": "13px"
441 | }, {
442 | "name": "usemap",
443 | "link": "#mjml-image"
444 | }], _temp);
445 | exports.default = MjChart;
446 |
447 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mjml-chart",
3 | "description": "mjml-chart",
4 | "version": "6.1.296",
5 | "main": "lib/index.js",
6 | "scripts": {
7 | "ci": "./ci.sh",
8 | "release": "(git commit -a -m 'prepare for release' || true) && (npm-release $npm_config_release_version || true) && (npm run --silent git-push || true)",
9 | "test": "mocha --require babel-core/register",
10 | "test-watch": "mocha -w --require babel-core/register",
11 | "test-coverage": "nyc --all --statements=100 --branches=100 --functions=100 --lines=100 --check-coverage --reporter=lcov --reporter=cobertura --reporter=text --reporter=text-summary --report-dir=coverage -- npm run --silent test",
12 | "coverage-send": "cat ./coverage/lcov.info | coveralls",
13 | "@comment generate-swagger": "TODO hapi-swagger no longer manage .when and place required:true instead of false. Quickfix => update manually swagger.json to change required=true to false for chl parameter",
14 | "generate-swagger": "curl -s https://image-charts.com/swagger.json | jq --compact-output '.paths.\"/chart\".get.parameters=(.paths.\"/chart\".get.parameters | map(if .name == \"chl\" then . + {\"required\":false} else . end))' > scripts/swagger.json",
15 | "generate-swagger-dev": "curl -s http://localhost:8080/swagger.json > scripts/swagger.json",
16 | "example-html": "babel-node examples/simple-chart.js > examples/simple-chart.html && open examples/simple-chart.html",
17 | "generate": "node scripts/generateREADME.js > README.md && node scripts/generateComponent.js > src/index.js && babel src/index.js > lib/index.js",
18 | "generate-watch": "chokidar 'scripts/**' 'package.json' -c 'npm run generate'",
19 | "@comment updr": "-r basic : Uses console.log for output, no need for a TTY (e.g when running on CI) => https://www.npmjs.com/package/updtr#--reporter--r",
20 | "updtr": "updtr -r basic --exclude markdown-table",
21 | "changelog": "git checkout master && conventional-changelog -i CHANGELOG.md -s -r 0",
22 | "changelog-commit": "npm run --silent changelog && (git add CHANGELOG.md && git commit -m 'docs(changelog): updated' || true)",
23 | "git-push": "git push origin master:master"
24 | },
25 | "repository": {
26 | "type": "git",
27 | "url": "git+https://github.com/image-charts/mjml-chart.git"
28 | },
29 | "nyc": {
30 | "exclude": [
31 | "node_modules",
32 | "examples",
33 | "lib",
34 | "scripts",
35 | "coverage",
36 | "**/**.test.js"
37 | ]
38 | },
39 | "license": "MIT",
40 | "bugs": {
41 | "url": "https://github.com/image-charts/mjml-chart/issues"
42 | },
43 | "imageCharts": {
44 | "documentation": "https://image-charts.com/documentation",
45 | "api": "https://image-charts.com/chart"
46 | },
47 | "homepage": "https://github.com/image-charts/mjml-chart",
48 | "dependencies": {
49 | "lodash": "^4.17.21",
50 | "mjml-core": "^4.13.0",
51 | "mjml-image": "^4.13.0"
52 | },
53 | "devDependencies": {
54 | "@babel/runtime": "^7.27.6",
55 | "babel-cli": "^6.26.0",
56 | "babel-core": "^6.26.3",
57 | "babel-plugin-transform-decorators-legacy": "^1.3.5",
58 | "babel-preset-es2015": "^6.24.1",
59 | "babel-preset-react": "^6.24.1",
60 | "babel-preset-stage-0": "^6.24.1",
61 | "babel-register": "^6.26.0",
62 | "chai": "^4.3.10",
63 | "chokidar-cli": "^3.0.0",
64 | "conventional-changelog": "^3.1.25",
65 | "conventional-changelog-cli": "^2.2.2",
66 | "coveralls": "^3.1.1",
67 | "jq.node": "^2.4.0",
68 | "markdown-table": "^2.0.0",
69 | "mjml": "^4.13.0",
70 | "mjml-cli": "^4.15.3",
71 | "mocha": "^10.2.0",
72 | "npm-release": "^1.0.0",
73 | "nyc": "^15.1.0",
74 | "truncate": "^3.0.0",
75 | "updtr": "^4.0.0"
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/scripts/generateComponent.js:
--------------------------------------------------------------------------------
1 | const {
2 | chartAttributes,
3 | imageAttributes,
4 | API_ENDPOINT
5 | } = require('./model');
6 | const fs = require('fs');
7 | const path = require('path');
8 | const pick = require('lodash/pick');
9 |
10 | const COMPONENT_IN = fs.readFileSync(path.resolve(__dirname, 'templates/component.js.tmpl'), 'utf8');
11 |
12 | const allowedAttributes = chartAttributes.concat(imageAttributes).reduce((attribute, {name}) => {
13 | attribute[name] = 'string';
14 | return attribute;
15 | }, {});
16 |
17 | const defaultAttributes = chartAttributes.concat(imageAttributes).reduce((defaultAttributes, {name, defaultValue}) => {
18 | if(defaultValue){
19 | defaultAttributes[name] = defaultValue;
20 | }
21 | return defaultAttributes;
22 | }, {});
23 |
24 | const COMPONENT_OUT = COMPONENT_IN
25 | .replace('/*imageAttributes*/', JSON.stringify(imageAttributes, null, 2).replace(/null/g, 'undefined'))
26 | .replace('/*allowedAttributes*/', JSON.stringify(allowedAttributes, null, 2).replace(/null/g, 'undefined'))
27 | .replace('/*defaultAttributes*/', JSON.stringify(defaultAttributes, null, 2).replace(/null/g, 'undefined'))
28 | .replace('/*imageChartsParameters*/', JSON.stringify(chartAttributes.map((attribute) => pick(attribute, ['name', 'pattern', 'examples', 'required', 'enum'])), null, 2))
29 | .replace('/*documentation_url*/', API_ENDPOINT);
30 |
31 | console.log(COMPONENT_OUT); // eslint-disable-line no-console
32 |
--------------------------------------------------------------------------------
/scripts/generateREADME.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const fs = require('fs');
3 | const path = require('path');
4 | const table = require('markdown-table');
5 | const truncate = require('truncate');
6 | const {
7 | chartAttributes,
8 | imageAttributes
9 | } = require('./model');
10 |
11 | const README_IN = path.resolve(__dirname, 'templates/README.md.tmpl');
12 |
13 | const mdChartAttributesTable = table([
14 | ['attribute', 'description', 'value examples']
15 | ].concat(chartAttributes.map(({name, link, description, examples}) => [`[${name}](${link})`, description, examples.map(example => `\`${truncate(example.toString(), 40).replace(/\|/g, '\\|').replace(/\n/g,'\\n')}\``).join(', ')])));
16 |
17 | const mdImageAttributesTable = table([
18 | ['attribute', 'default values']
19 | ].concat(imageAttributes.map(({name, defaultValue}) => [`[${name}](#mjml-image)`, defaultValue || 'n/a'])))
20 |
21 | const readme = fs.readFileSync(README_IN, 'utf8')
22 | .replace('{mdChartAttributesTable}', mdChartAttributesTable)
23 | .replace('{mdImageAttributesTable}', mdImageAttributesTable)
24 |
25 | console.log(readme); // eslint-disable-line no-console
26 |
--------------------------------------------------------------------------------
/scripts/model.js:
--------------------------------------------------------------------------------
1 | const _ = require('lodash');
2 | const swagger = require('./swagger.json');
3 |
4 | const EXCLUDE_IMAGE_ATTRIBUTES = [
5 | // automatically generated attributes:
6 | 'src', 'width', 'height',
7 | // currently not supported mjml-image attributes:
8 | 'href', 'target'];
9 |
10 | /*
11 | { [Function: MjImage]
12 | tagOmission: true,
13 | allowedAttributes:
14 | { alt: 'string',
15 | href: 'string',
16 | src: 'string',
17 | srcset: 'string',
18 | title: 'string',
19 | align: 'enum(left,center,right)',
20 | border: 'string',
21 | 'border-bottom': 'string',
22 | 'border-left': 'string',
23 | 'border-right': 'string',
24 | 'border-top': 'string',
25 | 'border-radius': 'unit(px,%)',
26 | 'container-background-color': 'string',
27 | padding: 'unit(px,%){1,4}',
28 | 'padding-bottom': 'unit(px,%)',
29 | 'padding-left': 'unit(px,%)',
30 | 'padding-right': 'unit(px,%)',
31 | 'padding-top': 'unit(px,%)',
32 | height: 'unit(px)',
33 | width: 'unit(px)' },
34 | defaultAttributes:
35 | { align: 'center',
36 | border: '0',
37 | height: 'auto',
38 | padding: '10px 25px',
39 | target: '_blank' } }
40 | */
41 | const {
42 | allowedAttributes: allowedAttributes,
43 | defaultAttributes:defaultAttributes
44 | } = require('mjml-image');
45 | const {
46 | imageCharts: {
47 | documentation: DOCUMENTATION_ENDPOINT,
48 | api: API_ENDPOINT
49 | }
50 | } = require('../package.json');
51 |
52 | function meta (parameter) {
53 | return parameter['x-meta'];
54 | }
55 |
56 | const chartAttributes = swagger.paths['/chart'].get.parameters
57 | .filter(parameter => parameter.in === 'query' && (meta(parameter).implementation.status === 'COMPLETE' || meta(parameter).implementation.status === 'PARTIAL'))
58 | .map(parameter => ({
59 | name: parameter.name,
60 | link: `${meta(parameter).link}`,
61 | description: parameter.description,
62 | examples: meta(parameter).examples,
63 | pattern: parameter.pattern,
64 | enum: parameter.enum,
65 | required: parameter.required
66 | }));
67 |
68 | const imageAttributes = _.chain(allowedAttributes)
69 | .toPairs()
70 | .filter(([attribute]) => !EXCLUDE_IMAGE_ATTRIBUTES.includes(attribute))
71 | .map(([attribute, defaultValue]) => ({
72 | name: attribute,
73 | link: '#mjml-image',
74 | defaultValue: defaultAttributes[attribute]
75 | }))
76 | .value();
77 |
78 | module.exports = {
79 | chartAttributes,
80 | imageAttributes,
81 | API_ENDPOINT,
82 | EXCLUDE_IMAGE_ATTRIBUTES
83 | };
84 |
--------------------------------------------------------------------------------
/scripts/swagger.json:
--------------------------------------------------------------------------------
1 | {"basePath":"/","info":{"title":"Image-Charts","version":"6.1.19","description":"Charts, simple as a URL. A safe and fast replacement for Google Image Charts"},"host":"image-charts.com","schemes":["https"],"consumes":["application/x-www-form-urlencoded"],"produces":["application/png","application/gif","image/svg+xml"],"swagger":"2.0","tags":[],"paths":{"/chart":{"get":{"summary":"Image-Charts API","operationId":"getChart","description":"Image-charts","parameters":[{"type":"string","description":"Chart type","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-type/","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["bvg","p"],"enum":["bvs","bvg","bhs","bhg","bvo","p","p3","pc","pd","ls","lc","lxy","ls:nda","lc:nda","lxy:nda","pa","bb","gv","gv:dot","gv:neato","gv:circo","gv:fdp","gv:osage","gv:twopi","qr","r"],"note":"bvg= grouped bar chart, bvs= stacked bar chart, lc=line chart, ls=sparklines, p=pie chart. gv=graph viz\n Three-dimensional pie chart (p3) will be rendered in 2D, concentric pie chart are not supported.\n [Optional, line charts only] You can add :nda after the chart type in line charts to hide the default axes."},"enum":["bvs","bvg","bhs","bhg","bvo","p","p3","pc","pd","ls","lc","lxy","ls:nda","lc:nda","lxy:nda","pa","bb","gv","gv:dot","gv:neato","gv:circo","gv:fdp","gv:osage","gv:twopi","qr","r"],"name":"cht","in":"query","required":true},{"type":"string","description":"chart data","x-meta":{"link":"https://documentation.image-charts.com/reference/data-format/","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["a:-100,200.5,75.55,110","t:10,20,30|15,25,35","s:BTb19_,Mn5tzb","e:BaPoqM2s,-A__RMD6"],"note":""},"pattern":"^(([at]\\d*:(?:[\\-0-9_\\.]*[,|])*[\\-0-9_\\.]*)|(s\\d*:[a-z0-9_,]+)|(e\\d*:[a-z0-9_,-\\.]+))$","name":"chd","in":"query"},{"type":"string","description":"data format with custom scaling","x-meta":{"link":"https://documentation.image-charts.com/reference/data-format/#text-format-with-custom-scaling","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["-80,140"],"note":"You can configure some charts to scale automatically to fit their data with chds=a. The chart will be scaled so that the largest value is at the top of the chart and the smallest (or zero, if all values are greater than zero) will be at the bottom. Otherwise the \"≶series_1_min>,≶series_1_max>,...,≶series_n_min>,≶series_n_max>\" format set one or more minimum and maximum permitted values for each data series, separated by commas. You must supply both a max and a min. If you supply fewer pairs than there are data series, the last pair is applied to all remaining data series. Note that this does not change the axis range; to change the axis range, you must set the chxr parameter. Valid values range from (+/-)9.999e(+/-)199. You can specify values in either standard or E notation."},"pattern":"a|([0-9-],?)+","name":"chds","in":"query","required":false},{"type":"string","description":"QRCode data encoding","x-meta":{"link":"https://documentation.image-charts.com/qr-codes/#data-encoding","category":"COMMON","implementation":{"status":"PARTIAL"},"examples":["UTF-8"],"note":"How to encode the data in the QR code. 'UTF-8' is the default and only supported value. Contact our team if you wish to have support for Shift_JIS and/or ISO-8859-1."},"enum":["UTF-8"],"x-alternatives":[{"type":"string","description":"QRCode data encoding","x-meta":{"link":"https://documentation.image-charts.com/qr-codes/#data-encoding","category":"COMMON","implementation":{"status":"PARTIAL"},"examples":["UTF-8"],"note":"How to encode the data in the QR code. 'UTF-8' is the default and only supported value. Contact our team if you wish to have support for Shift_JIS and/or ISO-8859-1."},"enum":["UTF-8"]}],"name":"choe","in":"query"},{"type":"string","description":"QRCode error correction level and optional margin","x-meta":{"link":"https://documentation.image-charts.com/qr-codes/#error-correction-level-and-margin","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["L|4","M|10","Q|5","H|18"],"note":""},"default":"L|4","pattern":"^[LMQH]{1}(?:\\|[0-9]+)?$","x-alternatives":[{"type":"string","description":"QRCode error correction level and optional margin","example":"L|4","x-meta":{"link":"https://documentation.image-charts.com/qr-codes/#error-correction-level-and-margin","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["L|4","M|10","Q|5","H|18"],"note":""},"default":"L|4","pattern":"^[LMQH]{1}(?:\\|[0-9]+)?$"}],"name":"chld","in":"query"},{"type":"string","description":"Axis data-range","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-axis/#axis-range","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["0,0,200","0,10,50,5","0,0,500|1,0,200"],"note":"You can specify the range of values that appear on each axis independently, using the chxr parameter. Note that this does not change the scale of the chart elements (use chds for that), only the scale of the axis labels."},"pattern":"^(?:(?:[0-9-.]+)(?:,(?:[0-9-.]+)){2,3}\\|?)+$","name":"chxr","in":"query","required":false},{"type":"string","description":"axis label positions","x-meta":{"link":"","category":"COMMON","implementation":{"status":"UPCOMING"},"note":""},"name":"chxp","in":"query","required":false},{"type":"string","description":"Image output format","x-meta":{"link":"https://documentation.image-charts.com/reference/output-format/","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":[".png",".svg",".gif"],"note":"Some clients like Flowdock/Facebook messenger and so on, needs an URL to ends with a valid image extension file to display the image, use this parameter at the end your URL to support them. Valid values are \".png\", \".svg\" and \".gif\".\n Only QRCodes and GraphViz support svg output."},"default":".png","name":"chof","in":"query","required":false},{"type":"string","description":"Chart size (x)","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-size/","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["400x400"],"note":"Maximum chart size for all charts except maps is 998,001 pixels total (Google Image Charts was limited to 300,000), and maximum width or length is 999 pixels."},"pattern":"^[1-9][0-9]{0,2}x[1-9][0-9]{0,2}$","name":"chs","in":"query"},{"type":"string","description":"Text for each series, to display in the legend","x-meta":{"link":"https://documentation.image-charts.com/reference/legend-text-and-style/","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["NASDAQ|FTSE100|DOW"],"note":"Format: <data_series_1_label>|...|<data_series_n_label>. The text for the legend entries. Each label applies to the corresponding series in the chd array. Use a + mark for a space. If you do not specify this parameter, the chart will not get a legend. There is no way to specify a line break in a label. The legend will typically expand to hold your legend text, and the chart area will shrink to accommodate the legend."},"default":"","pattern":"^(?:[^\\|]*\\|?)+$","name":"chdl","in":"query","required":false},{"type":"string","description":"Chart legend text and style","x-meta":{"link":"https://documentation.image-charts.com/reference/legend-text-and-style/","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["9e9e9e,17"],"note":"Specifies the color and font size of the legend text. ,"},"default":"000000","pattern":"^[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?(?:,[0-9]+)?$","name":"chdls","in":"query","required":false},{"type":"string","description":"Solid or dotted grid lines","x-meta":{"link":"https://documentation.image-charts.com/reference/grid-lines/","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["1,1","0,1,1,5","1,1,FF00FF","1,1,1,1,CECECE"],"note":""},"pattern":"^(?:[0-9.]+)(?:,(?:[0-9.]+)+){0,5}?(?:,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?)?$","name":"chg","in":"query","required":false},{"type":"string","description":"series colors","x-meta":{"link":"https://documentation.image-charts.com/bar-charts/#examples","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["FFC48C","FF0000,00FF00,0000FF"],"note":"You can specify the colors of a specific series using the chco parameter.\n Format should be <series_2>,...,<series_m>, with each color in RRGGBB format hexadecimal number.\n The exact syntax and meaning can vary by chart type; see your specific chart type for details.\n Each entry in this string is an RRGGBB[AA] format hexadecimal number.\n If there are more series or elements in the chart than colors specified in your string, the API typically cycles through element colors from the start of that series (for elements) or for series colors from the start of the series list.\n Again, see individual chart documentation for details."},"default":"F56991,FF9F80,FFC48C,D1F2A5,EFFAB4","pattern":"^([0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,?\\|?)+$","name":"chco","in":"query","required":false},{"type":"string","description":"chart title","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-title/","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["My beautiful chart"]},"default":"","pattern":"^[a-z0-9sW -⟯一-龿-ゟ゠-ヿ⺀-⿕㆐-㆟㐀-䶿一-鿌豈-節]+$","name":"chtt","in":"query","required":false},{"type":"string","description":"chart title colors and font size","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-title/","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["00FF00,17"],"note":"Format should be \",[,,,]\", opt_alignement is not supported"},"default":"","pattern":"^([0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?),[0-9]+,?[lcr]?(,(ABeeZee|Abel|Abhaya Libre|Abril Fatface|Aclonica|Acme|Actor|Adamina|Advent Pro|Aguafina Script|Akronim|Aladin|Aldrich|Alef|Alegreya|Alegreya SC|Alegreya Sans|Alegreya Sans SC|Aleo|Alex Brush|Alfa Slab One|Alice|Alike|Alike Angular|Allan|Allerta|Allerta Stencil|Allura|Almarai|Almendra|Almendra Display|Almendra SC|Amarante|Amaranth|Amatic SC|Amethysta|Amiko|Amiri|Amita|Anaheim|Andada|Andika|Angkor|Annie Use Your Telescope|Anonymous Pro|Antic|Antic Didone|Antic Slab|Anton|Arapey|Arbutus|Arbutus Slab|Architects Daughter|Archivo|Archivo Black|Archivo Narrow|Aref Ruqaa|Arima Madurai|Arimo|Arizonia|Armata|Arsenal|Artifika|Arvo|Arya|Asap|Asap Condensed|Asar|Asset|Assistant|Astloch|Asul|Athiti|Atma|Atomic Age|Aubrey|Audiowide|Autour One|Average|Average Sans|Averia Gruesa Libre|Averia Libre|Averia Sans Libre|Averia Serif Libre|B612|B612 Mono|Bad Script|Bahiana|Bahianita|Bai Jamjuree|Baloo|Baloo Bhai|Baloo Bhaijaan|Baloo Bhaina|Baloo Chettan|Baloo Da|Baloo Paaji|Baloo Tamma|Baloo Tammudu|Baloo Thambi|Balthazar|Bangers|Barlow|Barlow Condensed|Barlow Semi Condensed|Barriecito|Barrio|Basic|Battambang|Baumans|Bayon|Be Vietnam|Belgrano|Bellefair|Belleza|BenchNine|Bentham|Berkshire Swash|Beth Ellen|Bevan|Big Shoulders Display|Big Shoulders Text|Bigelow Rules|Bigshot One|Bilbo|Bilbo Swash Caps|BioRhyme|BioRhyme Expanded|Biryani|Bitter|Black And White Picture|Black Han Sans|Black Ops One|Blinker|Bokor|Bonbon|Boogaloo|Bowlby One|Bowlby One SC|Brawler|Bree Serif|Bubblegum Sans|Bubbler One|Buda|Buenard|Bungee|Bungee Hairline|Bungee Inline|Bungee Outline|Bungee Shade|Butcherman|Butterfly Kids|Cabin|Cabin Condensed|Cabin Sketch|Caesar Dressing|Cagliostro|Cairo|Calligraffitti|Cambay|Cambo|Candal|Cantarell|Cantata One|Cantora One|Capriola|Cardo|Carme|Carrois Gothic|Carrois Gothic SC|Carter One|Catamaran|Caudex|Caveat|Caveat Brush|Cedarville Cursive|Ceviche One|Chakra Petch|Changa|Changa One|Chango|Charm|Charmonman|Chathura|Chau Philomene One|Chela One|Chelsea Market|Chenla|Cherry Cream Soda|Cherry Swash|Chewy|Chicle|Chilanka|Chivo|Chonburi|Cinzel|Cinzel Decorative|Clicker Script|Coda|Coda Caption|Codystar|Coiny|Combo|Comfortaa|Coming Soon|Concert One|Condiment|Content|Contrail One|Convergence|Cookie|Copse|Corben|Cormorant|Cormorant Garamond|Cormorant Infant|Cormorant SC|Cormorant Unicase|Cormorant Upright|Courgette|Cousine|Coustard|Covered By Your Grace|Crafty Girls|Creepster|Crete Round|Crimson Pro|Crimson Text|Croissant One|Crushed|Cuprum|Cute Font|Cutive|Cutive Mono|DM Sans|DM Serif Display|DM Serif Text|Damion|Dancing Script|Dangrek|Darker Grotesque|David Libre|Dawning of a New Day|Days One|Dekko|Delius|Delius Swash Caps|Delius Unicase|Della Respira|Denk One|Devonshire|Dhurjati|Didact Gothic|Diplomata|Diplomata SC|Do Hyeon|Dokdo|Domine|Donegal One|Doppio One|Dorsa|Dosis|Dr Sugiyama|Duru Sans|Dynalight|EB Garamond|Eagle Lake|East Sea Dokdo|Eater|Economica|Eczar|El Messiri|Electrolize|Elsie|Elsie Swash Caps|Emblema One|Emilys Candy|Encode Sans|Encode Sans Condensed|Encode Sans Expanded|Encode Sans Semi Condensed|Encode Sans Semi Expanded|Engagement|Englebert|Enriqueta|Erica One|Esteban|Euphoria Script|Ewert|Exo|Exo 2|Expletus Sans|Fahkwang|Fanwood Text|Farro|Farsan|Fascinate|Fascinate Inline|Faster One|Fasthand|Fauna One|Faustina|Federant|Federo|Felipa|Fenix|Finger Paint|Fira Code|Fira Mono|Fira Sans|Fira Sans Condensed|Fira Sans Extra Condensed|Fjalla One|Fjord One|Flamenco|Flavors|Fondamento|Fontdiner Swanky|Forum|Francois One|Frank Ruhl Libre|Freckle Face|Fredericka the Great|Fredoka One|Freehand|Fresca|Frijole|Fruktur|Fugaz One|GFS Didot|GFS Neohellenic|Gabriela|Gaegu|Gafata|Galada|Galdeano|Galindo|Gamja Flower|Gayathri|Gentium Basic|Gentium Book Basic|Geo|Geostar|Geostar Fill|Germania One|Gidugu|Gilda Display|Give You Glory|Glass Antiqua|Glegoo|Gloria Hallelujah|Goblin One|Gochi Hand|Gorditas|Gothic A1|Goudy Bookletter 1911|Graduate|Grand Hotel|Gravitas One|Great Vibes|Grenze|Griffy|Gruppo|Gudea|Gugi|Gurajada|Habibi|Halant|Hammersmith One|Hanalei|Hanalei Fill|Handlee|Hanuman|Happy Monkey|Harmattan|Headland One|Heebo|Henny Penny|Hepta Slab|Herr Von Muellerhoff|Hi Melody|Hind|Hind Guntur|Hind Madurai|Hind Siliguri|Hind Vadodara|Holtwood One SC|Homemade Apple|Homenaje|IBM Plex Mono|IBM Plex Sans|IBM Plex Sans Condensed|IBM Plex Serif|IM Fell DW Pica|IM Fell DW Pica SC|IM Fell Double Pica|IM Fell Double Pica SC|IM Fell English|IM Fell English SC|IM Fell French Canon|IM Fell French Canon SC|IM Fell Great Primer|IM Fell Great Primer SC|Iceberg|Iceland|Imprima|Inconsolata|Inder|Indie Flower|Inika|Inknut Antiqua|Irish Grover|Istok Web|Italiana|Italianno|Itim|Jacques Francois|Jacques Francois Shadow|Jaldi|Jim Nightshade|Jockey One|Jolly Lodger|Jomhuria|Jomolhari|Josefin Sans|Josefin Slab|Joti One|Jua|Judson|Julee|Julius Sans One|Junge|Jura|Just Another Hand|Just Me Again Down Here|K2D|Kadwa|Kalam|Kameron|Kanit|Kantumruy|Karla|Karma|Katibeh|Kaushan Script|Kavivanar|Kavoon|Kdam Thmor|Keania One|Kelly Slab|Kenia|Khand|Khmer|Khula|Kirang Haerang|Kite One|Knewave|KoHo|Kodchasan|Kosugi|Kosugi Maru|Kotta One|Koulen|Kranky|Kreon|Kristi|Krona One|Krub|Kumar One|Kumar One Outline|Kurale|La Belle Aurore|Lacquer|Laila|Lakki Reddy|Lalezar|Lancelot|Lateef|Lato|League Script|Leckerli One|Ledger|Lekton|Lemon|Lemonada|Lexend Deca|Lexend Exa|Lexend Giga|Lexend Mega|Lexend Peta|Lexend Tera|Lexend Zetta|Libre Barcode 128|Libre Barcode 128 Text|Libre Barcode 39|Libre Barcode 39 Extended|Libre Barcode 39 Extended Text|Libre Barcode 39 Text|Libre Baskerville|Libre Caslon Display|Libre Caslon Text|Libre Franklin|Life Savers|Lilita One|Lily Script One|Limelight|Linden Hill|Literata|Liu Jian Mao Cao|Livvic|Lobster|Lobster Two|Londrina Outline|Londrina Shadow|Londrina Sketch|Londrina Solid|Long Cang|Lora|Love Ya Like A Sister|Loved by the King|Lovers Quarrel|Luckiest Guy|Lusitana|Lustria|M PLUS 1p|M PLUS Rounded 1c|Ma Shan Zheng|Macondo|Macondo Swash Caps|Mada|Magra|Maiden Orange|Maitree|Major Mono Display|Mako|Mali|Mallanna|Mandali|Manjari|Mansalva|Manuale|Marcellus|Marcellus SC|Marck Script|Margarine|Markazi Text|Marko One|Marmelad|Martel|Martel Sans|Marvel|Mate|Mate SC|Maven Pro|McLaren|Meddon|MedievalSharp|Medula One|Meera Inimai|Megrim|Meie Script|Merienda|Merienda One|Merriweather|Merriweather Sans|Metal|Metal Mania|Metamorphous|Metrophobic|Michroma|Milonga|Miltonian|Miltonian Tattoo|Mina|Miniver|Miriam Libre|Mirza|Miss Fajardose|Mitr|Modak|Modern Antiqua|Mogra|Molengo|Molle|Monda|Monofett|Monoton|Monsieur La Doulaise|Montaga|Montez|Montserrat|Montserrat Alternates|Montserrat Subrayada|Moul|Moulpali|Mountains of Christmas|Mouse Memoirs|Mr Bedfort|Mr Dafoe|Mr De Haviland|Mrs Saint Delafield|Mrs Sheppards|Mukta|Mukta Mahee|Mukta Malar|Mukta Vaani|Muli|Mystery Quest|NTR|Nanum Brush Script|Nanum Gothic|Nanum Gothic Coding|Nanum Myeongjo|Nanum Pen Script|Neucha|Neuton|New Rocker|News Cycle|Niconne|Niramit|Nixie One|Nobile|Nokora|Norican|Nosifer|Notable|Nothing You Could Do|Noticia Text|Noto Sans|Noto Sans HK|Noto Sans JP|Noto Sans KR|Noto Sans SC|Noto Sans TC|Noto Serif|Noto Serif JP|Noto Serif KR|Noto Serif SC|Noto Serif TC|Nova Cut|Nova Flat|Nova Mono|Nova Oval|Nova Round|Nova Script|Nova Slim|Nova Square|Numans|Nunito|Nunito Sans|Odor Mean Chey|Offside|Old Standard TT|Oldenburg|Oleo Script|Oleo Script Swash Caps|Open Sans|Open Sans Condensed|Oranienbaum|Orbitron|Oregano|Orienta|Original Surfer|Oswald|Over the Rainbow|Overlock|Overlock SC|Overpass|Overpass Mono|Ovo|Oxygen|Oxygen Mono|PT Mono|PT Sans|PT Sans Caption|PT Sans Narrow|PT Serif|PT Serif Caption|Pacifico|Padauk|Palanquin|Palanquin Dark|Pangolin|Paprika|Parisienne|Passero One|Passion One|Pathway Gothic One|Patrick Hand|Patrick Hand SC|Pattaya|Patua One|Pavanam|Paytone One|Peddana|Peralta|Permanent Marker|Petit Formal Script|Petrona|Philosopher|Piedra|Pinyon Script|Pirata One|Plaster|Play|Playball|Playfair Display|Playfair Display SC|Podkova|Poiret One|Poller One|Poly|Pompiere|Pontano Sans|Poor Story|Poppins|Port Lligat Sans|Port Lligat Slab|Pragati Narrow|Prata|Preahvihear|Press Start 2P|Pridi|Princess Sofia|Prociono|Prompt|Prosto One|Proza Libre|Puritan|Purple Purse|Quando|Quantico|Quattrocento|Quattrocento Sans|Questrial|Quicksand|Quintessential|Qwigley|Racing Sans One|Radley|Rajdhani|Rakkas|Raleway|Raleway Dots|Ramabhadra|Ramaraja|Rambla|Rammetto One|Ranchers|Rancho|Ranga|Rasa|Rationale|Ravi Prakash|Red Hat Display|Red Hat Text|Redressed|Reem Kufi|Reenie Beanie|Revalia|Rhodium Libre|Ribeye|Ribeye Marrow|Righteous|Risque|Roboto|Roboto Condensed|Roboto Mono|Roboto Slab|Rochester|Rock Salt|Rokkitt|Romanesco|Ropa Sans|Rosario|Rosarivo|Rouge Script|Rozha One|Rubik|Rubik Mono One|Ruda|Rufina|Ruge Boogie|Ruluko|Rum Raisin|Ruslan Display|Russo One|Ruthie|Rye|Sacramento|Sahitya|Sail|Saira|Saira Condensed|Saira Extra Condensed|Saira Semi Condensed|Saira Stencil One|Salsa|Sanchez|Sancreek|Sansita|Sarabun|Sarala|Sarina|Sarpanch|Satisfy|Sawarabi Gothic|Sawarabi Mincho|Scada|Scheherazade|Schoolbell|Scope One|Seaweed Script|Secular One|Sedgwick Ave|Sedgwick Ave Display|Sevillana|Seymour One|Shadows Into Light|Shadows Into Light Two|Shanti|Share|Share Tech|Share Tech Mono|Shojumaru|Short Stack|Shrikhand|Siemreap|Sigmar One|Signika|Signika Negative|Simonetta|Single Day|Sintony|Sirin Stencil|Six Caps|Skranji|Slabo 13px|Slabo 27px|Slackey|Smokum|Smythe|Sniglet|Snippet|Snowburst One|Sofadi One|Sofia|Song Myung|Sonsie One|Sorts Mill Goudy|Source Code Pro|Source Sans Pro|Source Serif Pro|Space Mono|Special Elite|Spectral|Spectral SC|Spicy Rice|Spinnaker|Spirax|Squada One|Sree Krushnadevaraya|Sriracha|Srisakdi|Staatliches|Stalemate|Stalinist One|Stardos Stencil|Stint Ultra Condensed|Stint Ultra Expanded|Stoke|Strait|Stylish|Sue Ellen Francisco|Suez One|Sumana|Sunflower|Sunshiney|Supermercado One|Sura|Suranna|Suravaram|Suwannaphum|Swanky and Moo Moo|Syncopate|Tajawal|Tangerine|Taprom|Tauri|Taviraj|Teko|Telex|Tenali Ramakrishna|Tenor Sans|Text Me One|Thasadith|The Girl Next Door|Tienne|Tillana|Timmana|Tinos|Titan One|Titillium Web|Trade Winds|Trirong|Trocchi|Trochut|Trykker|Tulpen One|Turret Road|Ubuntu|Ubuntu Condensed|Ubuntu Mono|Ultra|Uncial Antiqua|Underdog|Unica One|UnifrakturCook|UnifrakturMaguntia|Unkempt|Unlock|Unna|VT323|Vampiro One|Varela|Varela Round|Vast Shadow|Vesper Libre|Vibes|Vibur|Vidaloka|Viga|Voces|Volkhov|Vollkorn|Vollkorn SC|Voltaire|Waiting for the Sunrise|Wallpoet|Walter Turncoat|Warnes|Wellfleet|Wendy One|Wire One|Work Sans|Yanone Kaffeesatz|Yantramanav|Yatra One|Yellowtail|Yeon Sung|Yeseva One|Yesteryear|Yrsa|ZCOOL KuaiLe|ZCOOL QingKe HuangYou|ZCOOL XiaoWei|Zeyada|Zhi Mang Xing|Zilla Slab|Zilla Slab Highlight))?(,(normal|italic))?$","name":"chts","in":"query","required":false},{"type":"string","description":"Display values on your axis lines or change which axes are shown","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-axis/#visible-axes","category":"COMMON","implementation":{"status":"PARTIAL"},"examples":["y","x,y","x,x,y","x,y,t,r,t"],"note":"Specify which axes you want (from: \"x\", \"y\", \"t\" and \"r\"). You can use several of them, separated by a coma; for example: \"x,x,y,r\". Order is important."},"default":"","pattern":"^(?:[xytr])(,(?:[xytr]))*$","name":"chxt","in":"query","required":false},{"type":"string","description":"Custom string axis labels on any axis","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-axis/#custom-axis-labels","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["0:|Jan|July|Jan","0:|Jan|July|Jan|1|10|20|30"],"note":"Specify one parameter set for each axis that you want to label. Format \":||...||...|:||...|\". Separate multiple sets of labels using the pipe character ( | )."},"default":"","pattern":"^\\|?[0-9]+:\\|(?:[^\\|]*\\|?)+","name":"chxl","in":"query","required":false},{"type":"string","description":"Font size, color for axis labels, both custom labels and default label values","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-axis/#axis-label-styles","category":"COMMON","implementation":{"status":"PARTIAL"},"examples":["1,0000DD","1N*cUSD*Mil,FF0000","1N*cEUR*,FF0000","2,0000DD,13,0,t","0N*p*per-month,0000FF","0N*e*,000000|1N*cUSD*Mil,FF0000|2N*2sz*,0000FF"],"note":"You can specify the range of values that appear on each axis independently, using the chxr parameter. Note that this does not change the scale of the chart elements (use chds for that), only the scale of the axis labels."},"pattern":"^^(?:[0-9]+(?:N[^\\*]*\\*(?:[f|p|e]|(?:c[a-z]{3}))?(?:[0-9]+)?(?:[zs]{1,2}?)?(?:[x|y])?\\*(?:[^,]*)?)?(?:,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?)?(?:,[0-9.]+(?:,-?[0|1](?:,(?:(?:[l|t]t?)|_)(?:,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?(?:,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?)?)?)?)?)?(?:,(?:s))?(?:,(?:((?:min|max)[-0-9]{1,3}){1,2}))?\\|?)+$$","name":"chxs","in":"query","required":false},{"type":"string","description":"compound charts and line fills","x-meta":{"link":"https://documentation.image-charts.com/reference/compound-charts/","category":"COMMON","implementation":{"status":"PARTIAL"},"examples":[],"note":"\nformat should be either:\n - line fills (fill the area below a data line with a solid color): chm=,,,,<0> |...| ,,,,<0>\n - line marker (add a line that traces data in your chart): chm=D,,,,,\n - Text and Data Value Markers: chm=N,,,,,,,\n "},"default":"","pattern":"^(?:b|B),[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,\\d+,0|(N|N[^\\*]*\\*(?:[f|p|e]|(?:c[a-z]{3}))?(?:[0-9]+)?(?:[zs]{1,2}?)?(?:[x|y])?\\*(?:[^,]*)?),[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,(?:-?\\d+(?:(?::-?\\d+(?::-?\\d+)?)?|(?:\\.\\d+)))?,\\d+((,(\\d+)?)?(,(.?(s|c|e):?:?))?(,?(ABeeZee|Abel|Abhaya Libre|Abril Fatface|Aclonica|Acme|Actor|Adamina|Advent Pro|Aguafina Script|Akronim|Aladin|Aldrich|Alef|Alegreya|Alegreya SC|Alegreya Sans|Alegreya Sans SC|Aleo|Alex Brush|Alfa Slab One|Alice|Alike|Alike Angular|Allan|Allerta|Allerta Stencil|Allura|Almarai|Almendra|Almendra Display|Almendra SC|Amarante|Amaranth|Amatic SC|Amethysta|Amiko|Amiri|Amita|Anaheim|Andada|Andika|Angkor|Annie Use Your Telescope|Anonymous Pro|Antic|Antic Didone|Antic Slab|Anton|Arapey|Arbutus|Arbutus Slab|Architects Daughter|Archivo|Archivo Black|Archivo Narrow|Aref Ruqaa|Arima Madurai|Arimo|Arizonia|Armata|Arsenal|Artifika|Arvo|Arya|Asap|Asap Condensed|Asar|Asset|Assistant|Astloch|Asul|Athiti|Atma|Atomic Age|Aubrey|Audiowide|Autour One|Average|Average Sans|Averia Gruesa Libre|Averia Libre|Averia Sans Libre|Averia Serif Libre|B612|B612 Mono|Bad Script|Bahiana|Bahianita|Bai Jamjuree|Baloo|Baloo Bhai|Baloo Bhaijaan|Baloo Bhaina|Baloo Chettan|Baloo Da|Baloo Paaji|Baloo Tamma|Baloo Tammudu|Baloo Thambi|Balthazar|Bangers|Barlow|Barlow Condensed|Barlow Semi Condensed|Barriecito|Barrio|Basic|Battambang|Baumans|Bayon|Be Vietnam|Belgrano|Bellefair|Belleza|BenchNine|Bentham|Berkshire Swash|Beth Ellen|Bevan|Big Shoulders Display|Big Shoulders Text|Bigelow Rules|Bigshot One|Bilbo|Bilbo Swash Caps|BioRhyme|BioRhyme Expanded|Biryani|Bitter|Black And White Picture|Black Han Sans|Black Ops One|Blinker|Bokor|Bonbon|Boogaloo|Bowlby One|Bowlby One SC|Brawler|Bree Serif|Bubblegum Sans|Bubbler One|Buda|Buenard|Bungee|Bungee Hairline|Bungee Inline|Bungee Outline|Bungee Shade|Butcherman|Butterfly Kids|Cabin|Cabin Condensed|Cabin Sketch|Caesar Dressing|Cagliostro|Cairo|Calligraffitti|Cambay|Cambo|Candal|Cantarell|Cantata One|Cantora One|Capriola|Cardo|Carme|Carrois Gothic|Carrois Gothic SC|Carter One|Catamaran|Caudex|Caveat|Caveat Brush|Cedarville Cursive|Ceviche One|Chakra Petch|Changa|Changa One|Chango|Charm|Charmonman|Chathura|Chau Philomene One|Chela One|Chelsea Market|Chenla|Cherry Cream Soda|Cherry Swash|Chewy|Chicle|Chilanka|Chivo|Chonburi|Cinzel|Cinzel Decorative|Clicker Script|Coda|Coda Caption|Codystar|Coiny|Combo|Comfortaa|Coming Soon|Concert One|Condiment|Content|Contrail One|Convergence|Cookie|Copse|Corben|Cormorant|Cormorant Garamond|Cormorant Infant|Cormorant SC|Cormorant Unicase|Cormorant Upright|Courgette|Cousine|Coustard|Covered By Your Grace|Crafty Girls|Creepster|Crete Round|Crimson Pro|Crimson Text|Croissant One|Crushed|Cuprum|Cute Font|Cutive|Cutive Mono|DM Sans|DM Serif Display|DM Serif Text|Damion|Dancing Script|Dangrek|Darker Grotesque|David Libre|Dawning of a New Day|Days One|Dekko|Delius|Delius Swash Caps|Delius Unicase|Della Respira|Denk One|Devonshire|Dhurjati|Didact Gothic|Diplomata|Diplomata SC|Do Hyeon|Dokdo|Domine|Donegal One|Doppio One|Dorsa|Dosis|Dr Sugiyama|Duru Sans|Dynalight|EB Garamond|Eagle Lake|East Sea Dokdo|Eater|Economica|Eczar|El Messiri|Electrolize|Elsie|Elsie Swash Caps|Emblema One|Emilys Candy|Encode Sans|Encode Sans Condensed|Encode Sans Expanded|Encode Sans Semi Condensed|Encode Sans Semi Expanded|Engagement|Englebert|Enriqueta|Erica One|Esteban|Euphoria Script|Ewert|Exo|Exo 2|Expletus Sans|Fahkwang|Fanwood Text|Farro|Farsan|Fascinate|Fascinate Inline|Faster One|Fasthand|Fauna One|Faustina|Federant|Federo|Felipa|Fenix|Finger Paint|Fira Code|Fira Mono|Fira Sans|Fira Sans Condensed|Fira Sans Extra Condensed|Fjalla One|Fjord One|Flamenco|Flavors|Fondamento|Fontdiner Swanky|Forum|Francois One|Frank Ruhl Libre|Freckle Face|Fredericka the Great|Fredoka One|Freehand|Fresca|Frijole|Fruktur|Fugaz One|GFS Didot|GFS Neohellenic|Gabriela|Gaegu|Gafata|Galada|Galdeano|Galindo|Gamja Flower|Gayathri|Gentium Basic|Gentium Book Basic|Geo|Geostar|Geostar Fill|Germania One|Gidugu|Gilda Display|Give You Glory|Glass Antiqua|Glegoo|Gloria Hallelujah|Goblin One|Gochi Hand|Gorditas|Gothic A1|Goudy Bookletter 1911|Graduate|Grand Hotel|Gravitas One|Great Vibes|Grenze|Griffy|Gruppo|Gudea|Gugi|Gurajada|Habibi|Halant|Hammersmith One|Hanalei|Hanalei Fill|Handlee|Hanuman|Happy Monkey|Harmattan|Headland One|Heebo|Henny Penny|Hepta Slab|Herr Von Muellerhoff|Hi Melody|Hind|Hind Guntur|Hind Madurai|Hind Siliguri|Hind Vadodara|Holtwood One SC|Homemade Apple|Homenaje|IBM Plex Mono|IBM Plex Sans|IBM Plex Sans Condensed|IBM Plex Serif|IM Fell DW Pica|IM Fell DW Pica SC|IM Fell Double Pica|IM Fell Double Pica SC|IM Fell English|IM Fell English SC|IM Fell French Canon|IM Fell French Canon SC|IM Fell Great Primer|IM Fell Great Primer SC|Iceberg|Iceland|Imprima|Inconsolata|Inder|Indie Flower|Inika|Inknut Antiqua|Irish Grover|Istok Web|Italiana|Italianno|Itim|Jacques Francois|Jacques Francois Shadow|Jaldi|Jim Nightshade|Jockey One|Jolly Lodger|Jomhuria|Jomolhari|Josefin Sans|Josefin Slab|Joti One|Jua|Judson|Julee|Julius Sans One|Junge|Jura|Just Another Hand|Just Me Again Down Here|K2D|Kadwa|Kalam|Kameron|Kanit|Kantumruy|Karla|Karma|Katibeh|Kaushan Script|Kavivanar|Kavoon|Kdam Thmor|Keania One|Kelly Slab|Kenia|Khand|Khmer|Khula|Kirang Haerang|Kite One|Knewave|KoHo|Kodchasan|Kosugi|Kosugi Maru|Kotta One|Koulen|Kranky|Kreon|Kristi|Krona One|Krub|Kumar One|Kumar One Outline|Kurale|La Belle Aurore|Lacquer|Laila|Lakki Reddy|Lalezar|Lancelot|Lateef|Lato|League Script|Leckerli One|Ledger|Lekton|Lemon|Lemonada|Lexend Deca|Lexend Exa|Lexend Giga|Lexend Mega|Lexend Peta|Lexend Tera|Lexend Zetta|Libre Barcode 128|Libre Barcode 128 Text|Libre Barcode 39|Libre Barcode 39 Extended|Libre Barcode 39 Extended Text|Libre Barcode 39 Text|Libre Baskerville|Libre Caslon Display|Libre Caslon Text|Libre Franklin|Life Savers|Lilita One|Lily Script One|Limelight|Linden Hill|Literata|Liu Jian Mao Cao|Livvic|Lobster|Lobster Two|Londrina Outline|Londrina Shadow|Londrina Sketch|Londrina Solid|Long Cang|Lora|Love Ya Like A Sister|Loved by the King|Lovers Quarrel|Luckiest Guy|Lusitana|Lustria|M PLUS 1p|M PLUS Rounded 1c|Ma Shan Zheng|Macondo|Macondo Swash Caps|Mada|Magra|Maiden Orange|Maitree|Major Mono Display|Mako|Mali|Mallanna|Mandali|Manjari|Mansalva|Manuale|Marcellus|Marcellus SC|Marck Script|Margarine|Markazi Text|Marko One|Marmelad|Martel|Martel Sans|Marvel|Mate|Mate SC|Maven Pro|McLaren|Meddon|MedievalSharp|Medula One|Meera Inimai|Megrim|Meie Script|Merienda|Merienda One|Merriweather|Merriweather Sans|Metal|Metal Mania|Metamorphous|Metrophobic|Michroma|Milonga|Miltonian|Miltonian Tattoo|Mina|Miniver|Miriam Libre|Mirza|Miss Fajardose|Mitr|Modak|Modern Antiqua|Mogra|Molengo|Molle|Monda|Monofett|Monoton|Monsieur La Doulaise|Montaga|Montez|Montserrat|Montserrat Alternates|Montserrat Subrayada|Moul|Moulpali|Mountains of Christmas|Mouse Memoirs|Mr Bedfort|Mr Dafoe|Mr De Haviland|Mrs Saint Delafield|Mrs Sheppards|Mukta|Mukta Mahee|Mukta Malar|Mukta Vaani|Muli|Mystery Quest|NTR|Nanum Brush Script|Nanum Gothic|Nanum Gothic Coding|Nanum Myeongjo|Nanum Pen Script|Neucha|Neuton|New Rocker|News Cycle|Niconne|Niramit|Nixie One|Nobile|Nokora|Norican|Nosifer|Notable|Nothing You Could Do|Noticia Text|Noto Sans|Noto Sans HK|Noto Sans JP|Noto Sans KR|Noto Sans SC|Noto Sans TC|Noto Serif|Noto Serif JP|Noto Serif KR|Noto Serif SC|Noto Serif TC|Nova Cut|Nova Flat|Nova Mono|Nova Oval|Nova Round|Nova Script|Nova Slim|Nova Square|Numans|Nunito|Nunito Sans|Odor Mean Chey|Offside|Old Standard TT|Oldenburg|Oleo Script|Oleo Script Swash Caps|Open Sans|Open Sans Condensed|Oranienbaum|Orbitron|Oregano|Orienta|Original Surfer|Oswald|Over the Rainbow|Overlock|Overlock SC|Overpass|Overpass Mono|Ovo|Oxygen|Oxygen Mono|PT Mono|PT Sans|PT Sans Caption|PT Sans Narrow|PT Serif|PT Serif Caption|Pacifico|Padauk|Palanquin|Palanquin Dark|Pangolin|Paprika|Parisienne|Passero One|Passion One|Pathway Gothic One|Patrick Hand|Patrick Hand SC|Pattaya|Patua One|Pavanam|Paytone One|Peddana|Peralta|Permanent Marker|Petit Formal Script|Petrona|Philosopher|Piedra|Pinyon Script|Pirata One|Plaster|Play|Playball|Playfair Display|Playfair Display SC|Podkova|Poiret One|Poller One|Poly|Pompiere|Pontano Sans|Poor Story|Poppins|Port Lligat Sans|Port Lligat Slab|Pragati Narrow|Prata|Preahvihear|Press Start 2P|Pridi|Princess Sofia|Prociono|Prompt|Prosto One|Proza Libre|Puritan|Purple Purse|Quando|Quantico|Quattrocento|Quattrocento Sans|Questrial|Quicksand|Quintessential|Qwigley|Racing Sans One|Radley|Rajdhani|Rakkas|Raleway|Raleway Dots|Ramabhadra|Ramaraja|Rambla|Rammetto One|Ranchers|Rancho|Ranga|Rasa|Rationale|Ravi Prakash|Red Hat Display|Red Hat Text|Redressed|Reem Kufi|Reenie Beanie|Revalia|Rhodium Libre|Ribeye|Ribeye Marrow|Righteous|Risque|Roboto|Roboto Condensed|Roboto Mono|Roboto Slab|Rochester|Rock Salt|Rokkitt|Romanesco|Ropa Sans|Rosario|Rosarivo|Rouge Script|Rozha One|Rubik|Rubik Mono One|Ruda|Rufina|Ruge Boogie|Ruluko|Rum Raisin|Ruslan Display|Russo One|Ruthie|Rye|Sacramento|Sahitya|Sail|Saira|Saira Condensed|Saira Extra Condensed|Saira Semi Condensed|Saira Stencil One|Salsa|Sanchez|Sancreek|Sansita|Sarabun|Sarala|Sarina|Sarpanch|Satisfy|Sawarabi Gothic|Sawarabi Mincho|Scada|Scheherazade|Schoolbell|Scope One|Seaweed Script|Secular One|Sedgwick Ave|Sedgwick Ave Display|Sevillana|Seymour One|Shadows Into Light|Shadows Into Light Two|Shanti|Share|Share Tech|Share Tech Mono|Shojumaru|Short Stack|Shrikhand|Siemreap|Sigmar One|Signika|Signika Negative|Simonetta|Single Day|Sintony|Sirin Stencil|Six Caps|Skranji|Slabo 13px|Slabo 27px|Slackey|Smokum|Smythe|Sniglet|Snippet|Snowburst One|Sofadi One|Sofia|Song Myung|Sonsie One|Sorts Mill Goudy|Source Code Pro|Source Sans Pro|Source Serif Pro|Space Mono|Special Elite|Spectral|Spectral SC|Spicy Rice|Spinnaker|Spirax|Squada One|Sree Krushnadevaraya|Sriracha|Srisakdi|Staatliches|Stalemate|Stalinist One|Stardos Stencil|Stint Ultra Condensed|Stint Ultra Expanded|Stoke|Strait|Stylish|Sue Ellen Francisco|Suez One|Sumana|Sunflower|Sunshiney|Supermercado One|Sura|Suranna|Suravaram|Suwannaphum|Swanky and Moo Moo|Syncopate|Tajawal|Tangerine|Taprom|Tauri|Taviraj|Teko|Telex|Tenali Ramakrishna|Tenor Sans|Text Me One|Thasadith|The Girl Next Door|Tienne|Tillana|Timmana|Tinos|Titan One|Titillium Web|Trade Winds|Trirong|Trocchi|Trochut|Trykker|Tulpen One|Turret Road|Ubuntu|Ubuntu Condensed|Ubuntu Mono|Ultra|Uncial Antiqua|Underdog|Unica One|UnifrakturCook|UnifrakturMaguntia|Unkempt|Unlock|Unna|VT323|Vampiro One|Varela|Varela Round|Vast Shadow|Vesper Libre|Vibes|Vibur|Vidaloka|Viga|Voces|Volkhov|Vollkorn|Vollkorn SC|Voltaire|Waiting for the Sunrise|Wallpoet|Walter Turncoat|Warnes|Wellfleet|Wendy One|Wire One|Work Sans|Yanone Kaffeesatz|Yantramanav|Yatra One|Yellowtail|Yeon Sung|Yeseva One|Yesteryear|Yrsa|ZCOOL KuaiLe|ZCOOL QingKe HuangYou|ZCOOL XiaoWei|Zeyada|Zhi Mang Xing|Zilla Slab|Zilla Slab Highlight))?(,?(normal|italic))?)?|D,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,(?:0|(?:-?\\d+:-?\\d+)),\\d+|(?:a|c|C|d|E|h|H|o|s|v|V|x),[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,(?:-1|(?:-?\\d+:-?\\d+(?::-?\\d+)?)),\\d+(?:\\.\\d+)?(?:[|](?:b|B),[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,\\d+,0|(N|N[^\\*]*\\*(?:[f|p|e]|(?:c[a-z]{3}))?(?:[0-9]+)?(?:[zs]{1,2}?)?(?:[x|y])?\\*(?:[^,]*)?),[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,(?:-?\\d+(?:(?::-?\\d+(?::-?\\d+)?)?|(?:\\.\\d+)))?,\\d+((,(\\d+)?)?(,(.?(s|c|e):?:?))?(,?(ABeeZee|Abel|Abhaya Libre|Abril Fatface|Aclonica|Acme|Actor|Adamina|Advent Pro|Aguafina Script|Akronim|Aladin|Aldrich|Alef|Alegreya|Alegreya SC|Alegreya Sans|Alegreya Sans SC|Aleo|Alex Brush|Alfa Slab One|Alice|Alike|Alike Angular|Allan|Allerta|Allerta Stencil|Allura|Almarai|Almendra|Almendra Display|Almendra SC|Amarante|Amaranth|Amatic SC|Amethysta|Amiko|Amiri|Amita|Anaheim|Andada|Andika|Angkor|Annie Use Your Telescope|Anonymous Pro|Antic|Antic Didone|Antic Slab|Anton|Arapey|Arbutus|Arbutus Slab|Architects Daughter|Archivo|Archivo Black|Archivo Narrow|Aref Ruqaa|Arima Madurai|Arimo|Arizonia|Armata|Arsenal|Artifika|Arvo|Arya|Asap|Asap Condensed|Asar|Asset|Assistant|Astloch|Asul|Athiti|Atma|Atomic Age|Aubrey|Audiowide|Autour One|Average|Average Sans|Averia Gruesa Libre|Averia Libre|Averia Sans Libre|Averia Serif Libre|B612|B612 Mono|Bad Script|Bahiana|Bahianita|Bai Jamjuree|Baloo|Baloo Bhai|Baloo Bhaijaan|Baloo Bhaina|Baloo Chettan|Baloo Da|Baloo Paaji|Baloo Tamma|Baloo Tammudu|Baloo Thambi|Balthazar|Bangers|Barlow|Barlow Condensed|Barlow Semi Condensed|Barriecito|Barrio|Basic|Battambang|Baumans|Bayon|Be Vietnam|Belgrano|Bellefair|Belleza|BenchNine|Bentham|Berkshire Swash|Beth Ellen|Bevan|Big Shoulders Display|Big Shoulders Text|Bigelow Rules|Bigshot One|Bilbo|Bilbo Swash Caps|BioRhyme|BioRhyme Expanded|Biryani|Bitter|Black And White Picture|Black Han Sans|Black Ops One|Blinker|Bokor|Bonbon|Boogaloo|Bowlby One|Bowlby One SC|Brawler|Bree Serif|Bubblegum Sans|Bubbler One|Buda|Buenard|Bungee|Bungee Hairline|Bungee Inline|Bungee Outline|Bungee Shade|Butcherman|Butterfly Kids|Cabin|Cabin Condensed|Cabin Sketch|Caesar Dressing|Cagliostro|Cairo|Calligraffitti|Cambay|Cambo|Candal|Cantarell|Cantata One|Cantora One|Capriola|Cardo|Carme|Carrois Gothic|Carrois Gothic SC|Carter One|Catamaran|Caudex|Caveat|Caveat Brush|Cedarville Cursive|Ceviche One|Chakra Petch|Changa|Changa One|Chango|Charm|Charmonman|Chathura|Chau Philomene One|Chela One|Chelsea Market|Chenla|Cherry Cream Soda|Cherry Swash|Chewy|Chicle|Chilanka|Chivo|Chonburi|Cinzel|Cinzel Decorative|Clicker Script|Coda|Coda Caption|Codystar|Coiny|Combo|Comfortaa|Coming Soon|Concert One|Condiment|Content|Contrail One|Convergence|Cookie|Copse|Corben|Cormorant|Cormorant Garamond|Cormorant Infant|Cormorant SC|Cormorant Unicase|Cormorant Upright|Courgette|Cousine|Coustard|Covered By Your Grace|Crafty Girls|Creepster|Crete Round|Crimson Pro|Crimson Text|Croissant One|Crushed|Cuprum|Cute Font|Cutive|Cutive Mono|DM Sans|DM Serif Display|DM Serif Text|Damion|Dancing Script|Dangrek|Darker Grotesque|David Libre|Dawning of a New Day|Days One|Dekko|Delius|Delius Swash Caps|Delius Unicase|Della Respira|Denk One|Devonshire|Dhurjati|Didact Gothic|Diplomata|Diplomata SC|Do Hyeon|Dokdo|Domine|Donegal One|Doppio One|Dorsa|Dosis|Dr Sugiyama|Duru Sans|Dynalight|EB Garamond|Eagle Lake|East Sea Dokdo|Eater|Economica|Eczar|El Messiri|Electrolize|Elsie|Elsie Swash Caps|Emblema One|Emilys Candy|Encode Sans|Encode Sans Condensed|Encode Sans Expanded|Encode Sans Semi Condensed|Encode Sans Semi Expanded|Engagement|Englebert|Enriqueta|Erica One|Esteban|Euphoria Script|Ewert|Exo|Exo 2|Expletus Sans|Fahkwang|Fanwood Text|Farro|Farsan|Fascinate|Fascinate Inline|Faster One|Fasthand|Fauna One|Faustina|Federant|Federo|Felipa|Fenix|Finger Paint|Fira Code|Fira Mono|Fira Sans|Fira Sans Condensed|Fira Sans Extra Condensed|Fjalla One|Fjord One|Flamenco|Flavors|Fondamento|Fontdiner Swanky|Forum|Francois One|Frank Ruhl Libre|Freckle Face|Fredericka the Great|Fredoka One|Freehand|Fresca|Frijole|Fruktur|Fugaz One|GFS Didot|GFS Neohellenic|Gabriela|Gaegu|Gafata|Galada|Galdeano|Galindo|Gamja Flower|Gayathri|Gentium Basic|Gentium Book Basic|Geo|Geostar|Geostar Fill|Germania One|Gidugu|Gilda Display|Give You Glory|Glass Antiqua|Glegoo|Gloria Hallelujah|Goblin One|Gochi Hand|Gorditas|Gothic A1|Goudy Bookletter 1911|Graduate|Grand Hotel|Gravitas One|Great Vibes|Grenze|Griffy|Gruppo|Gudea|Gugi|Gurajada|Habibi|Halant|Hammersmith One|Hanalei|Hanalei Fill|Handlee|Hanuman|Happy Monkey|Harmattan|Headland One|Heebo|Henny Penny|Hepta Slab|Herr Von Muellerhoff|Hi Melody|Hind|Hind Guntur|Hind Madurai|Hind Siliguri|Hind Vadodara|Holtwood One SC|Homemade Apple|Homenaje|IBM Plex Mono|IBM Plex Sans|IBM Plex Sans Condensed|IBM Plex Serif|IM Fell DW Pica|IM Fell DW Pica SC|IM Fell Double Pica|IM Fell Double Pica SC|IM Fell English|IM Fell English SC|IM Fell French Canon|IM Fell French Canon SC|IM Fell Great Primer|IM Fell Great Primer SC|Iceberg|Iceland|Imprima|Inconsolata|Inder|Indie Flower|Inika|Inknut Antiqua|Irish Grover|Istok Web|Italiana|Italianno|Itim|Jacques Francois|Jacques Francois Shadow|Jaldi|Jim Nightshade|Jockey One|Jolly Lodger|Jomhuria|Jomolhari|Josefin Sans|Josefin Slab|Joti One|Jua|Judson|Julee|Julius Sans One|Junge|Jura|Just Another Hand|Just Me Again Down Here|K2D|Kadwa|Kalam|Kameron|Kanit|Kantumruy|Karla|Karma|Katibeh|Kaushan Script|Kavivanar|Kavoon|Kdam Thmor|Keania One|Kelly Slab|Kenia|Khand|Khmer|Khula|Kirang Haerang|Kite One|Knewave|KoHo|Kodchasan|Kosugi|Kosugi Maru|Kotta One|Koulen|Kranky|Kreon|Kristi|Krona One|Krub|Kumar One|Kumar One Outline|Kurale|La Belle Aurore|Lacquer|Laila|Lakki Reddy|Lalezar|Lancelot|Lateef|Lato|League Script|Leckerli One|Ledger|Lekton|Lemon|Lemonada|Lexend Deca|Lexend Exa|Lexend Giga|Lexend Mega|Lexend Peta|Lexend Tera|Lexend Zetta|Libre Barcode 128|Libre Barcode 128 Text|Libre Barcode 39|Libre Barcode 39 Extended|Libre Barcode 39 Extended Text|Libre Barcode 39 Text|Libre Baskerville|Libre Caslon Display|Libre Caslon Text|Libre Franklin|Life Savers|Lilita One|Lily Script One|Limelight|Linden Hill|Literata|Liu Jian Mao Cao|Livvic|Lobster|Lobster Two|Londrina Outline|Londrina Shadow|Londrina Sketch|Londrina Solid|Long Cang|Lora|Love Ya Like A Sister|Loved by the King|Lovers Quarrel|Luckiest Guy|Lusitana|Lustria|M PLUS 1p|M PLUS Rounded 1c|Ma Shan Zheng|Macondo|Macondo Swash Caps|Mada|Magra|Maiden Orange|Maitree|Major Mono Display|Mako|Mali|Mallanna|Mandali|Manjari|Mansalva|Manuale|Marcellus|Marcellus SC|Marck Script|Margarine|Markazi Text|Marko One|Marmelad|Martel|Martel Sans|Marvel|Mate|Mate SC|Maven Pro|McLaren|Meddon|MedievalSharp|Medula One|Meera Inimai|Megrim|Meie Script|Merienda|Merienda One|Merriweather|Merriweather Sans|Metal|Metal Mania|Metamorphous|Metrophobic|Michroma|Milonga|Miltonian|Miltonian Tattoo|Mina|Miniver|Miriam Libre|Mirza|Miss Fajardose|Mitr|Modak|Modern Antiqua|Mogra|Molengo|Molle|Monda|Monofett|Monoton|Monsieur La Doulaise|Montaga|Montez|Montserrat|Montserrat Alternates|Montserrat Subrayada|Moul|Moulpali|Mountains of Christmas|Mouse Memoirs|Mr Bedfort|Mr Dafoe|Mr De Haviland|Mrs Saint Delafield|Mrs Sheppards|Mukta|Mukta Mahee|Mukta Malar|Mukta Vaani|Muli|Mystery Quest|NTR|Nanum Brush Script|Nanum Gothic|Nanum Gothic Coding|Nanum Myeongjo|Nanum Pen Script|Neucha|Neuton|New Rocker|News Cycle|Niconne|Niramit|Nixie One|Nobile|Nokora|Norican|Nosifer|Notable|Nothing You Could Do|Noticia Text|Noto Sans|Noto Sans HK|Noto Sans JP|Noto Sans KR|Noto Sans SC|Noto Sans TC|Noto Serif|Noto Serif JP|Noto Serif KR|Noto Serif SC|Noto Serif TC|Nova Cut|Nova Flat|Nova Mono|Nova Oval|Nova Round|Nova Script|Nova Slim|Nova Square|Numans|Nunito|Nunito Sans|Odor Mean Chey|Offside|Old Standard TT|Oldenburg|Oleo Script|Oleo Script Swash Caps|Open Sans|Open Sans Condensed|Oranienbaum|Orbitron|Oregano|Orienta|Original Surfer|Oswald|Over the Rainbow|Overlock|Overlock SC|Overpass|Overpass Mono|Ovo|Oxygen|Oxygen Mono|PT Mono|PT Sans|PT Sans Caption|PT Sans Narrow|PT Serif|PT Serif Caption|Pacifico|Padauk|Palanquin|Palanquin Dark|Pangolin|Paprika|Parisienne|Passero One|Passion One|Pathway Gothic One|Patrick Hand|Patrick Hand SC|Pattaya|Patua One|Pavanam|Paytone One|Peddana|Peralta|Permanent Marker|Petit Formal Script|Petrona|Philosopher|Piedra|Pinyon Script|Pirata One|Plaster|Play|Playball|Playfair Display|Playfair Display SC|Podkova|Poiret One|Poller One|Poly|Pompiere|Pontano Sans|Poor Story|Poppins|Port Lligat Sans|Port Lligat Slab|Pragati Narrow|Prata|Preahvihear|Press Start 2P|Pridi|Princess Sofia|Prociono|Prompt|Prosto One|Proza Libre|Puritan|Purple Purse|Quando|Quantico|Quattrocento|Quattrocento Sans|Questrial|Quicksand|Quintessential|Qwigley|Racing Sans One|Radley|Rajdhani|Rakkas|Raleway|Raleway Dots|Ramabhadra|Ramaraja|Rambla|Rammetto One|Ranchers|Rancho|Ranga|Rasa|Rationale|Ravi Prakash|Red Hat Display|Red Hat Text|Redressed|Reem Kufi|Reenie Beanie|Revalia|Rhodium Libre|Ribeye|Ribeye Marrow|Righteous|Risque|Roboto|Roboto Condensed|Roboto Mono|Roboto Slab|Rochester|Rock Salt|Rokkitt|Romanesco|Ropa Sans|Rosario|Rosarivo|Rouge Script|Rozha One|Rubik|Rubik Mono One|Ruda|Rufina|Ruge Boogie|Ruluko|Rum Raisin|Ruslan Display|Russo One|Ruthie|Rye|Sacramento|Sahitya|Sail|Saira|Saira Condensed|Saira Extra Condensed|Saira Semi Condensed|Saira Stencil One|Salsa|Sanchez|Sancreek|Sansita|Sarabun|Sarala|Sarina|Sarpanch|Satisfy|Sawarabi Gothic|Sawarabi Mincho|Scada|Scheherazade|Schoolbell|Scope One|Seaweed Script|Secular One|Sedgwick Ave|Sedgwick Ave Display|Sevillana|Seymour One|Shadows Into Light|Shadows Into Light Two|Shanti|Share|Share Tech|Share Tech Mono|Shojumaru|Short Stack|Shrikhand|Siemreap|Sigmar One|Signika|Signika Negative|Simonetta|Single Day|Sintony|Sirin Stencil|Six Caps|Skranji|Slabo 13px|Slabo 27px|Slackey|Smokum|Smythe|Sniglet|Snippet|Snowburst One|Sofadi One|Sofia|Song Myung|Sonsie One|Sorts Mill Goudy|Source Code Pro|Source Sans Pro|Source Serif Pro|Space Mono|Special Elite|Spectral|Spectral SC|Spicy Rice|Spinnaker|Spirax|Squada One|Sree Krushnadevaraya|Sriracha|Srisakdi|Staatliches|Stalemate|Stalinist One|Stardos Stencil|Stint Ultra Condensed|Stint Ultra Expanded|Stoke|Strait|Stylish|Sue Ellen Francisco|Suez One|Sumana|Sunflower|Sunshiney|Supermercado One|Sura|Suranna|Suravaram|Suwannaphum|Swanky and Moo Moo|Syncopate|Tajawal|Tangerine|Taprom|Tauri|Taviraj|Teko|Telex|Tenali Ramakrishna|Tenor Sans|Text Me One|Thasadith|The Girl Next Door|Tienne|Tillana|Timmana|Tinos|Titan One|Titillium Web|Trade Winds|Trirong|Trocchi|Trochut|Trykker|Tulpen One|Turret Road|Ubuntu|Ubuntu Condensed|Ubuntu Mono|Ultra|Uncial Antiqua|Underdog|Unica One|UnifrakturCook|UnifrakturMaguntia|Unkempt|Unlock|Unna|VT323|Vampiro One|Varela|Varela Round|Vast Shadow|Vesper Libre|Vibes|Vibur|Vidaloka|Viga|Voces|Volkhov|Vollkorn|Vollkorn SC|Voltaire|Waiting for the Sunrise|Wallpoet|Walter Turncoat|Warnes|Wellfleet|Wendy One|Wire One|Work Sans|Yanone Kaffeesatz|Yantramanav|Yatra One|Yellowtail|Yeon Sung|Yeseva One|Yesteryear|Yrsa|ZCOOL KuaiLe|ZCOOL QingKe HuangYou|ZCOOL XiaoWei|Zeyada|Zhi Mang Xing|Zilla Slab|Zilla Slab Highlight))?(,?(normal|italic))?)?|D,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,(?:0|(?:-?\\d+:-?\\d+)),\\d+|(?:a|c|C|d|E|h|H|o|s|v|V|x),[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,\\d+,(?:-1|(?:-?\\d+:-?\\d+(?::-?\\d+)?)),\\d+(?:\\.\\d+)?)*$","name":"chm","in":"query","required":false},{"type":"string","description":"line thickness and solid/dashed style","x-meta":{"link":"https://documentation.image-charts.com/line-charts/#line-styles","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["10","3,6,3|5"]},"default":"","pattern":"^(((?:[0-9]\\.?)+,?){1,3}\\|?)+","name":"chls","in":"query","required":false},{"type":"string","description":"bar, pie slice, doughnut slice and polar slice chart labels","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-label/","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["label1|label2","multi\nline\nlabel1|label2"],"note":"If specified it will override \"chdl\" values"},"default":"","pattern":"^(?:[^\\|]*\\|?)+$","name":"chl","in":"query","required":false},{"type":"string","description":"Position and style of labels on data","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-label/#positionning-and-formatting","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["align,top|offset,10|color,FF00FF","align,top|offset,10|color,FF00FF"],"note":""},"default":"","pattern":"^(?:align|anchor|backgroundColor|borderColor|borderRadius|borderWidth|clamp|clip|color|display|font\\.size|font\\.style|font\\.weight|font\\.lineHeight|offset|opacity|padding|padding\\.top|padding\\.right|padding\\.bottom|padding\\.left|rotation|textAlign|textStrokeColor|textStrokeWidth|textShadowBlur|textShadowColor),(?:[0-9a-zA-Z.]+)(?:\\|(?:align|anchor|backgroundColor|borderColor|borderRadius|borderWidth|clamp|clip|color|display|font\\.size|font\\.style|font\\.weight|font\\.lineHeight|offset|opacity|padding|padding\\.top|padding\\.right|padding\\.bottom|padding\\.left|rotation|textAlign|textStrokeColor|textStrokeWidth|textShadowBlur|textShadowColor),(?:[0-9a-zA-Z.]+)){0,10}$","name":"chlps","in":"query"},{"type":"string","description":"chart margins","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-margin/","category":"COMMON","implementation":{"status":"PARTIAL"},"examples":["30,30,30,30","40,20"]},"pattern":"^(([-0-9\\.]+),?)+\\|?([-0-9\\.],?)+$","name":"chma","in":"query","required":false},{"type":"string","description":"Position of the legend and order of the legend entries","x-meta":{"link":"https://documentation.image-charts.com/reference/legend-text-and-style/","category":"COMMON","implementation":{"status":"PARTIAL"},"examples":[]},"default":"r","pattern":"^(?:tv{0,1}|bv{0,1}|r|l)(\\|(?:l|r|a|[0-9][0-9,]*))?$","name":"chdlp","in":"query","required":false},{"type":"string","description":"Background Fills","x-meta":{"link":"https://documentation.image-charts.com/reference/background-fill/","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["b0,lg,0,f44336,0.3,03a9f4,0.8"]},"default":"bg,s,FFFFFF","pattern":"^(?:(?:b(?:[0-9]+|g)|a|c),s,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?|(?:bg,img,(?:(?:(?:[a-z]+:)?\\/\\/)?|www\\.)(?:localhost|(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?:(?:[a-fA-F\\d]{1,4}:){7}(?:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,2}|:)|(?:[a-fA-F\\d]{1,4}:){4}(?:(?::[a-fA-F\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,3}|:)|(?:[a-fA-F\\d]{1,4}:){3}(?:(?::[a-fA-F\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,4}|:)|(?:[a-fA-F\\d]{1,4}:){2}(?:(?::[a-fA-F\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,5}|:)|(?:[a-fA-F\\d]{1,4}:){1}(?:(?::[a-fA-F\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?|(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:northwesternmutual|travelersinsurance|vermögensberatung|vermögensberater|americanexpress|kerryproperties|sandvikcoromant|afamilycompany|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|international|lifeinsurance|travelchannel|wolterskluwer|construction|lplfinancial|scholarships|versicherung|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|volkswagen|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|scjohnson|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|yodobashi|موريتانيا|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|budapest|builders|business|capetown|catering|catholic|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|etisalat|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|البحرين|الجزائر|العليان|كاثوليك|پاکستان|இந்தியா|abarth|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glade|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|lixil|loans|locus|lotte|lotto|macys|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|ישראל|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|duck|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|raid|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|تونس|شبكة|عراق|عمان|موقع|ڀارت|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|アマゾン|クラウド|グーグル|ポイント|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceo|cfa|cfd|com|cpa|crs|csc|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|off|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|мкд|мон|орг|рус|срб|укр|қаз|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ລາວ|みんな|ストア|セール|中文网|亚马逊|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|ευ|бг|ею|рф|გე|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|广东|微博|慈善|手机|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港|닷넷|닷컴|삼성|한국)))(?::\\d{2,5})?(?:[\\/?#][^\\s\"\\)']*)?)|(?:(?:(?:b(?:[0-9]+|g)|c)|ps[0-9]+-[0-9]+),lg,[0-9]{1,2}(?:,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,[0-9.]+){1,})|(?:(?:b(?:[0-9]+|g)|c),ls,[0-9]{1,2}(?:,[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?,[0-9.]+){1,})|\\|?)+$","name":"chf","in":"query","required":false},{"type":"string","description":"Bar Width and Spacing. (not supported) You can optionally specify custom values for bar widths and spacing between bars and groups. You can only specify one set of width values for all bars. If you don't specify chbh, all bars will be 23 pixels wide, which means that the end bars can be clipped if the total bar + space width is wider than the chart width.","x-meta":{"link":"","category":"COMMON","implementation":{"status":"UPCOMING"},"examples":["15,4,15"]},"default":10,"name":"chbh","in":"query","required":false},{"type":"string","description":"Bar corner radius. Display bars with rounded corner.","x-meta":{"link":"https://documentation.image-charts.com/bar-charts/#rounded-bar","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["5","10"]},"default":0,"pattern":"^[0-9]{1,3}$","name":"chbr","in":"query","required":false},{"type":"string","description":"gif configuration","x-meta":{"link":"https://documentation.image-charts.com/reference/animation/","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["1200","1300|easeInOutSine"]},"pattern":"^[0-9]{2,4}(?:,(?:easeInQuad|easeOutQuad|easeInOutQuad|easeInCubic|easeOutCubic|easeInOutCubic|easeInQuart|easeOutQuart|easeInOutQuart|easeInQuint|easeOutQuint|easeInOutQuint|easeInSine|easeOutSine|easeInOutSine|easeInExpo|easeOutExpo|easeInOutExpo|easeInCirc|easeOutCirc|easeInOutCirc|easeInElastic|easeOutElastic|easeInOutElastic|easeInBack|easeOutBack|easeInOutBack|easeInBounce|easeOutBounce|easeInOutBounce))?$","name":"chan","in":"query","required":false},{"type":"string","description":"doughnut chart inside label","x-meta":{"link":"https://documentation.image-charts.com/pie-charts/#inside-label","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["95K€","45%"]},"pattern":"^(?:.*)$","name":"chli","in":"query","required":false},{"type":"string","description":"image-charts enterprise `account_id`","x-meta":{"link":"https://documentation.image-charts.com/enterprise/","category":"ENTERPRISE","implementation":{"status":"COMPLETE"},"examples":["accountId"]},"name":"icac","in":"query","required":false},{"type":"string","description":"HMAC-SHA256 signature required to activate paid features","x-meta":{"link":"https://documentation.image-charts.com/enterprise/","category":"ENTERPRISE","implementation":{"status":"COMPLETE"},"examples":["0785cf22a0381c2e0239e27c126de4181f501d117c2c81745611e9db928b0376"]},"name":"ichm","in":"query","required":false},{"type":"string","description":"Default font family for all text from Google Fonts. Use same syntax as Google Font CSS API","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-font/","category":"ENTERPRISE","implementation":{"status":"COMPLETE"},"examples":["Abel","Akronim","Alfa Slab One"],"note":"How to use icff to define font family as Google Font : https://developers.google.com/fonts/docs/css2"},"enum":["ABeeZee","Abel","Abhaya Libre","Abril Fatface","Aclonica","Acme","Actor","Adamina","Advent Pro","Aguafina Script","Akronim","Aladin","Aldrich","Alef","Alegreya","Alegreya SC","Alegreya Sans","Alegreya Sans SC","Aleo","Alex Brush","Alfa Slab One","Alice","Alike","Alike Angular","Allan","Allerta","Allerta Stencil","Allura","Almarai","Almendra","Almendra Display","Almendra SC","Amarante","Amaranth","Amatic SC","Amethysta","Amiko","Amiri","Amita","Anaheim","Andada","Andika","Angkor","Annie Use Your Telescope","Anonymous Pro","Antic","Antic Didone","Antic Slab","Anton","Arapey","Arbutus","Arbutus Slab","Architects Daughter","Archivo","Archivo Black","Archivo Narrow","Aref Ruqaa","Arima Madurai","Arimo","Arizonia","Armata","Arsenal","Artifika","Arvo","Arya","Asap","Asap Condensed","Asar","Asset","Assistant","Astloch","Asul","Athiti","Atma","Atomic Age","Aubrey","Audiowide","Autour One","Average","Average Sans","Averia Gruesa Libre","Averia Libre","Averia Sans Libre","Averia Serif Libre","B612","B612 Mono","Bad Script","Bahiana","Bahianita","Bai Jamjuree","Baloo","Baloo Bhai","Baloo Bhaijaan","Baloo Bhaina","Baloo Chettan","Baloo Da","Baloo Paaji","Baloo Tamma","Baloo Tammudu","Baloo Thambi","Balthazar","Bangers","Barlow","Barlow Condensed","Barlow Semi Condensed","Barriecito","Barrio","Basic","Battambang","Baumans","Bayon","Be Vietnam","Belgrano","Bellefair","Belleza","BenchNine","Bentham","Berkshire Swash","Beth Ellen","Bevan","Big Shoulders Display","Big Shoulders Text","Bigelow Rules","Bigshot One","Bilbo","Bilbo Swash Caps","BioRhyme","BioRhyme Expanded","Biryani","Bitter","Black And White Picture","Black Han Sans","Black Ops One","Blinker","Bokor","Bonbon","Boogaloo","Bowlby One","Bowlby One SC","Brawler","Bree Serif","Bubblegum Sans","Bubbler One","Buda","Buenard","Bungee","Bungee Hairline","Bungee Inline","Bungee Outline","Bungee Shade","Butcherman","Butterfly Kids","Cabin","Cabin Condensed","Cabin Sketch","Caesar Dressing","Cagliostro","Cairo","Calligraffitti","Cambay","Cambo","Candal","Cantarell","Cantata One","Cantora One","Capriola","Cardo","Carme","Carrois Gothic","Carrois Gothic SC","Carter One","Catamaran","Caudex","Caveat","Caveat Brush","Cedarville Cursive","Ceviche One","Chakra Petch","Changa","Changa One","Chango","Charm","Charmonman","Chathura","Chau Philomene One","Chela One","Chelsea Market","Chenla","Cherry Cream Soda","Cherry Swash","Chewy","Chicle","Chilanka","Chivo","Chonburi","Cinzel","Cinzel Decorative","Clicker Script","Coda","Coda Caption","Codystar","Coiny","Combo","Comfortaa","Coming Soon","Concert One","Condiment","Content","Contrail One","Convergence","Cookie","Copse","Corben","Cormorant","Cormorant Garamond","Cormorant Infant","Cormorant SC","Cormorant Unicase","Cormorant Upright","Courgette","Cousine","Coustard","Covered By Your Grace","Crafty Girls","Creepster","Crete Round","Crimson Pro","Crimson Text","Croissant One","Crushed","Cuprum","Cute Font","Cutive","Cutive Mono","DM Sans","DM Serif Display","DM Serif Text","Damion","Dancing Script","Dangrek","Darker Grotesque","David Libre","Dawning of a New Day","Days One","Dekko","Delius","Delius Swash Caps","Delius Unicase","Della Respira","Denk One","Devonshire","Dhurjati","Didact Gothic","Diplomata","Diplomata SC","Do Hyeon","Dokdo","Domine","Donegal One","Doppio One","Dorsa","Dosis","Dr Sugiyama","Duru Sans","Dynalight","EB Garamond","Eagle Lake","East Sea Dokdo","Eater","Economica","Eczar","El Messiri","Electrolize","Elsie","Elsie Swash Caps","Emblema One","Emilys Candy","Encode Sans","Encode Sans Condensed","Encode Sans Expanded","Encode Sans Semi Condensed","Encode Sans Semi Expanded","Engagement","Englebert","Enriqueta","Erica One","Esteban","Euphoria Script","Ewert","Exo","Exo 2","Expletus Sans","Fahkwang","Fanwood Text","Farro","Farsan","Fascinate","Fascinate Inline","Faster One","Fasthand","Fauna One","Faustina","Federant","Federo","Felipa","Fenix","Finger Paint","Fira Code","Fira Mono","Fira Sans","Fira Sans Condensed","Fira Sans Extra Condensed","Fjalla One","Fjord One","Flamenco","Flavors","Fondamento","Fontdiner Swanky","Forum","Francois One","Frank Ruhl Libre","Freckle Face","Fredericka the Great","Fredoka One","Freehand","Fresca","Frijole","Fruktur","Fugaz One","GFS Didot","GFS Neohellenic","Gabriela","Gaegu","Gafata","Galada","Galdeano","Galindo","Gamja Flower","Gayathri","Gentium Basic","Gentium Book Basic","Geo","Geostar","Geostar Fill","Germania One","Gidugu","Gilda Display","Give You Glory","Glass Antiqua","Glegoo","Gloria Hallelujah","Goblin One","Gochi Hand","Gorditas","Gothic A1","Goudy Bookletter 1911","Graduate","Grand Hotel","Gravitas One","Great Vibes","Grenze","Griffy","Gruppo","Gudea","Gugi","Gurajada","Habibi","Halant","Hammersmith One","Hanalei","Hanalei Fill","Handlee","Hanuman","Happy Monkey","Harmattan","Headland One","Heebo","Henny Penny","Hepta Slab","Herr Von Muellerhoff","Hi Melody","Hind","Hind Guntur","Hind Madurai","Hind Siliguri","Hind Vadodara","Holtwood One SC","Homemade Apple","Homenaje","IBM Plex Mono","IBM Plex Sans","IBM Plex Sans Condensed","IBM Plex Serif","IM Fell DW Pica","IM Fell DW Pica SC","IM Fell Double Pica","IM Fell Double Pica SC","IM Fell English","IM Fell English SC","IM Fell French Canon","IM Fell French Canon SC","IM Fell Great Primer","IM Fell Great Primer SC","Iceberg","Iceland","Imprima","Inconsolata","Inder","Indie Flower","Inika","Inknut Antiqua","Irish Grover","Istok Web","Italiana","Italianno","Itim","Jacques Francois","Jacques Francois Shadow","Jaldi","Jim Nightshade","Jockey One","Jolly Lodger","Jomhuria","Jomolhari","Josefin Sans","Josefin Slab","Joti One","Jua","Judson","Julee","Julius Sans One","Junge","Jura","Just Another Hand","Just Me Again Down Here","K2D","Kadwa","Kalam","Kameron","Kanit","Kantumruy","Karla","Karma","Katibeh","Kaushan Script","Kavivanar","Kavoon","Kdam Thmor","Keania One","Kelly Slab","Kenia","Khand","Khmer","Khula","Kirang Haerang","Kite One","Knewave","KoHo","Kodchasan","Kosugi","Kosugi Maru","Kotta One","Koulen","Kranky","Kreon","Kristi","Krona One","Krub","Kumar One","Kumar One Outline","Kurale","La Belle Aurore","Lacquer","Laila","Lakki Reddy","Lalezar","Lancelot","Lateef","Lato","League Script","Leckerli One","Ledger","Lekton","Lemon","Lemonada","Lexend Deca","Lexend Exa","Lexend Giga","Lexend Mega","Lexend Peta","Lexend Tera","Lexend Zetta","Libre Barcode 128","Libre Barcode 128 Text","Libre Barcode 39","Libre Barcode 39 Extended","Libre Barcode 39 Extended Text","Libre Barcode 39 Text","Libre Baskerville","Libre Caslon Display","Libre Caslon Text","Libre Franklin","Life Savers","Lilita One","Lily Script One","Limelight","Linden Hill","Literata","Liu Jian Mao Cao","Livvic","Lobster","Lobster Two","Londrina Outline","Londrina Shadow","Londrina Sketch","Londrina Solid","Long Cang","Lora","Love Ya Like A Sister","Loved by the King","Lovers Quarrel","Luckiest Guy","Lusitana","Lustria","M PLUS 1p","M PLUS Rounded 1c","Ma Shan Zheng","Macondo","Macondo Swash Caps","Mada","Magra","Maiden Orange","Maitree","Major Mono Display","Mako","Mali","Mallanna","Mandali","Manjari","Mansalva","Manuale","Marcellus","Marcellus SC","Marck Script","Margarine","Markazi Text","Marko One","Marmelad","Martel","Martel Sans","Marvel","Mate","Mate SC","Maven Pro","McLaren","Meddon","MedievalSharp","Medula One","Meera Inimai","Megrim","Meie Script","Merienda","Merienda One","Merriweather","Merriweather Sans","Metal","Metal Mania","Metamorphous","Metrophobic","Michroma","Milonga","Miltonian","Miltonian Tattoo","Mina","Miniver","Miriam Libre","Mirza","Miss Fajardose","Mitr","Modak","Modern Antiqua","Mogra","Molengo","Molle","Monda","Monofett","Monoton","Monsieur La Doulaise","Montaga","Montez","Montserrat","Montserrat Alternates","Montserrat Subrayada","Moul","Moulpali","Mountains of Christmas","Mouse Memoirs","Mr Bedfort","Mr Dafoe","Mr De Haviland","Mrs Saint Delafield","Mrs Sheppards","Mukta","Mukta Mahee","Mukta Malar","Mukta Vaani","Muli","Mystery Quest","NTR","Nanum Brush Script","Nanum Gothic","Nanum Gothic Coding","Nanum Myeongjo","Nanum Pen Script","Neucha","Neuton","New Rocker","News Cycle","Niconne","Niramit","Nixie One","Nobile","Nokora","Norican","Nosifer","Notable","Nothing You Could Do","Noticia Text","Noto Sans","Noto Sans HK","Noto Sans JP","Noto Sans KR","Noto Sans SC","Noto Sans TC","Noto Serif","Noto Serif JP","Noto Serif KR","Noto Serif SC","Noto Serif TC","Nova Cut","Nova Flat","Nova Mono","Nova Oval","Nova Round","Nova Script","Nova Slim","Nova Square","Numans","Nunito","Nunito Sans","Odor Mean Chey","Offside","Old Standard TT","Oldenburg","Oleo Script","Oleo Script Swash Caps","Open Sans","Open Sans Condensed","Oranienbaum","Orbitron","Oregano","Orienta","Original Surfer","Oswald","Over the Rainbow","Overlock","Overlock SC","Overpass","Overpass Mono","Ovo","Oxygen","Oxygen Mono","PT Mono","PT Sans","PT Sans Caption","PT Sans Narrow","PT Serif","PT Serif Caption","Pacifico","Padauk","Palanquin","Palanquin Dark","Pangolin","Paprika","Parisienne","Passero One","Passion One","Pathway Gothic One","Patrick Hand","Patrick Hand SC","Pattaya","Patua One","Pavanam","Paytone One","Peddana","Peralta","Permanent Marker","Petit Formal Script","Petrona","Philosopher","Piedra","Pinyon Script","Pirata One","Plaster","Play","Playball","Playfair Display","Playfair Display SC","Podkova","Poiret One","Poller One","Poly","Pompiere","Pontano Sans","Poor Story","Poppins","Port Lligat Sans","Port Lligat Slab","Pragati Narrow","Prata","Preahvihear","Press Start 2P","Pridi","Princess Sofia","Prociono","Prompt","Prosto One","Proza Libre","Puritan","Purple Purse","Quando","Quantico","Quattrocento","Quattrocento Sans","Questrial","Quicksand","Quintessential","Qwigley","Racing Sans One","Radley","Rajdhani","Rakkas","Raleway","Raleway Dots","Ramabhadra","Ramaraja","Rambla","Rammetto One","Ranchers","Rancho","Ranga","Rasa","Rationale","Ravi Prakash","Red Hat Display","Red Hat Text","Redressed","Reem Kufi","Reenie Beanie","Revalia","Rhodium Libre","Ribeye","Ribeye Marrow","Righteous","Risque","Roboto","Roboto Condensed","Roboto Mono","Roboto Slab","Rochester","Rock Salt","Rokkitt","Romanesco","Ropa Sans","Rosario","Rosarivo","Rouge Script","Rozha One","Rubik","Rubik Mono One","Ruda","Rufina","Ruge Boogie","Ruluko","Rum Raisin","Ruslan Display","Russo One","Ruthie","Rye","Sacramento","Sahitya","Sail","Saira","Saira Condensed","Saira Extra Condensed","Saira Semi Condensed","Saira Stencil One","Salsa","Sanchez","Sancreek","Sansita","Sarabun","Sarala","Sarina","Sarpanch","Satisfy","Sawarabi Gothic","Sawarabi Mincho","Scada","Scheherazade","Schoolbell","Scope One","Seaweed Script","Secular One","Sedgwick Ave","Sedgwick Ave Display","Sevillana","Seymour One","Shadows Into Light","Shadows Into Light Two","Shanti","Share","Share Tech","Share Tech Mono","Shojumaru","Short Stack","Shrikhand","Siemreap","Sigmar One","Signika","Signika Negative","Simonetta","Single Day","Sintony","Sirin Stencil","Six Caps","Skranji","Slabo 13px","Slabo 27px","Slackey","Smokum","Smythe","Sniglet","Snippet","Snowburst One","Sofadi One","Sofia","Song Myung","Sonsie One","Sorts Mill Goudy","Source Code Pro","Source Sans Pro","Source Serif Pro","Space Mono","Special Elite","Spectral","Spectral SC","Spicy Rice","Spinnaker","Spirax","Squada One","Sree Krushnadevaraya","Sriracha","Srisakdi","Staatliches","Stalemate","Stalinist One","Stardos Stencil","Stint Ultra Condensed","Stint Ultra Expanded","Stoke","Strait","Stylish","Sue Ellen Francisco","Suez One","Sumana","Sunflower","Sunshiney","Supermercado One","Sura","Suranna","Suravaram","Suwannaphum","Swanky and Moo Moo","Syncopate","Tajawal","Tangerine","Taprom","Tauri","Taviraj","Teko","Telex","Tenali Ramakrishna","Tenor Sans","Text Me One","Thasadith","The Girl Next Door","Tienne","Tillana","Timmana","Tinos","Titan One","Titillium Web","Trade Winds","Trirong","Trocchi","Trochut","Trykker","Tulpen One","Turret Road","Ubuntu","Ubuntu Condensed","Ubuntu Mono","Ultra","Uncial Antiqua","Underdog","Unica One","UnifrakturCook","UnifrakturMaguntia","Unkempt","Unlock","Unna","VT323","Vampiro One","Varela","Varela Round","Vast Shadow","Vesper Libre","Vibes","Vibur","Vidaloka","Viga","Voces","Volkhov","Vollkorn","Vollkorn SC","Voltaire","Waiting for the Sunrise","Wallpoet","Walter Turncoat","Warnes","Wellfleet","Wendy One","Wire One","Work Sans","Yanone Kaffeesatz","Yantramanav","Yatra One","Yellowtail","Yeon Sung","Yeseva One","Yesteryear","Yrsa","ZCOOL KuaiLe","ZCOOL QingKe HuangYou","ZCOOL XiaoWei","Zeyada","Zhi Mang Xing","Zilla Slab","Zilla Slab Highlight"],"name":"icff","in":"query","required":false},{"type":"string","description":"Default font style for all text","x-meta":{"link":"https://documentation.image-charts.com/reference/chart-font/","category":"ENTERPRISE","implementation":{"status":"COMPLETE"},"examples":["normal","italic"]},"enum":["normal","italic"],"name":"icfs","in":"query","required":false},{"type":"string","description":"localization (ISO 639-1)","x-meta":{"link":"","category":"ENTERPRISE","implementation":{"status":"COMPLETE"},"examples":["en"]},"enum":["fr","de","en"],"name":"iclocale","in":"query"},{"type":"boolean","description":"(Private) Force to display the watermark EVEN IF the chart was signed with an enterprise account","x-meta":{"link":"https://documentation.image-charts.com/enterprise/","category":"ENTERPRISE","implementation":{"status":"PRIVATE"},"examples":["0","1"]},"default":false,"enum":["0","1",true,false],"name":"icwt","in":"query","required":false},{"type":"string","description":"retina mode","x-meta":{"link":"https://documentation.image-charts.com/reference/retina/","category":"ENTERPRISE","implementation":{"status":"COMPLETE"},"examples":[1],"note":"Retina is a marketing term coined by Apple that refers to devices and monitors that have a resolution and pixel density so high — roughly 300 or more pixels per inch – that a person is unable to discern the individual pixels at a normal viewing distance.\n In order to generate beautiful charts for these Retina displays, Image-Charts supports a retina mode that can be activated through the icretina=1 parameter"},"enum":["0","1"],"name":"icretina","in":"query","required":false},{"type":"string","description":"Background color for QR Codes","x-meta":{"link":"https://documentation.image-charts.com/qr-codes/#background-color","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["FFFFFF"],"note":"Background color for QR Codes"},"default":"FFFFFF","pattern":"^[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?$","name":"icqrb","in":"query","required":false},{"type":"string","description":"Foreground color for QR Codes","x-meta":{"link":"https://documentation.image-charts.com/qr-codes/#foreground-color","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["000000"],"note":"Foreground color for QR Codes"},"default":"000000","pattern":"^[0-9A-Fa-f]{6}(?:[0-9A-Fa-f]{2})?$","name":"icqrf","in":"query","required":false}],"consumes":["application/x-www-form-urlencoded"],"produces":["application/png","application/gif","image/svg+xml"],"tags":["chart"],"responses":{"default":{"schema":{"type":"string"},"description":"Successful"}}}},"/chart.js/2.8.0":{"get":{"summary":"Chart.js as image API","operationId":"getChartjs280","description":"Image-charts","parameters":[{"type":"string","description":"Javascript/JSON definition of the chart. Use a Chart.js configuration object.","x-meta":{"format":"json","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["{type:'bar',data:{labels:['Q1','Q2','Q3','Q4'],datasets:[{label:'Users',data:[50,60,70,180]},{label:'Revenue',data:[100,200,300,400]}]}}"],"note":"Javascript/JSON definition of the chart. Use a Chart.js configuration object."},"name":"c","in":"query"},{"type":"string","description":"Javascript/JSON definition of the chart. Use a Chart.js configuration object.","x-meta":{"format":"json","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["{type:'bar',data:{labels:['Q1','Q2','Q3','Q4'],datasets:[{label:'Users',data:[50,60,70,180]},{label:'Revenue',data:[100,200,300,400]}]}}"],"note":"Javascript/JSON definition of the chart. Use a Chart.js configuration object."},"name":"chart","in":"query"},{"type":"integer","description":"Width of the chart","x-meta":{"category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["400"],"note":"Width of the chart"},"default":500,"minimum":1,"name":"width","in":"query","required":false},{"type":"integer","description":"Height of the chart","x-meta":{"category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["300"],"note":"Height of the chart"},"default":300,"minimum":1,"name":"height","in":"query","required":false},{"type":"string","description":"Background of the chart canvas. Accepts rgb (rgb(255,255,120)), colors (red), and url-encoded hex values (%23ff00ff). Abbreviated as \"bkg\"","x-meta":{"format":"color","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["black","rgb(255,255,120)","%23ff00ff"],"note":"Background of the chart canvas. Accepts rgb (rgb(255,255,120)), colors (red), and url-encoded hex values (%23ff00ff). Abbreviated as \"bkg\""},"name":"backgroundColor","in":"query","required":false},{"type":"string","description":"Background of the chart canvas. Accepts rgb (rgb(255,255,120)), colors (red), and url-encoded hex values (%23ff00ff). Abbreviated as \"bkg\"","x-meta":{"format":"color","category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["black","rgb(255,255,120)","%23ff00ff"],"note":"Background of the chart canvas. Accepts rgb (rgb(255,255,120)), colors (red), and url-encoded hex values (%23ff00ff). Abbreviated as \"bkg\""},"name":"bkg","in":"query","required":false},{"type":"string","description":"Encoding of your \"chart\" parameter. Accepted values are url and base64.","x-meta":{"category":"COMMON","implementation":{"status":"COMPLETE"},"examples":["url","base64"],"note":"Encoding of your \"chart\" parameter. Accepted values are url and base64."},"default":"url","enum":["url","base64"],"name":"encoding","in":"query","required":false},{"type":"string","description":"image-charts enterprise `account_id`","x-meta":{"link":"https://documentation.image-charts.com/enterprise/","category":"ENTERPRISE","implementation":{"status":"COMPLETE"},"examples":["accountId"]},"name":"icac","in":"query","required":false},{"type":"string","description":"HMAC-SHA256 signature required to activate paid features","x-meta":{"link":"https://documentation.image-charts.com/enterprise/","category":"ENTERPRISE","implementation":{"status":"COMPLETE"},"examples":["0785cf22a0381c2e0239e27c126de4181f501d117c2c81745611e9db928b0376"]},"name":"ichm","in":"query","required":false},{"type":"string","description":"retina mode","x-meta":{"link":"https://documentation.image-charts.com/reference/retina/","category":"ENTERPRISE","implementation":{"status":"COMPLETE"},"examples":[1],"note":"Retina is a marketing term coined by Apple that refers to devices and monitors that have a resolution and pixel density so high — roughly 300 or more pixels per inch – that a person is unable to discern the individual pixels at a normal viewing distance.\n In order to generate beautiful charts for these Retina displays, Image-Charts supports a retina mode that can be activated through the icretina=1 parameter"},"enum":["0","1"],"name":"icretina","in":"query","required":false}],"consumes":["application/x-www-form-urlencoded"],"produces":["application/png","application/gif","image/svg+xml"],"tags":["chart.js"],"responses":{"default":{"schema":{"type":"string"},"description":"Successful"}}}}},"definitions":{}}
2 |
--------------------------------------------------------------------------------
/scripts/templates/README.md.tmpl:
--------------------------------------------------------------------------------
1 | ## mjml-chart for [mjml](https://mjml.io/)
2 |
3 | [](https://circleci.com/gh/image-charts/mjml-chart/) [](https://coveralls.io/github/image-charts/mjml-chart) [](https://david-dm.org/image-charts/mjml-chart) [](http://badge.fury.io/js/mjml-chart) [](https://www.npmjs.com/package/mjml-chart) 
4 |
5 | Displays charts as images in your email. Note that the chart can be animated (gif) when the `chan` attribute is specified.
6 |
7 | #### 🎩 Usage
8 |
9 |
10 | ```xml
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | ```
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | ##### 🚀 Setup
29 |
30 |
31 | - `mjml-chart` v5.x.x is built for *MJML4* ([Community components](https://mjml.io/documentation/#community-components)):
32 |
33 | ```bash
34 | npm install mjml-chart@5 --save
35 |
36 | cat < .mjmlconfig
37 | {
38 | "packages": [
39 | "mjml-chart/lib/index.js"
40 | ]
41 | }
42 | EOF
43 | ```
44 |
45 | - `mjml-chart` v4.x.x is built for *MJML3*:
46 |
47 | ```bash
48 | npm install mjml-chart@4 --save
49 | ```
50 |
51 |
52 | ##### 🚧 Documentation
53 |
54 |
55 | {mdChartAttributesTable}
56 |
57 |
58 | Since `mjml-chart` is a wrapper for `mjml-image`, `mjml-image` attributes are also available:
59 |
60 | {mdImageAttributesTable}
61 |
62 |
63 | Note:
64 | - `src` attribute is not customizable, it's generated by `mjml-chart`
65 | - `width` and `height` are automatically generated by `mjml-chart` based on the `chs` attribute
66 |
67 | ## Troubleshooting
68 |
69 | ### Receiving Error: `Error when registering custom component`
70 |
71 | If this warning appears in your log when you use mjml-chart, check your `mjml` version and be sure you have the last
72 |
73 |
--------------------------------------------------------------------------------
/scripts/templates/component.js.tmpl:
--------------------------------------------------------------------------------
1 | /**
2 | * GENERATED-CODE
3 | *
4 | * Beware don't edit `index.js` it was automatically generated with `npm run update`, edit `scripts/templates/component.js.tmpl` instead.
5 | */
6 |
7 | import {
8 | BodyComponent
9 | } from 'mjml-core'
10 | import { registerDependencies } from 'mjml-validator'
11 |
12 | import qs from 'querystring'
13 | import memoize from 'lodash/memoize'
14 | import toNumber from 'lodash/toNumber'
15 | import includes from 'lodash/includes'
16 |
17 | registerDependencies({
18 | // Tell the validator which tags are allowed as our component's parent
19 | 'mj-hero': ['mj-chart'],
20 | 'mj-column': ['mj-chart'],
21 | // Tell the validator which tags are allowed as our component's children
22 | 'mj-chart': []
23 | })
24 |
25 | const imageChartsParameters = /*imageChartsParameters*/;
26 |
27 | const strToRegExp = memoize((regexp) => {
28 | return new RegExp(regexp, 'i');
29 | })
30 |
31 | function buildURL (getAttribute) {
32 |
33 | function buildQuery () {
34 | return imageChartsParameters.reduce((query, attr) => {
35 | const val = getAttribute(attr.name);
36 |
37 | if(attr.required && val === undefined){
38 | throw new Error(`${attr.name} is required. Examples values ${attr.examples.join(', ')}`);
39 | }
40 |
41 | if (val === undefined) {
42 | return query;
43 | }
44 |
45 | if (attr.pattern && !strToRegExp(attr.pattern).test(val)) {
46 | throw new Error(`"${val}" is an invalid value for ${attr.name}. Examples: ${attr.examples.join(', ')}`);
47 | }
48 |
49 | if (attr.enum && !includes(attr.enum, val)) {
50 | throw new Error(`"${val}" is not an valid value for ${attr.name}. Valid values are: ${JSON.stringify(attr.enum)}`);
51 | }
52 |
53 | query[attr.name] = val;
54 | return query;
55 | }, {});
56 | }
57 |
58 | return `/*documentation_url*/?${qs.stringify(buildQuery())}`;
59 | }
60 |
61 | export default class MjChart extends BodyComponent {
62 | // Tell the parser that our component won't contain other mjml tags
63 | static endingTag = true
64 |
65 | // Tells the validator which attributes are allowed for mj-chart
66 | static allowedAttributes = /*allowedAttributes*/;
67 |
68 | // What the name suggests. Fallback value for this.getAttribute('attribute-name').
69 | static defaultAttributes = /*defaultAttributes*/;
70 |
71 | // Tells the validator which attributes are allowed for mj-chart
72 | static imageAttributes = /*imageAttributes*/;
73 |
74 | /*
75 | Render is the only required function in a component.
76 | It must return an html string.
77 | */
78 | render () {
79 | const getAttribute = this.getAttribute.bind(this);
80 | const [width, height] = getAttribute('chs').split('x').map(toNumber);
81 |
82 | const attributes = MjChart.imageAttributes.reduce((attrs, {name}) => {
83 | attrs[name] = getAttribute(name);
84 | return attrs;
85 | }, {
86 | src: buildURL(getAttribute),
87 | width: `${width}px`
88 | });
89 |
90 | return this.renderMJML(``);
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/test/mjml-chart.test.js:
--------------------------------------------------------------------------------
1 | /**
2 | *
3 | * mjml-chart test suite
4 | *
5 | * Compile and run the tests:
6 | * npm test
7 | *
8 | */
9 | import { expect } from 'chai';
10 | import mjml2html from 'mjml';
11 | import { registerComponent } from 'mjml-core';
12 | import ChartComponent from '../src';
13 |
14 | const mjmlConvert = (mjml) => {
15 | const conversion = mjml2html(mjml)
16 | const errors = conversion.errors
17 |
18 | if (errors.length > 0) {
19 | return errors
20 | }
21 |
22 | return conversion.html
23 | }
24 |
25 |
26 | describe('mjml-chart', () => {
27 | before(() => {
28 | registerComponent(ChartComponent);
29 | });
30 |
31 | describe('compile-time error handling', () => {
32 | it('should crash at compile time in case of missing (cht) required attributes', () =>
33 | expect(() => mjmlConvert(`
34 |
35 |
36 |
41 |
42 | `)
43 | ).to.throw('cht is required'));
44 |
45 | it('should crash at compile time in case of bad formatted attributes', () =>
46 | expect(() => mjmlConvert(`
47 |
48 |
49 |
55 |
56 | `)
57 | ).to.throw(
58 | '"aa" is not an valid value for cht. Valid values are: ["bvs","bvg","bhs","bhg","bvo","p","p3","pc","pd","ls","lc","lxy","ls:nda","lc:nda","lxy:nda","pa","bb","gv","gv:dot","gv:neato","gv:circo","gv:fdp","gv:osage","gv:twopi","qr","r"]'
59 | ));
60 |
61 | it('should crash at compile time in case of bad attribute values', () =>
62 | expect(() => mjmlConvert(`
63 |
64 |
65 |
71 |
72 | `)
73 | ).to.throw(
74 | '"INVALID_CHD_VALUE" is an invalid value for chd. Examples: a:-100,200.5,75.55,110, t:10,20,30|15,25,35, s:BTb19_,Mn5tzb, e:BaPoqM2s,-A__RMD6'
75 | ));
76 | });
77 |
78 | describe('chart generation', () => {
79 | it('should render a mjml chart', () => {
80 | expect(
81 | mjmlConvert(`
82 |
83 |
84 |
85 |
86 |
92 |
93 |
94 |
95 | `)
96 | ).to.contain(
97 | '
'
98 | );
99 | });
100 |
101 | it('should render mjml-image attributes', () => {
102 | expect(mjmlConvert(`
103 |
104 |
105 |
106 |
107 |
115 |
116 |
117 |
118 | `))
119 | .to.contain(`align="left"`)
120 | .contain(
121 | '
'
122 | );
123 | });
124 |
125 | it('should render mjml-image with ENTERPRISE_PLUS plan', () => {
126 | expect(mjmlConvert(`
127 |
128 |
129 |
130 |
131 |
140 |
141 |
142 |
143 | `))
144 | .to.contain(
145 | '
'
146 | );
147 | });
148 |
149 | it('should crash if mj-chart parent isn\'t mj-column', () => {
150 | const errors = mjmlConvert(`
151 |
152 |
153 |
159 |
160 | `)
161 |
162 | expect(errors)
163 | .to.be.an('array')
164 | .have.lengthOf(1)
165 | expect(errors[0]).to.have.property('message', 'mj-chart cannot be used inside mj-body, only inside: mj-attributes, mj-column, mj-hero')
166 | expect(errors[0]).to.have.property('tagName', 'mj-chart')
167 | })
168 | });
169 | });
170 |
--------------------------------------------------------------------------------