diff --git a/.gitignore b/.gitignore index b221f92f2..753cd31a9 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,5 @@ $RECYCLE.BIN/ Thumbs.db UserInterfaceState.xcuserstate .env + +.deckgo diff --git a/docs/.editorconfig b/docs/.editorconfig new file mode 100644 index 000000000..f1cc3ad32 --- /dev/null +++ b/docs/.editorconfig @@ -0,0 +1,15 @@ +# http://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md new file mode 100644 index 000000000..c02108d4a --- /dev/null +++ b/docs/CHANGELOG.md @@ -0,0 +1,19 @@ + +# [1.0.0-alpha.3](https://github.com/deckgo/deckdeckgo-docs/compare/v1.0.0-alpha.2...v1.0.0-alpha.3) (2019-02-17) + +### Features + +* add slot `actions` ([b124614](https://github.com/deckgo/deckdeckgo-docs/commit/b12461406331aa50fb2612c096123bd70fedaa71)) +* slot `backgorund` is now cloned ([e7c8b15](https://github.com/deckgo/deckdeckgo-docs/commit/e7c8b150596c30ac7005a1695fc877eb3fba691a)) + + +# [1.0.0-alpha.2](https://github.com/deckgo/deckdeckgo-docs/compare/v1.0.0-alpha.1...v1.0.0-alpha.2) (2019-02-14) + +### Features + +* add Nodejs prerequisite ([#7](https://github.com/deckgo/deckdeckgo-docs/issues/7)) +* add chapter "publish" ([#6](https://github.com/deckgo/deckdeckgo-docs/issues/6)) +* improve chapter "theming" ([#5](https://github.com/deckgo/deckdeckgo-docs/issues/5)) +* add chapter "running" ([#4](https://github.com/deckgo/deckdeckgo-docs/issues/4)) +* add chapter "remote control" ([#3](https://github.com/deckgo/deckdeckgo-docs/issues/3)) +* add chapter "open source and repos" ([#2](https://github.com/deckgo/deckdeckgo-docs/issues/2)) diff --git a/docs/LICENSE b/docs/LICENSE new file mode 100644 index 000000000..0a24144c5 --- /dev/null +++ b/docs/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 DeckDeckGo team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..dea285a0d --- /dev/null +++ b/docs/README.md @@ -0,0 +1,27 @@ +# DeckDeckGo - Docs + +This project is the documentation of [DeckDeckGo]. + +The documentation is written in markdown and developed with the [Ionic PWA Toolkit](https://ionicframework.com/pwa/toolkit). + +## Table of contents + +- [Getting Started](#getting-started) +- [License](#license) + +## Getting Started + +To develop and run this documentation locally, proceed as following: + +``` +git clone https://github.com/deckgo/deckdeckgo +cd deckdeckgo/docs +npm install +npm run start +``` + +## License + +MIT © DeckDeckGo team + +[DeckDeckGo]: https://deckdeckgo.com diff --git a/docs/docs/components/app-components-charts/app-components-charts.md b/docs/docs/components/app-components-charts/app-components-charts.md new file mode 100644 index 000000000..7fabc42d7 --- /dev/null +++ b/docs/docs/components/app-components-charts/app-components-charts.md @@ -0,0 +1,385 @@ +# Charts + +The "Charts" component is an extra component which let you draw charts easily. + +To create and draw the charts, this project is using [D3js](https://d3js.org). + +## Table of contents + +- [Showcase](#app-components-chart-showcase) + - [Pie](#app-components-chart-pie) + - [Donut](#app-components-chart-donut) + - [Compare two graphs](#app-components-chart-compare-two-graphs) + - [Line and area](#app-components-chart-line-and-area) + - [Compare two lines and smoothing effect](#app-components-chart-compare-two-lines-and-smoothing-effect) + - [Compare two lines and display a grid](#app-components-chart-compare-two-lines-and-display-a-grid) + - [Bar](#app-components-chart-bar) + - [Compare multiple bars](#app-components-chart-compare-multiple-bars) +- [Getting started](#app-components-chart-getting-started) + - [Using DeckDeckGo charts from a CDN](#app-components-chart-using-deckdeckgo-charts-from-a-cdn) + - [Install DeckDeckGo charts from NPM](#app-components-chart-install-deckdeckgo-charts-from-npm) + - [Framework integration](#app-components-chart-framework-integration) +- [Usage](#app-components-chart-usage) + - [Pie usage](#app-components-chart-pie-usage) + - [CSV](#app-components-chart-csv) + - [Single column](#app-components-chart-single-column) + - [Two columns](#app-components-chart-two-columns) + - [Properties](#app-components-chart-properties) + - [Styling](#app-components-chart-styling) + - [Methods](#app-components-chart-methods) + - [Examples](#app-components-chart-examples) + - [Line usage](#app-components-chart-line-usage) + - [CSV](#app-components-chart-csv-1) + - [Two columns](#app-components-chart-two-columns-1) + - [Three columns](#app-components-chart-three-columns) + - [Properties](#app-components-chart-properties-1) + - [Styling](#app-components-chart-styling-1) + - [Methods](#app-components-chart-methods-1) + - [Examples](#app-components-chart-examples-1) + - [Bar usage](#app-components-chart-bar-usage) + - [CSV](#app-components-chart-csv-2) + - [Multiple columns](#app-components-chart-multiple-columns) + - [Properties](#app-components-chart-properties-2) + - [Styling](#app-components-chart-styling-2) + - [Methods](#app-components-chart-methods-2) + - [Examples](#app-components-chart-examples-2) + +## Showcase + +The following examples are the one provided in the [src/index.html](https://github.com/deckgo/deckdeckgo-charts/tree/master/src/index.html) of this component. If you would like to run them locally, proceed as follow: + +``` +git clone https://github.com/deckgo/deckdeckgo-charts +cd deckdeckgo-charts +npm install +npm run start +``` + +### Pie + + + +### Donut + + + +### Compare two graphs + + + +### Line and area + + + +### Compare two lines and smoothing effect + +
+ +
+ +### Compare two lines and display a grid + +
+ +
+ + +### Bar + +
+ +
+ +### Compare multiple bars + +
+ +
+ +## Getting started + +To create easily your PWA presentation and to enjoy all the options, I suggest you to create your slides using the CLI as described in the [Getting started chapter](/docs/introduction). + +Doing so you will use the [DeckDeckGo] starter kit which already includes this Web Component. + +However, if you are looking to use this Web Component as a standalone component, to add a charts to your web applications, it could be use directly in your project from a CDN, using a simple script include, or could be installed from [npm](https://www.npmjs.com/package/deckdeckgo-charts). + +### Using DeckDeckGo charts from a CDN + +It's recommended to use [unpkg](https://unpkg.com/) to use the [DeckDeckGo] charts from a CDN. To do so, add the following include script in the main HTML file of your project: + +``` + +``` +### Install DeckDeckGo charts from NPM + +Install [DeckDeckGo] charts in your project from [npm](https://www.npmjs.com/package/deckdeckgo-charts) using the following command: + +```bash +npm install deckdeckgo-charts +``` + +### Framework integration + +The [Stencil documentation](https://stenciljs.com/docs/overview) provide examples of framework integration for [Angular](https://stenciljs.com/docs/angular), [React](https://stenciljs.com/docs/react), [Vue](https://stenciljs.com/docs/vue) and [Ember](https://stenciljs.com/docs/ember). + +## Usage + +The main idea behind the [DeckDeckGo] charts is to be able to drop a **csv** file, provide it to the component and let it do the job respectively draw the chart. + +### Pie usage + +The `` Web Component draw a Pie chart. + +#### CSV + +The csv file should contains one or two columns. The values could be provided as `number` or `percent`. + +##### Single column + +If a single column is used, it should contains the values. + +``` +60 +20 +20 +``` + +##### Two columns + +If two columns are provided, the first column should contains the description of the value. + +``` +Wind;53.13% +Solar:1.96% +Geothermal;7.52% +Landfill Gas;15.67% +Biomass;14.79% +Qualified Hydropower;6.93% +``` + +#### Properties + +The `` expose the following properties: + +| Property | Attribute | Mandatory | Description | Type | Default | +| ------------- | -------------- | --------- |----------- | ----------------------- | ----------- | +| `src` | `src` | X | The path to the source file of the data | `string` | | +| `width` | `width` | X | The width of the chart | `number` | | +| `height` | `height` | X | The height of the chart | `number` | | +| `innerRadius` | `inner-radius` | | To plot a `donut` instead of a `pie`, provide an inner radius | `number` | `0` | +| `range` | `range` | | A list of custom colors which should be to draw the chart | `string[]` | | +| `separator` | `separator` | | The line separator use in your csv file | `string` | `';'` | + +#### Styling + +The `` could be styled using the following CSS4 variables: + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --deckgo-chart-text-color | | The color of the labels | +| --deckgo-chart-text-display | | The display property of the labels | +| --deckgo-chart-path-stroke | | The stroke property of the pie, in case you would like to display a line between the slices | + +#### Methods + +The `` expose the following method in case you would like to redraw your chart, for example on resize of the window: + +``` +draw() => Promise +``` + +#### Examples + +You could find other examples of pie charts in the [src/index.html](https://github.com/deckgo/deckdeckgo-charts/tree/master/src/index.html) of the project. + +``` + +``` + +### Line usage + +The `` Web Component draw a line chart. + +#### CSV + +The csv file should contains two or three columns. + +The first column contains the values for the `x` axis. These should be provided as `date` or `number`. + +The second and third columns contains the values for the `y` axis. These should be provided as `number`. + +##### Two columns + +With dates as `x` axis: + +``` +01.01.2018;5 +01.03.2018;10 +01.06.2018;8 +``` + +With numbers as `x` axis: + +``` +1;5 +2;10 +3;8 +``` + +##### Three columns + +The third columns is optional, it could be use in case you would like to plot two charts on the same graph. + +With dates as `x` axis: + +``` +01.01.2018;5;4 +01.03.2018;10;3 +01.06.2018;8;19 +``` + +With numbers as `x` axis: + +``` +1;5;7 +2;10;13 +3;8;5 +``` + +#### Properties + +The `` expose the following properties: + +| Property | Attribute | Mandatory | Description | Type | Default | +| -------------- | --------------- | --------- | ----------- | --------- | ----------------------------------- | +| `src` | `src` | X | The path to the source file of the data | `string` | | +| `width` | `width` | X | The width of the chart | `number` | | +| `height` | `height` | X | The height of the chart | `number` | | +| `marginBottom` | `margin-bottom` | | The margin bottom of the chart in pixel | `number` | `32` | +| `marginLeft` | `margin-left` | | The margin left of the chart in pixel | `number` | `32` | +| `marginRight` | `margin-right` | | The margin right of the chart in pixel | `number` | `32` | +| `marginTop` | `margin-top` | | The margin top of the chart in pixel | `number` | `32` | +| `datePattern` | `date-pattern` | | In case the `x` are made of dates, the pattern to be use to parse the dates. Have a look to [date-fns](https://date-fns.org/v2.0.0-alpha.26/docs/parse) for a list of the supported format. | `string` | `'yyyy-MM-dd'` | +| `yAxisDomain` | `y-axis-domain` | | Should the `y` axis plot the values from `0` to `max` or be extended (use `extent`) to cover all values | `string` | `max` | +| `smooth` | `smooth` | | Draw a smooth line or a line with edges | `boolean` | `true` | +| `area` | `area` | | Draw the area or just a line | `boolean` | `true` | +| `ticks` | `ticks` | | Specify the ticks of the axis | `number` | `` | +| `grid` | `grid` | | Draw a grid behin the graph | `boolean` | `false` | +| `separator` | `separator` | | The line separator use in your csv file | `string` | `';'` | + +#### Styling + +The `` could be styled using the following CSS4 variables: + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --deckgo-chart-axis-color | black | The color of the axis | +| --deckgo-chart-text-color | | The color of the labels | +| --deckgo-chart-text-display | | The display property of the labels | +| --deckgo-chart-fill-color | #3880ff | The fill color of the area of the main chart | +| --deckgo-chart-fill-opacity | | The opacity of the area of the main chart | +| --deckgo-chart-stroke | | The stroke of the area of the main chart | +| --deckgo-chart-stroke-width | | The stroke width of the area of the main chart | +| --deckgo-chart-compare-fill-color | #0cd1e8 | The fill color of the area of the chart to compare | +| --deckgo-chart-compare-fill-opacity | 0.7 | The opacity of the area of the chart to compare | +| --deckgo-chart-compare-stroke | | The stroke of the area of the chart to compare | +| --deckgo-chart-compare-stroke-width | | The stroke width of the area of the chart to compare | +| --deckgo-chart-grid-stroke | #989aa2 | The stroke of the grid | +| --deckgo-chart-grid-stroke-opacity | 0.7 | The stroke opacity of the grid | + +#### Methods + +The `` expose the following method in case you would like to redraw your chart, for example on resize of the window: + +``` +draw() => Promise +``` + +#### Examples + +You could find other examples of line charts in the [src/index.html](https://github.com/deckgo/deckdeckgo-charts/tree/master/src/index.html) of the project. + +``` + +``` + +### Bar usage + +The `` Web Component draw a Bar chart. + +#### CSV + +The csv file should contains at lest two columns. The values could be provided as `number` or `percent`. + +##### Multiple columns + +The first column should contains the labels or groups used for the X axis. The other columns are the values use for the Y axis. + +``` +Group A;5;0;10 +Group B;10;6;12 +Group C;8;14;8 +Group D;14;8;16 +Group E;18;4;5 +``` + +#### Properties + +The `` expose the following properties: + +| Property | Attribute | Mandatory | Description | Type | Default | +| -------------- | --------------- | --------- | ----------- | --------- | ----------------------------------- | +| `src` | `src` | X | The path to the source file of the data | `string` | | +| `width` | `width` | X | The width of the chart | `number` | | +| `height` | `height` | X | The height of the chart | `number` | | +| `marginBottom` | `margin-bottom` | | The margin bottom of the chart in pixel | `number` | `32` | +| `marginLeft` | `margin-left` | | The margin left of the chart in pixel | `number` | `32` | +| `marginRight` | `margin-right` | | The margin right of the chart in pixel | `number` | `32` | +| `marginTop` | `margin-top` | | The margin top of the chart in pixel | `number` | `32` | +| `separator` | `separator` | | The line separator use in your csv file | `string` | `';'` | + +#### Styling + +The `` could be styled using the following CSS4 variables: + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --deckgo-chart-axis-color | black | The color of the axis | + +Furthermore, as the Bar chart could draw dynamically multiple bars, it will generate dynamically the following CSS4 variable for each series of data where `X` is an index between `1` and the number of bars. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --deckgo-chart-text-color | | The color of the labels | +| --deckgo-chart-text-display | | The display property of the labels | +| --deckgo-chart-fill-color-barX | | The fill color of the bar chart identified with index `X` | +| --deckgo-chart-fill-opacity-baxX | | The opacity of the bar chart identified with index `X` | +| --deckgo-chart-stroke-barX | | The stroke of the bar chart identified with index `X` | +| --deckgo-chart-stroke-width-barX | | The stroke width of the chart identified with index `X` | + +#### Methods + +The `` expose the following method in case you would like to redraw your chart, for example on resize of the window: + +``` +draw() => Promise +``` + +#### Examples + +You could find other examples of bar charts in the [src/index.html](https://github.com/deckgo/deckdeckgo-charts/tree/master/src/index.html) of the project. + +``` + + +``` + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/components/app-components-gif/app-components-gif.md b/docs/docs/components/app-components-gif/app-components-gif.md new file mode 100644 index 000000000..f8a4b61e0 --- /dev/null +++ b/docs/docs/components/app-components-gif/app-components-gif.md @@ -0,0 +1,65 @@ +# Gif + +The "Gif" component allows you to easily add a Gif, like those provided by [Giphy](https://giphy.com), in almost any slide of your presentation. + +## Table of contents + +- [Showcase](#app-components-gif-showcase) +- [Usage](#app-components-gif-usage) + - [Slots](#app-components-gif-slots) +- [Attributes](#app-components-gif-attributes) +- [Theming](#app-components-gif-theming) +- [Note](#app-components-gif-note) + +## Showcase + +
+ +

Hey

+

It's a cool gif

+
+
+ +## Usage + +The "Gif" slide's Web Component could be integrated using the tag ``. + +``` + +

Hey

+

It's a cool gif

+ +``` + +### Slots + +The slots `header` and `footer` are both optional. `header` and `footer` would be displayed over the gif. + +## Attributes + +This component offers the following options which could be set using attributes: + +| Attribute | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| src | string | | The source url, the src, of the Gif. Could be an embeddable external url or a local one. | +| alt | string | | And alt information could be provided for accessibility reason. | +| fullscreen | number | false | If set to true, the gif width and height will be related to the slide width and height respectively will be fullscreen. | + +## Theming + +The following theming options will affect this component if set on its host or parent. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --width | | The width of the gif | +| --height | | The height of the gif | +| --background | | The background of the `header` and `footer` over the gif | +| --color | | The color of the `header` and `footer` over the gif| +| --padding | | The padding of the `header` and `footer` over the gif | +| --zIndex | 2 | The z-index of the slide | + +## Note + +Of course, as other images added to a presentation build with [DeckDeckGo], gifs are lazy loaded too. + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/components/app-components-highlight-code/app-components-highlight-code.md b/docs/docs/components/app-components-highlight-code/app-components-highlight-code.md new file mode 100644 index 000000000..e95f67efb --- /dev/null +++ b/docs/docs/components/app-components-highlight-code/app-components-highlight-code.md @@ -0,0 +1,141 @@ +# Highlight Code + +The "Highlight Code" component is an extra component which let you highlight code easily. + +To highlight your code, this component is using [Prism.js](https://prismjs.com) from [James DiGioia](https://twitter.com/jamesdigioia). + +## Table of contents + +- [Showcase](#app-components-highlight-code-showcase) +- [Getting started](#app-components-highlight-code-getting-started) + - [Using DeckDeckGo Highlight Code from a CDN](#app-components-highlight-code-using-deckdeckgo-highlight-code-from-a-cdn) + - [Install DeckDeckGo Highlight Code from NPM](#app-components-highlight-code-install-deckdeckgo-highlight-code-from-npm) + - [Framework integration](#app-components-highlight-code-framework-integration) +- [Usage](#app-components-highlight-code-usage) + - [Properties](#app-components-highlight-code-properties) + - [Styling](#app-components-highlight-code-styling) + - [Methods](#app-components-highlight-code-methods) + - [Find the next anchor](#app-components-highlight-code-find-the-next-anchor) + - [Zoom into code](#app-components-highlight-code-zoom-into-code) + - [Load or reload the component](#app-components-highlight-code-load-or-reload-the-component) + - [Examples](#app-components-highlight-code-examples) + +## Showcase + +```java +public static void main(String args[]) { + System.out.println("Hello World"); +} +``` + +## Getting started + +To create easily your PWA presentation and to enjoy all the options, I suggest you to create your slides using the CLI as described in the [Getting started chapter](/docs/introduction). + +Doing so you will use the [DeckDeckGo] starter kit which already includes this Web Component. + +However, if you are looking to use this Web Component as a standalone component, to add a code highlighter feature to your web applications, it could be use directly in your project from a CDN, using a simple script include, or could be installed from [npm](https://www.npmjs.com/package/deckdeckgo-highlight-code). + +### Using DeckDeckGo Highlight Code from a CDN + +It's recommended to use [unpkg](https://unpkg.com/) to use the [DeckDeckGo] Code from a CDN. To do so, add the following include script in the main HTML file of your project: + +``` + +``` +### Install DeckDeckGo Highlight Code from NPM + +Install [DeckDeckGo] - Highlight Code in your project from [npm](https://www.npmjs.com/package/deckdeckgo-highlight-code) using the following command: + +```bash +npm install deckdeckgo-highlight-code +``` + +### Framework integration + +The [Stencil documentation](https://stenciljs.com/docs/overview) provide examples of framework integration for [Angular](https://stenciljs.com/docs/angular), [React](https://stenciljs.com/docs/react), [Vue](https://stenciljs.com/docs/vue) and [Ember](https://stenciljs.com/docs/ember). + +## Usage + +The `` Web Component will highlight your code using [Prism.js](https://prismjs.com). You could inject a `` tag using slot or provide an URI to the file containing your code. + +### Properties + +The `` expose the following properties: + +| Property | Attribute | Description | Type | Default | +| ------------ | ------------- | ----------- | --------- | --------------------- | +| `src` | `src` | The web url to the source code you would like to showcase | `string` | | +| `anchor` | `anchor` | The anchor identifier which will be use to find the next anchor to scroll too using `findNextAnchor()` | `string` | `'// DeckDeckGo'` | +| `anchorZoom` | `anchor-zoom` | The anchor identifier which will be use to find the next anchor to zoom inside your code using `findNextAnchor()` | `string` | `'// DeckDeckGoZoom'` | +| `hideAnchor` | `hide-anchor` | Set this attribute to `false` in case you would like to actually display the anchor value too | `boolean` | `true` | +| `language` | `language` | Define the language to be used for the syntax highlighting. The list of [supported languages](https://prismjs.com/#languages-list) is defined by [Prism.js](https://prismjs.com/#languages-list) | `string` | `'javascript'` | +| `highlightLines` | `highlight-lines` | If you wish to highlight some lines of your code. The lines number should be provided as number separated with coma and group separated with space. For example: "3,5 8,9 13,13 14,17" | `string` | | + +### Styling + +The `` could be styled using the following CSS4 variables: + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --deckgo-highlight-code-color | inherit | The color of the displayed code | +| --deckgo-highlight-code-background | | The background of the displayed code | +| --deckgo-highlight-code-padding | | The padding of the displayed code | +| --deckgo-highlight-code-border-radius | | The border radius of the displayed code | +| --deckgo-highlight-code-margin-bottom | 64px | Margin bottom of the code scroller | +| --deckgo-highlight-code-zoom | 1 | If you wish to manually zoom the code | +| --deckgo-highlight-code-font-size | | The size of the font for the code | +| --deckgo-highlight-code-font-family | monospace | The family of the font for the code | +| --deckgo-highlight-code-line-background | | The background of the lines you wish to highlight | +| --deckgo-highlight-code-line-padding | | A padding for each lines you wish to highlight | +| --deckgo-highlight-code-line-border-top | | The border-top property of the lines you wish to highlight | +| --deckgo-highlight-code-direction | ltr | The direction of the displayed code | +| --deckgo-highlight-code-text-align | start | The text alignment of your code | +| --deckgo-highlight-code-token-comment | | Highlighted code tokens comment, prolog, doctype and cdata | +| --deckgo-highlight-code-token-punctuation | | Highlighted code token punctuation | +| --deckgo-highlight-code-token-property | | Highlighted code tokens property, tag, boolean, number, constant, symbol, deleted | +| --deckgo-highlight-code-token-selector | | Highlighted code tokens selector, attr-name, string, char, builtin, inserted | +| --deckgo-highlight-code-token-operator | | Highlighted code tokens operator, entity, url, string | +| --deckgo-highlight-code-token-atrule | | Highlighted code tokens atrule, attr-value, keyword | +| --deckgo-highlight-code-token-function | | Highlighted code function, class-name | +| --deckgo-highlight-code-token-regex | | Highlighted code tokens regex, important, variable | + +### Methods + +The `` expose the following methods: + +#### Find the next anchor + +``` +findNextAnchor(enter: boolean) => Promise +``` + +#### Zoom into code + +``` +zoomCode(zoom: boolean) => Promise +``` + +#### Load or reload the component + +``` +load() => Promise +``` + +### Examples + +You could find the examples in the [src/index.html](https://github.com/deckgo/deckdeckgo-qrcode/blob/master/src/index.html) of the project. + +``` + + + + + public static void main(String args[]) { + + System.out.println("Hello World"); +} + +``` + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/components/app-components-qrcode/app-components-qrcode.md b/docs/docs/components/app-components-qrcode/app-components-qrcode.md new file mode 100644 index 000000000..d3662c504 --- /dev/null +++ b/docs/docs/components/app-components-qrcode/app-components-qrcode.md @@ -0,0 +1,139 @@ +# QR Code + +The "QR Code" component is an extra component which let you add QR code in your slides, useful for example to display links and url and if you wish your audience to easily access them. + +To generate the QR code, the project [qrcode-generator](https://github.com/kazuhikoarase/qrcode-generator) from [Kazuhiko Arase](https://github.com/kazuhikoarase) is used. + +## Table of contents + +- [Showcase](#app-components-qrcode-showcase) +- [Getting started](#app-components-qrcode-getting-started) + - [Using DeckDeckGo QR Code from a CDN](#app-components-qrcode-using-deckdeckgo-qr-code-from-a-cdn) + - [Install DeckDeckGo QR Code from NPM](#app-components-qrcode-install-deckdeckgo-qr-code-from-npm) + - [Framework integration](#app-components-qrcode-framework-integration) +- [Usage](#app-components-qrcode-usage) + - [Slot](#app-components-qrcode-slot) + - [Properties](#app-components-qrcode-properties) + - [Styling](#app-components-qrcode-styling) + - [Styling type img](#app-components-qrcode-styling-type-img) + - [Methods](#app-components-qrcode-methods) + - [Examples](#app-components-qrcode-examples) +- [QR Code with logo](#app-components-qrcode-qr-code-with-logo) + +## Showcase + +This Web Component let you generate QR code like the following as `svg` (default) or `img`: + +
+ + +
+ +Optionally you could also display a logo over your QR code: + +
+ + + +
+ +## Getting started + +To create easily your PWA presentation and to enjoy all the options, I suggest you to create your slides using the CLI as described in the [Getting started chapter](/docs/introduction). + +Doing so you will use the [DeckDeckGo] starter kit which already includes this Web Component. + +However, if you are looking to use this Web Component as a standalone component, to add a QR codes to your web applications, it could be use directly in your project from a CDN, using a simple script include, or could be installed from [npm](https://www.npmjs.com/package/deckdeckgo-qrcode). + +### Using DeckDeckGo QR Code from a CDN + +It's recommended to use [unpkg](https://unpkg.com/) to use the [DeckDeckGo] Code from a CDN. To do so, add the following include script in the main HTML file of your project: + +``` + +``` +### Install DeckDeckGo QR Code from NPM + +Install [DeckDeckGo] - QR Code in your project from [npm](https://www.npmjs.com/package/deckdeckgo-qrcode) using the following command: + +```bash +npm install deckdeckgo-qrcode +``` + +### Framework integration + +The [Stencil documentation](https://stenciljs.com/docs/overview) provide examples of framework integration for [Angular](https://stenciljs.com/docs/angular), [React](https://stenciljs.com/docs/react), [Vue](https://stenciljs.com/docs/vue) and [Ember](https://stenciljs.com/docs/ember). + +## Usage + +The `` Web Component will generate per default a `` QR code with a correction level set to high. + +Optionally, it's also possible to generate the QR code as an `` and/or to display a logo over it. + +### Slot + +To display a logo over your QR code, this Web Component provide a `slot` called `logo`. + +### Properties + +The `` expose the following properties: + +| Property | Attribute | Description | Type | Default | Only applies for type `` | +| ------------ | ------------- | ----------- | --------- | --------------------- |-----------------| +| `content` | `content` | The content, a text or an url, of the QR code to generate | `string` | || +| `type` | `type` | The type of QR code to generate, `` or `` | `string` | `svg` || +| `qrCellSize` | `qr-cell-size` | The size of the cell, useful to generate a bigger QR code, specially in case of ``. Use it wisely, I suggest a value between 0 and 20 for example. | `number` | || +| `qrMargin` | `qr-margin` | The size of the code margin, in case you would like more spacing | `number` | || +| `qrAlt` | `qr-img-alt` | An alternate text for the image of the QR code | `string` | | X | +| `qrBackgroundColor` | `qr-img-background-color` | The background color of the QR code. The value should be provided in a RGB-hex format. For example: `FF0000`. | `string` | | X | +| `qrFillColor` | `qr-img-fill-color` | The color use to fill the QR code. The value should be provided in a RGB-hex format. For example: `FF0000`. | `string` | | X | + +### Styling + +The `` could be styled using the following CSS4 variables which would only applies on the type ``: + +| CSS4 variable | Default | Note | Only applies for type `` | +| -------------------------- |-----------------|-----------------|-----------------| +| --deckgo-qrcode-container-display | inline-block | The display property of the shadow host and the code container || +| --deckgo-qrcode-size | | The size, width and height, of the QR code | X | +| --deckgo-qrcode-logo-ratio-size | 3 | If you are injecting a logo, its size, width and height, will be calculated with `--deckgo-qrcode-size` (or `100%` if not provided) divided by this value | X | +| --deckgo-qrcode-border-stroke | | The border color of the QR code | X | +| --deckgo-qrcode-background-fill | transparent | The QR code's background | X | +| --deckgo-qrcode-color-fill | | The QR code's color (the color of the QR code's squares it contains) | X | + +#### Styling type img + +In oder to style QR code if its type is set to ``, you will need to use properties instead of CSS4 variables. + +### Methods + +The `` component exposes the following method in case you would like to refresh your QR code, for example on resize of the window on in case you would set its content asynchronously: + +``` +generate() => Promise +``` + +### Examples + +You could find all the examples in the [src/index.html](src/index.html) of the project. + +``` + + +``` + +Example with a logo: + +``` + + + +``` + +## QR Code with logo + +It's possible to display a logo over your QR Code as the code generated with this Web Component have a correction level set to high meaning, if I understand correctly, that your content is encoded and displayed multiple times inside the QR code. Therefore, even if the logo cover a part of it, it will be still possible for a reader to read the content from "somewhere else" in the code. + +However, test it carefully and play with the colours, cell-size and size of your code to ensure its readability. + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/components/app-components-social/app-components-social.md b/docs/docs/components/app-components-social/app-components-social.md new file mode 100644 index 000000000..fa2a7b098 --- /dev/null +++ b/docs/docs/components/app-components-social/app-components-social.md @@ -0,0 +1,75 @@ +# Social + +The "Social" component allows you to easily add a social link to your presentation. + +## Table of contents + +- [Showcase](#showcase) +- [Usage](#usage) + - [Slots](#slots) + - [Attributes](#attributes) + - [Examples](#examples) + +## Showcase + +

+ Twitter +

+ +

+ DeckDeckGo on Github +

+ +## Usage + +The "Social" slide's Web Component could be integrated using the tag ``. + +``` + + + Twitter + +``` + +### Slots + +The slot `icon` and the text are both optional. Of course, if you provide nothing, nothing will be rendered. + +### Attributes + +This component offers the following options which could be set using attributes: + +| Attribute | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| twitter | string | | Your Twitter username. It will be concatenated automatically with `https://twitter.com/` | +| linkedin | string | | Your Linkedin username. It will be concatenated automatically with `https://www.linkedin.com/in/` | +| medium | string | | Your Medium username. It will be concatenated automatically with `https://medium.com/@` | +| github | string | | Your Github username. It will be concatenated automatically with `https://github.com/` | +| fullUrl | string | | In case you would like to provide the URI of your choice | + +### Examples + +Without any icons: + +``` +Twitter +Linkedin +Medium +Stackoverflow +``` + +With for example `ion-icon`: + +``` + + + Twitter + + + + + DeckDeckGo on Github + +``` + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/components/app-components-youtube/app-components-youtube.md b/docs/docs/components/app-components-youtube/app-components-youtube.md new file mode 100644 index 000000000..de2bcb532 --- /dev/null +++ b/docs/docs/components/app-components-youtube/app-components-youtube.md @@ -0,0 +1,43 @@ +# Youtube + +The "Youtube" component allows you to easily add a [Youtube](https://youtube.com) video in almost any slide of your presentation. + +## Table of contents + +- [Showcase](#app-components-youtube-showcase) +- [Usage](#app-components-youtube-usage) + - [Slots](#app-components-youtube-slots) + - [Attributes](#app-components-youtube-attributes) + +## Showcase + +
+ + +
+ +## Usage + +The "Youtube" slide's Web Component could be integrated using the tag ``. + +``` + + +``` + +### Slots + +No slots are available for this component. + +### Attributes + +This component offers the following options which could be set using attributes: + +| Attribute | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| src | string | | The source url, the Youtube url, of the video. Not embeddable url will be automatically converted to embeddable url supported by Youtube. | +| width | number | | The width of the video player. | +| height | number | | The height of the video player. | +| frame-title | string | | A title for the frame, could be use for accessibility reason. | + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/deck/app-deck-actions/app-deck-actions.md b/docs/docs/deck/app-deck-actions/app-deck-actions.md new file mode 100644 index 000000000..1ab88f7d5 --- /dev/null +++ b/docs/docs/deck/app-deck-actions/app-deck-actions.md @@ -0,0 +1,42 @@ +# Actions + +A [DeckDeckGo] deck also contains an additional slot `actions`. In the starter kit, this slot is use to add a `social share` action for your presentation. + +## Table of contents + +- [Introduction](#app-deck-actions-introduction) +- [Theming](#app-deck-actions-theming) +- [Example](#app-deck-actions-example) + +## Introduction + +The slot `actions` provided for the deck will be cloned into each slides of your presentation. Therefore this slot will follow the swiping. + +Also worth to notice, this slot will be `hidden` when the presentation will be displayed full screen. + +## Theming + +The following theming options will affect the slot `actions` if set on the `deckgo-deck` or any slides. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --slide-actions-top | 32px | Top value | +| --slide-actions-end | 32px | In LTR, right value | +| --slide-actions-start | | In LTR, left value | + +## Example + +``` + + +

My presentation title

+

+ Hello World 🚀 +

+
+ + +
+``` + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/deck/app-deck-background/app-deck-background.md b/docs/docs/deck/app-deck-background/app-deck-background.md new file mode 100644 index 000000000..1e0f5a1b9 --- /dev/null +++ b/docs/docs/deck/app-deck-background/app-deck-background.md @@ -0,0 +1,94 @@ +# Background + +Beside slides and templates, a [DeckDeckGo] deck could also contains a customized element `background` which could be injected using a dedicated `slot`. + +## Table of contents + +- [Introduction](#app-deck-background-introduction) +- [Attributes](#app-deck-background-attributes) +- [Theming](#app-deck-background-theming) +- [Examples](#app-deck-background-examples) + +## Introduction + +The slot `background` provided for the deck will be cloned into each slides of your presentation. + +This slot is particularly useful if you wish to display your brand or company logo on each slides. + +Also worth to notice, this slot will be `hidden` when the presentation will be displayed full screen. + +Optionally, if you wish, this slot could also not be cloned, could be useful in case you rather would like to display a background which follows your entire presentation. + +## Attributes + +The following attribute could be applied to the `deckgo-deck` element: + +| Property | Attribute | Mandatory | Description | Type | Default | +| -------------- | --------------- | --------- | ----------- | --------- | ----------------------------------- | +| `cloneBackground` | `clone-background` | | Set to false in case you don't want to clone the background in each slides | `boolean` | true | + +## Theming + +The following theming options will affect the slot `background` if set on the `deckgo-deck` or any slides. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --slide-background-position | absolute | The position of the background | +| --slide-background-top | 0 | Top value | +| --slide-background-end | | In LTR, right value | +| --slide-background-start | 0 | In LTR, left value | +| --slide-background-width | | A background width, default without being set all width | +| --slide-background-height | | A background height, default without being set all height | +| --slide-background-print-display | none | Don't print per default the background | + +## Examples + +An example with an image cloned as background for each slides: + +``` + + +

My presentation title

+

+ Hello World 🚀 +

+
+ + +
+``` + +An example with a more complex html and css element which is set as background for the all presentation: + +``` + + +

My presentation title

+

+ Hello World 🚀 +

+
+ +
+
+``` + +where for example the related `circle` css code could be: + +``` +div.circle { + position: absolute; + left: 50%; + transform: translate(-50%, 0); + + bottom: -10vh; + width: 800vw; + height: 100vh; + + border-radius: 50%; + background: yellow; + opacity: 0.3; +} +``` + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/deck/app-deck-events/app-deck-events.md b/docs/docs/deck/app-deck-events/app-deck-events.md new file mode 100644 index 000000000..ac9f6344a --- /dev/null +++ b/docs/docs/deck/app-deck-events/app-deck-events.md @@ -0,0 +1,14 @@ +# Events + +The [DeckDeckGo] deck triggers the following events: + +| Event | Emitted value | Description | +| -------------------------- |-----------------|-----------------| +| slidesDidLoad | string[] | Emitted when the deck and all slides have loaded. Emit the an ordered list of all the tag names of the slides. | +| slideNextDidChange | number | Emitted when the next slide has started. Emit the index of the new active slide. | +| slidePrevDidChange | number | Emitted when the previous slide has ended. Emit the index of the new active slide. | +| slideToChange | number | Emitted when a specific slide has been selected. Emit the index of the new selected slide. | +| slideDrag | number | Emitted when the slider is actively being moved. Emit the transformX value of the deck. | +| slideWillChange | number | Emitted before the active slide has changed. Emit the transformX value of the deck. | + +[DeckDeckGo]: https://deckdeckgo.com diff --git a/docs/docs/deck/app-deck-extra-features/app-deck-extra-features.md b/docs/docs/deck/app-deck-extra-features/app-deck-extra-features.md new file mode 100644 index 000000000..a5f54331b --- /dev/null +++ b/docs/docs/deck/app-deck-extra-features/app-deck-extra-features.md @@ -0,0 +1,31 @@ +# Extra Features + +The [DeckDeckGo] deck exposes a couple of extra features which could be added to your presentation too if you don't already use the starter kit. + +## Table of contents + +- [Toggle on/off the full screen mode](#app-deck-extra-features-toggle-onoff-the-full-screen-mode) +- [Print the presentation](#app-deck-extra-features-print-the-presentation) +- [Mobile](#app-deck-extra-features-mobile) + +## Toggle on/off the full screen mode + +``` +await deck.toggleFullScreen(); +``` + +## Print the presentation + +``` +await deck.print(); +``` + +## Mobile + +A util method to know if the current presentation is browsed on a mobile device or not. + +``` +await deck.isMobile(); // resolve a boolean +``` + +[DeckDeckGo]: https://deckdeckgo.com diff --git a/docs/docs/deck/app-deck-navigation/app-deck-navigation.md b/docs/docs/deck/app-deck-navigation/app-deck-navigation.md new file mode 100644 index 000000000..7e7ae59fe --- /dev/null +++ b/docs/docs/deck/app-deck-navigation/app-deck-navigation.md @@ -0,0 +1,105 @@ +# Navigation + +If you use the [DeckDeckGo] starter kit, the navigation methods are already bind out of the box. + +However, if you wish to know more about the different options or are using the core of [DeckDeckGo], the [DeckDeckGo] deck exposes the following asynchronous methods in case you would like to add navigation features to your project. + +- [Introduction](#app-deck-navigation-introduction) +- [Go to next slide](#app-deck-navigation-go-to-next-slide) + - [Optional parameters](#app-deck-navigation-optional-parameters) +- [Go to previous slide](#app-deck-navigation-go-to-previous-slide) + - [Optional parameters](#app-deck-navigation-optional-parameters-1) +- [Go to a specific slide](#app-deck-navigation-go-to-a-specific-slide) + - [Parameters](#app-deck-navigation-parameters) +- [Is the deck at the begin](#app-deck-navigation-is-the-deck-at-the-begin) +- [Is the deck at the end](#app-deck-navigation-is-the-deck-at-the-end) +- [Get the index of the current slide](#app-deck-navigation-get-the-index-of-the-current-slide) +- [Get the length of the deck](#app-deck-navigation-get-the-length-of-the-deck) + +## Introduction + +In the following examples we are accessing the features available on the deck element ``. + +For example, in Vanilla Javascript, we would get a reference to the deck using the following selector: + +``` +const deck = document.getElementsByTagName('deckgo-deck'); +``` + +## Go to next slide + +``` +await deck.slideNext(); +``` + +### Optional parameters + +| Parameter | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| slideAnimation | boolean | true | Set to `false` in case you would not like the inner animation of a slide, like the reveal or code animation for example, to be performed. | +| emitEvent | boolean | true | Set to `false` in case you would not like the events `slideNextDidChange` and `slidePrevDidChange` to be fired. Note that to use this parameter, the previous should be set too. | + +For example: + +``` +await deck.slideNext(false, false); +``` + +## Go to previous slide + +``` +await deck.slidePrev(); +``` + +### Optional parameters + +| Parameter | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| slideAnimation | boolean | true | Set to `false` in case you would not like the inner animation of a slide, like the reveal or code animation for example, to be performed. | +| emitEvent | boolean | true | Set to `false` in case you would not like the events `slideNextDidChange` and `slidePrevDidChange` to be fired. Note that to use this parameter, the previous should be set too. | + +For example: + +``` +await deck.slidePrev(false, false); +``` + +## Go to a specific slide + +``` +await deck.slideTo(0); // parameters: index: number, speed?: number | undefined +``` + +### Parameters + +| Parameter | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| index | number | | Slide index of the specific slide. | +| speed | number | 300 | The slide transition speed. Default 300ms. | +| emitEvent | boolean | true | In case you would not like to emit the event `slideToChange`. Note that if you would use this parameter, the above `speed` parameter must be provided too. | + +## Is the deck at the begin + +``` +await deck.isBeginning(); // resolve a boolean +``` + +## Is the deck at the end + +``` +await deck.isEnd(); // resolve a boolean +``` + +## Get the index of the current slide + +``` +await deck.getActiveIndex(); // resolve a number +``` + +## Get the length of the deck + +``` +await deck.getLength(); // resolve a number +``` + +[DeckDeckGo]: https://deckdeckgo.com diff --git a/docs/docs/deck/app-deck-pager/app-deck-pager.md b/docs/docs/deck/app-deck-pager/app-deck-pager.md new file mode 100644 index 000000000..fb0e8fe49 --- /dev/null +++ b/docs/docs/deck/app-deck-pager/app-deck-pager.md @@ -0,0 +1,38 @@ +# Pager + +[DeckDeckGo] will per default display a pager in form of a progress circle bar. It's possible to hide it or to customize the following various style options. + +Also worth to notice that the pager inherits per default the document and deck direction (LTR or RTL for example). + +- [Show or hide](#app-deck-pager-show-or-hide) +- [Customization](#app-deck-pager-customization) + +## Show or hide + +The show or hide options of the pager are available on the `` element. + +| Attribute | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| pager | boolean | true | Show or hide the pager | +| pagerPercentage | boolean | true | Show or hide the progression in percentage inside the pager | + +## Customization + +The following style options are available to style the pager: + +| CSS4 variable | Default | +| -------------------------- |-----------------| +| --pager-size | 56px | +| --pager-margin-top | 8px | +| --pager-margin-end | 8px | +| --pager-margin-bottom | 8px | +| --pager-margin-start | 8px | +| --pager-background | #eee | +| --pager-text-color | #4c8dff | +| --pager-text-size | 0.5em | +| --pager-stroke-outer-width | 2.8 | +| --pager-stroke-inner-width | 1.8 | +| --pager-position-left | | +| --pager-position-right | | + +[DeckDeckGo]: https://deckdeckgo.com diff --git a/docs/docs/deck/app-deck-size/app-deck-size.md b/docs/docs/deck/app-deck-size/app-deck-size.md new file mode 100644 index 000000000..529e51562 --- /dev/null +++ b/docs/docs/deck/app-deck-size/app-deck-size.md @@ -0,0 +1,20 @@ +# Size + +Per default, the [DeckDeckGo] deck will use all the browser `window` size respectively width and height. + +However, it is possible to include or use [DeckDeckGo] in any container, for that purpose you would only need to set the attribute `embedded` to `true`. + +``` +
+ + +

My presentation title

+

+ Hello World 🚀 +

+
+
+
+``` + +[DeckDeckGo]: https://deckdeckgo.com diff --git a/docs/docs/edit/app-edit-default/app-edit-default.md b/docs/docs/edit/app-edit-default/app-edit-default.md new file mode 100644 index 000000000..4bbd5dd1a --- /dev/null +++ b/docs/docs/edit/app-edit-default/app-edit-default.md @@ -0,0 +1,11 @@ +# HTML + +To edit your [DeckDeckGo] presentation your could either use **HTML** or **Markdown**. + +The default language is **HTML**. It's also the recommended language as it will offers you more flexibility specially regarding styling. + +If you use the starter kit and use HTML as language for the edition, you could begin to edit the `index.html` of your project as displayed in the chapter [Concept](/slides/concept). + +If you wish to edit your talk using **Markdown** have a look to [the next chapter](/edit/markdown). + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/edit/app-edit-fonts/app-edit-fonts.md b/docs/docs/edit/app-edit-fonts/app-edit-fonts.md new file mode 100644 index 000000000..942d50c58 --- /dev/null +++ b/docs/docs/edit/app-edit-fonts/app-edit-fonts.md @@ -0,0 +1,47 @@ +# Fonts + +As any web application, the fonts of your presentation could be easily styled, but [DeckDeckGo] goes one step further by downloading and installing **automatically** any [Google Fonts](https://fonts.google.com) you would like to use during the setup process (if you are using the starter kit). + +## Using automatically any Google Fonts + +After you have kick-started your presentation running `npm init deckdeckgo` in a terminal and provided the information as describe in the [Getting started](https://docs.deckdeckgo.com/docs/introduction) chapter, the [DeckDeckGo] CLI will ask you if you are looking to use Google Fonts and if you would answer yes, will guide you to get some information about the font. + +Once all information gathered, it will automatically download the fonts, add them to your presentation and even do the settings in the CSS stylesheets for you. + +## Example + +The following is an example of the process if you would like to install the Google Font `Lato`: + +``` +? Do you want to use a Google Font for your presentation? (y/N) Y + +⠼ Fetching fonts list... + +? Search a Google font (min. 3 characters)? ato + +? Select the font (Use arrow keys) + Atomic Age +❯ Lato + Search again + Skip + +? Select charsets (Press to select, to toggle all, to invert selection) +❯◉ latin + ◯ latin-ext + +? Select styles (Press to select, to toggle all, to invert selection) + ◯ 100 + ◯ 100italic + ◯ 300 + ◯ 300italic + ❯◉ regular + ◯ italic + ◯ 700 + (Move up and down to reveal more choices) + +⠼ Downloading font +⠼ Writing to CSS files... + +``` + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/edit/app-edit-lazy-loading/app-edit-lazy-loading.md b/docs/docs/edit/app-edit-lazy-loading/app-edit-lazy-loading.md new file mode 100644 index 000000000..dacb9dc88 --- /dev/null +++ b/docs/docs/edit/app-edit-lazy-loading/app-edit-lazy-loading.md @@ -0,0 +1,11 @@ +# Lazy loading + +[DeckDeckGo] is build for performance and try to lazy load as much as possible the components of your presentation, have a look to the Lighthouse score of the [DeckDeckGo] website for reference. + +Therefore, in order to lazy load the images of your presentation, please provide their url using the attribute `data-src` instead of `src`. [DeckDeckGo] will then take care of loading them only when needed. + +``` + +``` + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/edit/app-edit-markdown/app-edit-markdown.md b/docs/docs/edit/app-edit-markdown/app-edit-markdown.md new file mode 100644 index 000000000..0b21ff0d5 --- /dev/null +++ b/docs/docs/edit/app-edit-markdown/app-edit-markdown.md @@ -0,0 +1,112 @@ +# Markdown + +If you wish, you could edit your [DeckDeckGo] presentation using Markdown. This chapter has for goal to introduce you briefly on how editing your slides with Markdown differs from the HTML method. + +## Table of contents + +- [Introduction](#app-edit-markdown-introduction) +- [Edit](#app-edit-markdown-edit) + - [Example](#app-edit-markdown-example) + - [Attributes](#app-edit-markdown-attributes) + - [Notes](#app-edit-markdown-notes) +- [Summary](#app-edit-markdown-summary) + +## Introduction + +When you edit your talk with Markdown, the [DeckDeckGo Webpack Markdown Plugin](https://github.com/deckgo/deckdeckgo-webpack-plugins) will convert, at bundle time, your code to HTML and will inject the results in the `index.html` file. Doing so, your [DeckDeckGo] presentation will remain SEO friendly even without server side rendering. + +## Edit + +To begin to edit your talk, instead of editing the `index.html` you will instead have to edit the `index.md` file provided by the starter kit. + +Furthermore than the standard Markdown tags, you will be able to use extended tags in order to specify which types of slides you would like to use. For that purpose, use the separator `---` followed by a shortened version of the template's name, like for example `--- title` for ``. + +The plugin also takes care of injecting the content you would provide in the right slots. + +### Example + +The following `` slide: + +``` +--- title +# My presentation title + +Hello World 🚀 +``` + +will be parsed into: + +``` + +

My presentation title

+
+

Hello World 🚀

+
+
+``` + +### Attributes + +As some templates needs attributes, you will also be able to specify them in Markdown. + +For example the `` slide: + +``` +--- gif src="https://media.giphy.com/media/xUA7baWfTjfHGLZc3e/giphy.gif" alt="My gif" fullscreen="true" +# My title + +# Hey + +### It's cool gif +``` + +will be parsed into: + +``` + +

My title

+

Hey

+

It's a cool gif

+
+``` + +### Notes + +To add some notes to a particular slide, use the separator `***` and write down your notes afterwards. + +Optionally, if you wish to display your notes in your deck, you could also use the attribute `show`. + +``` +--- title +# My presentation title + +Hello World 🚀 + +*** + +I should not forget to think about that during my talk + +...and say hello to mum +``` + +will be parsed into: + +``` + +

My presentation title

+
+

Hello World 🚀

+
+
+ I should not forget to think about that during my talk + + ...and say hello to mum +
+
+``` + +## Summary + +When you choose Markdown, you edit your slides in `index.md` and use standard Markdown except the extra tags `---` to declare your slides and `***` if you wish to add notes. + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/edit/app-edit-rtl/app-edit-rtl.md b/docs/docs/edit/app-edit-rtl/app-edit-rtl.md new file mode 100644 index 000000000..e3b275e14 --- /dev/null +++ b/docs/docs/edit/app-edit-rtl/app-edit-rtl.md @@ -0,0 +1,17 @@ +# RTL Support + +[DeckDeckGo] offers full LTR and RTL support. The deck inherits its parent text direction. + +Commonly, if you wish to use RTL for your all page respectively presentation, you could set the attribute `dir` of the root `html` tag to `rtl`. + +``` + + + + + + + +``` + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/edit/app-edit-theming/app-edit-theming.md b/docs/docs/edit/app-edit-theming/app-edit-theming.md new file mode 100644 index 000000000..6d17ada35 --- /dev/null +++ b/docs/docs/edit/app-edit-theming/app-edit-theming.md @@ -0,0 +1,35 @@ +# Theming + +Theming a [DeckDeckGo] presentation is quick and easy. + +## Table of contents + +- [Theme](#app-edit-theming-theme) +- [Custom styles](#app-edit-theming-custom-styles) +- [Notes](#app-edit-theming-notes) + +## Theme + +To create the theme for your deck when you are using the [DeckDeckGo] starter kit, use the [Ionic Color Generator](https://ionicframework.com/docs/theming/color-generator) to pick the colors of your choice. + +Once done, `copy` the generated CSS variables and `parse` them into the `src/css/variables.css` file of your presentation. + +Finally, edit the `index.html` and replace the color of the `body` background. + +``` +body { + background: #3880ff; +} +``` + +> This background color is defined directly in the index.html file because it is the one which will be applied until your presentation is loaded + +## Custom styles + +[DeckDeckGo] also offers various theming options which could be set using CSS variables and which are described in their respective slides' templates, see chapter [concept](/slides/concept) to begin with. + +## Notes + +If you would miss or need further theming options, don't hesitate to open an issue and/or submit a PR, it would be my pleasure to add more theming flexibility and options + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/introduction/app-installation/app-installation.md b/docs/docs/introduction/app-installation/app-installation.md new file mode 100644 index 000000000..f4bfac68e --- /dev/null +++ b/docs/docs/introduction/app-installation/app-installation.md @@ -0,0 +1,35 @@ +# Installation + +To create easily your PWA presentation and to enjoy all the options, I suggest you to create your slides using the CLI and the starter kit as described in the [previous chapter](/docs/introduction). + +However, the [DeckDeckGo] core component, could be installed in any project too. + +If you wish to do so, use it directly in your project from a CDN, using a simple script include, or install it from [npm](https://www.npmjs.com/package/deckdeckgo). + +## Table of contents + +- [Using DeckDeckGo from a CDN](#app-installation-using-deckdeckgo-from-a-cdn) +- [Install DeckDeckGo from npm](#app-installation-install-deckdeckgo-from-npm) +- [Framework integration](#app-installation-framework-integration) + +## Using DeckDeckGo from a CDN + +It's recommended to use [unpkg](https://unpkg.com/) to use the [DeckDeckGo] from a CDN. To do so, add the following include script in the main HTML file of your project: + +``` + +``` + +## Install DeckDeckGo from NPM + +Install [DeckDeckGo] in your project from [npm](https://www.npmjs.com/package/deckdeckgo) using the following command: + +```bash +npm install deckdeckgo +``` + +## Framework integration + +The [Stencil documentation](https://stenciljs.com/docs/overview) provide examples of framework integration for [Angular](https://stenciljs.com/docs/angular), [React](https://stenciljs.com/docs/react), [Vue](https://stenciljs.com/docs/vue) and [Ember](https://stenciljs.com/docs/ember). + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/introduction/app-introduction/app-introduction.md b/docs/docs/introduction/app-introduction/app-introduction.md new file mode 100644 index 000000000..2609976d3 --- /dev/null +++ b/docs/docs/introduction/app-introduction/app-introduction.md @@ -0,0 +1,39 @@ +# Getting started + +[DeckDeckGo] provides a [CLI](https://github.com/deckgo/create-deckdeckgo) and a [starter kit](https://github.com/deckgo/deckdeckgo-starter). + +## Prerequisites + +[DeckDeckGo] requires a recent LTS version of [NodeJS](https://nodejs.org) and npm. Make sure you've installed and/or updated Node before continuing. + +> Note that you will need to use npm 6 or higher + +## Starting a new presentation + +Run the following command in a terminal to create a new deck: + +```bash +npm init deckdeckgo +``` + +After running init you will be provided with a prompt so that you can set the base information for your new deck and choose if you rather like to edit it in **HTML** or **markdown**: + +```bash +Cool, let's kick start a new DeckDeckGo presentation + +? What's your project name (will be use to create a new folder)? (deckdeckgo) + +? What's your presentation name (max. 45 characters, will be use for meta tags and manifest information)? (DeckDeckGo) + +? What's your presentation about (its description)? (Create a lightweight presentation using Web Components 🚀) + +? What's your name (will be use for the author meta information)? (David) + +? What method do you want to use to edit your presentation? (Use arrow keys) + ❯ HTML + Markdown +``` + +Once your presentation created, go to your new project's folder and start editing your slides and content for your talk 😉 + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/introduction/app-publishing/app-publishing.md b/docs/docs/introduction/app-publishing/app-publishing.md new file mode 100644 index 000000000..123a6314f --- /dev/null +++ b/docs/docs/introduction/app-publishing/app-publishing.md @@ -0,0 +1,49 @@ +# Publishing + +[DeckDeckGo] bundles your presentation as a Progressive Web App which could be hosted on any Web Server or hosting solution. + +> Not sure what PWAs are? Check out Ionic's [PWA Overview](https://ionicframework.com/pwa) for more info. + +## Table of contents + +- [SEO friendly](#app-publishing-seo-friendly) +- [Before deploy](#app-publishing-before-production) +- [Production build](#app-publishing-production-build) + +## SEO friendly + +It is worth to notice that [DeckDeckGo] is, respectively your slides build with are, SEO friendly. + +Therefore you do **not** need to implement a complex server-side rendering (SSR) hosting solution. + +## Before production + +Before your final build and most important before deploying online your deck, don't forget to edit the information about your presentation in the following files: + +1. Edit the meta tags in the `` of your `src/index.html` file + +2. Generate your icons and replace the respective files in the `assets` folder. For that purpose I suggest you to use the real great tool [RealFaviconGenerator](https://realfavicongenerator.net) + +3. Update the information in the `manifest.json` file + +## Production build + +When you are ready for your talk or ready to publish online your slides, run the following command in a terminal to bundle your presentation for production: + +```bash +npm run build +``` + +If you do not wish to remove your notes from your presentation, run the build command with the attributes `--notes`: + +```bash +npm run build -- --notes +``` + +If you wish to run your presentation locally afterwards without rebuilding everything, you could run the following command to start only the dev server: + +```bash +npm run dev +``` + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/introduction/app-remote-control/app-remote-control.md b/docs/docs/introduction/app-remote-control/app-remote-control.md new file mode 100644 index 000000000..540de8b27 --- /dev/null +++ b/docs/docs/introduction/app-remote-control/app-remote-control.md @@ -0,0 +1,53 @@ +# Remote control + +Cherry on the cake 🍒🎂 DeckDeckGo comes with a Progressive Web App to remote control your slides 📱 + +## Table of contents + +- [How does it works](#app-remote-control-how-does-it-work) +- [Give a try](#app-remote-control-give-a-try) +- [Control your slides](#app-remote-control-control-your-slides) + - [Features](#app-remote-control-features) +- [Time tracker](#app-remote-control-time-tracker) + +## How does it work + +The same Progressive Web App [remote control] could be use to control any presentations developed with [DeckDeckGo]. + +If you are using the starter kit, out of the box, your presentation will signal itself as "controllable" and will therefore be "discoverable". + +One a presentation would be linked with the [remote control], the communication between these will happens through a real-time channel using [WebRTC](https://webrtc.org/). + +## Give a try + +Better than a description, the DeckDeckGo website implement a deck and receiver to let you interact with this application, just give it a try: + +1. Open the DeckDeckGo website 👉 https://deckdeckgo.com +2. Start the [remote control] PWA 👉 https://deckdeckgo.app +3. Have fun 🎉 + +## Control your slides + +Use the [remote control] to take remotely the remotely of your presentation. Useful to interact with present your slides while you are focusing one your talk. + +### Features + +* Switch between slides and/or swipe your slides +* Play and pause Youtube video +* Draw over your slide deck +* Highlight elements of your presentation + +### Screenshot + +![The DeckDeckGo remote control](/assets/img/screenshots/remote-control/deckdeckgo-remote-control-interact.png "The DeckDeckGo remote control") + +## Time tracker + +The [remote control] let you track your talk's time too. This application implements local notifications to inform you when your talk is about to finish or is finished. + +### Screenshot + +![The DeckDeckGo remote control timer](/assets/img/screenshots/remote-control/deckdeckgo-remote-control-timer.png "The DeckDeckGo remote control timer") + +[DeckDeckGo]: https://deckdeckgo.com +[remote control]: https://deckdeckgo.app \ No newline at end of file diff --git a/docs/docs/introduction/app-running/app-running.md b/docs/docs/introduction/app-running/app-running.md new file mode 100644 index 000000000..f61debbfa --- /dev/null +++ b/docs/docs/introduction/app-running/app-running.md @@ -0,0 +1,31 @@ +# Running + +There are two options to run and showcase your presentation: + +You could either publish your deck online and showcase it from there, by accessing it with its online url with your favorite browser. For example by accessing an URL like [https://deckdeckgo.com](https://deckdeckgo.com). + +Or you could showcase your deck in your favorite browser by running it locally using the integrated dev server provided by the [DeckDeckGo] starter kit with the default access URL [http://localhost:3000](http://localhost:3000). + +## Local + +To run your presentation, in a terminal, start the following command to bundle your slides and to keep listening to modifications: + +```bash +npm run start +``` + +If you wish to develop your presentation without adding it to the list of available deck of the remote control, run the following command instead: + +```bash +npm run start-no-remote +``` + +> Furthermore to serve your deck, both above commands are watching your presentation's source files for changes and will trigger a new build and reload in case of modifications + +[lite-server](https://github.com/johnpapa/lite-server) is use as integrated dev server. + +## Online + +If you are looking to showcase your presentation from an online URL, have a look to the next chapter [publishing](/docs/publishing) before deploying your deck on your hosting solution. + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/misc/app-misc-backstory/app-misc-backstory.md b/docs/docs/misc/app-misc-backstory/app-misc-backstory.md new file mode 100644 index 000000000..030f2216d --- /dev/null +++ b/docs/docs/misc/app-misc-backstory/app-misc-backstory.md @@ -0,0 +1,11 @@ +# Backstory + +I had the opportunity to talk about Web Components and Ionic. While I was developing my presentation it came to my mind that I was not really following what I was about to present, that's why I wrapped up together [DeckDeckGo], this new tool to create a Progressive Web App alternative for simple presentations using Web Components. + +I hope my little project will help you to create a slick presentation 🚀 + +To infinity and beyond 🖖 + +[David](https://twitter.com/daviddalbusco) + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/misc/app-misc-collections/app-misc-collections.md b/docs/docs/misc/app-misc-collections/app-misc-collections.md new file mode 100644 index 000000000..6bd892b0e --- /dev/null +++ b/docs/docs/misc/app-misc-collections/app-misc-collections.md @@ -0,0 +1,16 @@ +# Collections + +A collection of presentations and talks where [DeckDeckGo] was used: + +| Title | Date and event | Author | Repo | Available online | +| -------------------------- |-----------------|-----------------|-----------------| ---------------| +| Pantallas táctiles | 2019/01/23 [Universitat Jaume I](https://goo.gl/maps/h7897TMAL792), Castellón de la Plana (Spain) | [David López Castellote](https://github.com/Dellos7) | [sap126-pantallas-tactiles](https://github.com/Dellos7/sap126-pantallas-tactiles) | [https://bit.ly/2FFqXWX](https://dellos7.github.io/presentaciones/sap126-pantallas-tactiles/)| +| Schaffhausen civictech prototype? | 2018/12/08 | [Sandro Scalco](https://github.com/sansan88) | | [https://schaffhausen.io](https://schaffhausen.io) | +| Ionic v4 and web components | 2018/10/26 [Web Zürich October](https://www.meetup.com/fr-FR/Web-Zurich/events/255699446), Zürich | [David Dal Busco](https://github.com/peterpeterparker) | [Web Zueri](https://github.com/peterpeterparker/webzueri) | | +| Ionic v4, web components, shadow dom and beyond | 2018/10/16 [Pantalks](https://www.meetup.com/fr-FR/Pantalks-tech-non-tech-talks-Panter-AG-Zurich/events/255430094/), Zürich | [David Dal Busco](https://github.com/peterpeterparker) | [Ionicv4-and-beyond](https://github.com/peterpeterparker/ionicv4-and-beyond) | | + +## Send me your slides + +If you would publish online a presentation or talk you would have built with [DeckDeckGo], reach me out, I would be super duper happy to add it to the list of talks and presentations ❤️ + +[DeckDeckGo]: https://deckdeckgo.com diff --git a/docs/docs/misc/app-misc-logo/app-misc-logo.md b/docs/docs/misc/app-misc-logo/app-misc-logo.md new file mode 100644 index 000000000..6074d2aaa --- /dev/null +++ b/docs/docs/misc/app-misc-logo/app-misc-logo.md @@ -0,0 +1,7 @@ +# Logo + +The [DeckDeckGo] logo was designed and offered by [Anita](mailto:hello@skinque.com) from [Skinque.com](http://skinque.com), a great online marketplace for tattoos 🤘 + +Reach her out if you are looking for a cool custom tattoo or a nice logo 😃 + +[DeckDeckGo]: https://deckdeckgo.com diff --git a/docs/docs/misc/app-misc-open-source/app-misc-open-source.md b/docs/docs/misc/app-misc-open-source/app-misc-open-source.md new file mode 100644 index 000000000..0de3d40e0 --- /dev/null +++ b/docs/docs/misc/app-misc-open-source/app-misc-open-source.md @@ -0,0 +1,21 @@ +# Open source + +[DeckDeckGo] is **open source** and its source code could be found in the following repos: + +
+ +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/slides/app-slide-author/app-slide-author.md b/docs/docs/slides/app-slide-author/app-slide-author.md new file mode 100644 index 000000000..d8dd6d145 --- /dev/null +++ b/docs/docs/slides/app-slide-author/app-slide-author.md @@ -0,0 +1,114 @@ +# Slide: Author + +The "Author" slide let you introduce the author of the presentation. + +## Table of contents + +- [Layout](#app-slide-author-layout) +- [Usage](#app-slide-author-usage) + - [Slots](#app-slide-author-slots) + - [Notes](#app-slide-author-notes) + - [Social components](#app-slide-author-social-components) +- [Attributes](#app-slide-author-attributes) + - [Example](#app-slide-author-example) +- [Theming](#app-slide-author-theming) + +## Layout + +
+ + +

slot="title"

+
slot="author"
+
twitter
+
linkedin
+
+
+
+ +## Usage + +The "Author" slide's Web Component could be integrated using the tag ``. + +``` + + +

Author

+
+

David

+

Something about me

+
+
twitter
+
+
+``` + +### Slots + +Both slots `title`, `author` and `social-link` are optional, but of course the slide would looks better with at least the slot `author` would be provided. + +Notes: + +* The slot `title` is hidden. If you use the [DeckDeckGo] starter, it will be use for the navigation modal + +* You could provide up to six `social-link` slots. Each of these could be your custom code or you could use the component `` to easily provide a link to an external URI. + +### Notes + +Optionally a slot `notes` could be use to add some notes regarding the particular slide. These will be automatically `displayed` in the [remote control](https://deckdeckgo.app). + +If you are using the [DeckDeckGo] starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute `show`. + +### Social components + +The details of the component `` is described in the components [documentation](https://github.com/deckgo/deckdeckgo/blob/master/doc/components/components.md). + +## Attributes + +This component offers the following options which could be set using attributes: + +| Attribute | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| img-src | string | | An image URI, for example a picture of the author. Note: this image will be displayed as a circle. | +| img-alt | string | | An optional accessibility alt for the image. | + +### Example + +``` + + +
+

David

+

Something about me

+
+
twitter
+
linkedin
+
medium
+
+
+``` + +## Theming + +The following theming options will affect this component if set on its host or parent. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --background | | | +| --color | | | +| --slide-author-background-start | | Left pane background | +| --slide-author-color-start | | Left pane color | +| --slide-author-background-end | | Right pane background | +| --slide-author-color-end | | Right pane color | +| --slide-author-padding-top | 16px | Padding top of a slide | +| --slide-author-padding-end | 32px | Padding right of a slide | +| --slide-author-padding-bottom | 16px | Padding bottom of a slide | +| --slide-author-padding-start | 32px | Padding left of a slide | +| --slide-padding-start | 32px | Modify slotted ul and ol padding-inline-start | +| --slide-author-align | inherit | Modify for example to center if you want to align the content in the middle | +| --slide-author-text-align | inherit | Modify for example to center if you want to align the text in the middle | +| --slide-author-img-size | 80% | The size of the image of the left pane | +| --slide-author-social-padding-top | 32px | The spacing between the author description and the social links | +| --zIndex | 1 | The z-index of the slide | + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/slides/app-slide-chart/app-slide-chart.md b/docs/docs/slides/app-slide-chart/app-slide-chart.md new file mode 100644 index 000000000..e249936a4 --- /dev/null +++ b/docs/docs/slides/app-slide-chart/app-slide-chart.md @@ -0,0 +1,94 @@ +# Slide: Chart + +The "Chart" slide let you draw easily charts in your presentation. + +## Table of contents + +- [Layout](#app-slide-chart-layout) +- [Usage](#app-slide-chart-usage) + - [Slots](#app-slide-chart-slots) + - [Notes](#app-slide-chart-notes) +- [Chart components](#app-slide-chart-chart-components) +- [Installation](#app-slide-chart-installation) +- [Attributes](#app-slide-chart-attributes) +- [Theming](#app-slide-chart-theming) + +## Layout + +
+ + +

slot="title"

+
+ +

slot="title"

+
+ +

slot="title"

+
+
+
+ +## Usage + +The "Chart" slide's Web Component could be integrated using the tag ``. + +``` + +

My Pie chart

+
+``` + +### Slots + +The slot `title` is optional. + +### Notes + +Optionally a slot `notes` could be use to add some notes regarding the particular slide. These will be automatically `displayed` in the [remote control](https://deckdeckgo.app). + +If you are using the [DeckDeckGo] starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute `show`. + +## Chart components + +The slide "Chart" relies on the charts components ``, `` and `` which are described in the components [documentation](https://github.com/deckgo/deckdeckgo/blob/master/doc/components/components.md). + +## Installation + +The [DeckDeckGo] charts components are provided in separate extra library. If you don't use the [DeckDeckGo] starter kit and wish to add the [DeckDeckGo] chart to your project, you will need to install and integrate it from a CDN or [npm](https://www.npmjs.com/package/deckdeckgo-charts) as described in its [installation guide](https://github.com/deckgo/deckdeckgo-charts#getting-started). + +## Attributes + +This component offers the following options which could be set using attributes: + +| Attribute | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| type | string | pie | The type of the chart, `pie`, `line` or `bar` | + +Furthermore, this slide component offers the same attributes as the [DeckDeckGo] charts Web Component, see its [documentation](https://github.com/deckgo/deckdeckgo-charts) for the details. + +## Theming + +The following theming options will affect this component if set on its host or parent. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --background | | | +| --color | | | +| --slide-padding-top | 16px | Padding top of the all slide | +| --slide-padding-end | 32px | Padding right of the all slide | +| --slide-padding-bottom | 16px | Padding bottom of the all slide | +| --slide-padding-start | 32px | Padding left of the all slide | +| --zIndex | 1 | The z-index of the slide | +| --slide-chart-margin-top | 32px | Margin top of the chart inside its container | +| --slide-chart-margin-end | 96px | Margin right of the chart inside its container | +| --slide-chart-margin-bottom | 32px | Margin bottom of the chart inside its container | +| --slide-chart-margin-start | 32px | Margin left of the chart inside its container | + +Furthermore, this slide component offers the exact same CSS4 variables as the [DeckDeckGo] charts Web Component, see its [documentation](https://github.com/deckgo/deckdeckgo-charts) for the details. + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/slides/app-slide-code/app-slide-code.md b/docs/docs/slides/app-slide-code/app-slide-code.md new file mode 100644 index 000000000..8636c6e23 --- /dev/null +++ b/docs/docs/slides/app-slide-code/app-slide-code.md @@ -0,0 +1,133 @@ +# Slide: Code + +The "Code" slide is a the slide to use if you would like to showcase code during your talk. + +## Table of contents + +- [Layout](#app-slide-code-layout) +- [Usage](#app-slide-code-usage) + - [Usage with file URI](#app-slide-code-usage-with-file-uri) + - [Usage with slotted element](#app-slide-code-usage-with-slotted-element) + - [Slots](#app-slide-code-slots) + - [Notes](#app-slide-code-notes) +- [Code components](#app-slide-code-code-components) +- [Installation](#app-slide-code-installation) +- [Attributes](#app-slide-code-attributes) + - [Example with file URI](#app-slide-code-example-with-file-uri) + - [Example with slotted element](#app-slide-code-example-with-slotted-element) +- [Theming](#app-slide-code-theming) + +## Layout + +
+ + +

slot="title"

+
+
+
+ +## Usage + +The "Code" slide's Web Component could be integrated using the tag ``. + +You could provide a file URI to the code you want to display or provide it with a slotted element. + +### Usage with file URI + +``` + + +

My code

+
+
+``` + +### Usage with slotted element + +``` + + +

Manual code

+ + interface DeckDeckGoDemo { + boolean helloWorld(); + } +
+
+``` + +### Slots + +The slots `title` and `code` are optional. + +This template also exposes a slot `info` which would let you display an information over your code on mobile devices, useful to explain your reader that they should click to switch between vertical and horizontal scrolling. Find an example of the use of that slot on the [DeckDeckGo] website. + +### Notes + +Optionally a slot `notes` could be use to add some notes regarding the particular slide. These will be automatically `displayed` in the [remote control](https://deckdeckgo.app). + +If you are using the [DeckDeckGo] starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute `show`. + +## Code components + +The slide "Code" relies on the code component `` which is described in the components [documentation](https://github.com/deckgo/deckdeckgo/blob/master/doc/components/components.md). + +## Installation + +The [DeckDeckGo] - Hightlight code component is provided in separate extra library. If you don't use the [DeckDeckGo] starter kit and wish to add the [DeckDeckGo] code to your project, you will need to install and integrate it from a CDN or [npm](https://www.npmjs.com/package/deckdeckgo-highlight-code) as described in its [installation guide](https://github.com/deckgo/deckdeckgo-highlight-code#getting-started). + +## Attributes + +At least `src` or the `slot` code should be provided in order to render code in this template. It offers the same attributes as the [DeckDeckGo] code Web Component, see its [documentation](https://github.com/deckgo/deckdeckgo-highlight-code) for the details. + +### Example with file URI + +``` + + +

Code

+
+
+``` + +### Example with slotted element + +``` + + +

Manual code

+ interface NumericTest { + boolean computeTest(int n); + } + + public static void main(String args[]) { + NumericTest isEven = (n) -> (n % 2) == 0; + NumericTest isNegative = (n) -> (n < 0); + + // Output: false + System.out.println(isEven.computeTest(5)); + + // Output: true + System.out.println(isNegative.computeTest(-5)); + } +
+
+``` + +## Theming + +The following theming options will affect this component if set on its host or parent. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --background | | | +| --color | | | +| --slide-padding-top | 16px | Padding top of the all slide | +| --slide-padding-end | 32px | Padding right of the all slide | +| --slide-padding-bottom | 16px | Padding bottom of the all slide | +| --slide-padding-start | 32px | Padding left of the all slide | + +Furthermore, this slide component offers the exact same CSS4 variables as the [DeckDeckGo] - Highlight code Web Component, see its [documentation](https://github.com/deckgo/deckdeckgo-highlight-code) for the details. + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/slides/app-slide-content/app-slide-content.md b/docs/docs/slides/app-slide-content/app-slide-content.md new file mode 100644 index 000000000..3c1b322de --- /dev/null +++ b/docs/docs/slides/app-slide-content/app-slide-content.md @@ -0,0 +1,92 @@ +# Slide: Content + +The "Content" slide is a simple slide which display its title and content aligned to the start of the page. + +This slide could be for example use for the every slides of your presentation where you would like to display content related to your talk. + +## Table of contents + +- [Layout](#app-slide-content-layout) +- [Usage](#app-slide-content-usage) + - [Slots](#app-slide-content-slots) + - [Notes](#app-slide-content-notes) +- [Attributes](#app-slide-content-attributes) + - [Example](#app-slide-content-example) +- [Theming](#app-slide-content-theming) + +## Layout + +
+ + +

Something related to my topic

+

+ Cool beans +

+
+
+
+ +## Usage + +The "Content" slide's Web Component could be integrated using the tag ``. + +``` + + +

Something related to my topic

+

+ Cool beans +

+
+
+``` + +### Slots + +Both slots `title` and `content` are optional. Without providing one of them, the page will remain empty. + +### Notes + +Optionally a slot `notes` could be use to add some notes regarding the particular slide. These will be automatically `displayed` in the [remote control](https://deckdeckgo.app). + +If you are using the [DeckDeckGo] starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute `show`. + +## Attributes + +This component offers the following options which could be set using attributes: + +| Attribute | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| reveal | boolean | false | Hide the slotted elements `li`, `p` an `img` and display them when navigating using `slideNext()` or `slidePrev()` (see [documention](/doc/features/navigation.md)) | +| reveal-show-first | boolean | false | Show the first elements which would be hidden if `reveal` is set to `true` | + +### Example + +``` + + +

Something related to my topic

+
    +
  • Cool
  • +
  • Beans
  • +
+
+
+``` + +## Theming + +The following theming options will affect this component if set on its host or parent. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --background | | | +| --color | | | +| --slide-padding-top | 16px | Padding top of the all slide | +| --slide-padding-end | 32px | Padding right of the all slide | +| --slide-padding-bottom | 16px | Padding bottom of the all slide | +| --slide-padding-start | 32px | Padding left of the all slide | +| --zIndex | 1 | The z-index of the slide | + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/slides/app-slide-gif/app-slide-gif.md b/docs/docs/slides/app-slide-gif/app-slide-gif.md new file mode 100644 index 000000000..d70c4e14f --- /dev/null +++ b/docs/docs/slides/app-slide-gif/app-slide-gif.md @@ -0,0 +1,82 @@ +# Slide: Gif + +The "Gif" slide let you add easily a gif, like those provided by [Giphy](https://giphy.com), to your presentation. + +## Table of contents + +- [Layout](#app-slide-gif-layout) +- [For images too](#app-slide-gif-for-images-too) +- [Usage](#app-slide-gif-usage) + - [Slots](#app-slide-gif-slots) + - [Notes](#app-slide-gif-notes) +- [Gif component](#app-slide-gif-gif-component) +- [Attributes](#app-slide-gif-attributes) +- [Theming](#app-slide-gif-theming) + +## Layout + +
+ + +

My title

+

Hey

+

It's a cool gif

+
+
+
+ +## For images too + +The slide Gif is useful for Gifs but could be use for any images too, in case you would like for example to display an image fullscreen. + +## Usage + +The "Gif" slide's Web Component could be integrated using the tag ``. + +``` + +

My title

+

Hey

+

It's a cool gif

+
+``` + +### Slots + +The slots `title`, `header` and `footer` are both optional. `header` and `footer` would be displayed over the gif. + +### Notes + +Optionally a slot `notes` could be use to add some notes regarding the particular slide. These will be automatically `displayed` in the [remote control](https://deckdeckgo.app). + +If you are using the [DeckDeckGo] starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute `show`. + +## Gif component + +The slide "Gif" relies on the component `` which is described in the components [documentation](https://github.com/deckgo/deckdeckgo/blob/master/doc/components/components.md). + +## Attributes + +This component offers the following options which could be set using attributes: + +| Attribute | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| src | string | | The source url, the src, of the Gif. Could be an embeddable external url or a local one. | +| alt | string | | And alt information could be provided for accessibility reason. | +| fullscreen | number | false | If set to true, the gif width and height will be related to the slide width and height respectively will be fullscreen. | + +## Theming + +The following theming options will affect this component if set on its host or parent. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --background | | | +| --color | | | +| --slide-padding-top | 16px | Padding top of the all slide | +| --slide-padding-end | 32px | Padding right of the all slide | +| --slide-padding-bottom | 16px | Padding bottom of the all slide | +| --slide-padding-start | 32px | Padding left of the all slide | +| --zIndex | 1 | The z-index of the slide | + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/slides/app-slide-qrcode/app-slide-qrcode.md b/docs/docs/slides/app-slide-qrcode/app-slide-qrcode.md new file mode 100644 index 000000000..b8f0c23ff --- /dev/null +++ b/docs/docs/slides/app-slide-qrcode/app-slide-qrcode.md @@ -0,0 +1,94 @@ +# Slide: QR Code + +The "QR code" slide is an handy slide in case you would like to display a QR code. It could for example be use as the very last slide of your presentation to display an easy link pointing to your deck, you previously published online. It would allow your audience to get easily your slides without any delay on their phone. + +## Table of contents + +- [Layout](#app-slide-qrcode-layout) +- [Usage](#app-slide-qrcode-usage) + - [Usage](#app-slide-qrcode-usage-1) + - [Slots](#app-slide-qrcode-slots) + - [Notes](#app-slide-qrcode-notes) +- [Code components](#app-slide-qrcode-code-components) +- [Installation](#app-slide-qrcode-installation) +- [Attributes](#app-slide-qrcode-attributes) + - [Example without any slots](#app-slide-qrcode-example-without-any-slots) +- [Theming](#app-slide-qrcode-theming) + +## Layout + +
+ + +

slot="title"

+

slot="content"

+
+
+
+ +## Usage + +The "QR code" slide's Web Component could be integrated using the tag ``. + +### Usage + +``` + + +

My QR code

+

An optional additional content

+
+
+``` + +### Slots + +The slots `title` and `content` are optional. + +### Notes + +Optionally a slot `notes` could be use to add some notes regarding the particular slide. These will be automatically `displayed` in the [remote control](https://deckdeckgo.app). + +If you are using the [DeckDeckGo] starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute `show`. + +## Code components + +The slide "QR Code" relies on the code component `` which is described in the components [documentation](https://github.com/deckgo/deckdeckgo/blob/master/doc/components/components.md). + +## Installation + +The [DeckDeckGo] - QR Code component is provided in separate extra library. If you don't use the [DeckDeckGo] starter kit and wish to add the [DeckDeckGo] QR code to your project, you will need to install and integrate it from a CDN or [npm](https://www.npmjs.com/package/deckdeckgo-qrcode) as described in its [installation guide](https://github.com/deckgo/deckdeckgo-qrcode#getting-started). + +## Attributes + +The attribute `content` should be provided in order to render a QR code in this template. It offers the same attributes as the [DeckDeckGo] QR code Web Component, see its [documentation](https://github.com/deckgo/deckdeckgo-qrcode) for the details. + +### Example without any slots + +``` + + + + +``` + +## Theming + +The following theming options will affect this component if set on its host or parent. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --background | | | +| --color | | | +| --slide-padding-top | 16px | Padding top of the all slide | +| --slide-padding-end | 32px | Padding right of the all slide | +| --slide-padding-bottom | 16px | Padding bottom of the all slide | +| --slide-padding-start | 32px | Padding left of the all slide | +| --slide-qrcode-align | center | QR code vertical alignment | +| --slide-qrcode-text-align | center | QR code horizontal alignment | +| --slide-qrcode-background | | QR code column's background | +| --slide-qrcode-title-display | inherit | If you wish to hide the slot="title" | + +Furthermore, this slide component offers the exact same CSS4 variables as the [DeckDeckGo] - QR code Web Component, see its [documentation](https://github.com/deckgo/deckdeckgo-qrcode) for the details. + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/slides/app-slide-split/app-slide-split.md b/docs/docs/slides/app-slide-split/app-slide-split.md new file mode 100644 index 000000000..3a3644222 --- /dev/null +++ b/docs/docs/slides/app-slide-split/app-slide-split.md @@ -0,0 +1,97 @@ +# Slide: Split + +The "Split" slide is a simple slide which display two panes on the page. + +## Table of contents + +- [Layout](#app-slide-split-layout) +- [Usage](#app-slide-split-usage) + - [Slots](#app-slide-split-slots) + - [Notes](#app-slide-split-notes) +- [Attributes](#app-slide-split-attributes) +- [Theming](#app-slide-split-theming) + +## Layout + +
+ + +

Two columns subject

+

+ The content you want to display on the left side of the page +

+

+ The content you want to display on the right side of the page +

+
+
+
+ +## Usage + +The "Split" slide's Web Component could be integrated using the tag ``. + +``` + + +

Two columns subject

+

+ The content you want to display on the left side of the page +

+

+ The content you want to display on the right side of the page +

+
+
+``` + +### Slots + +Both slots `title`, `start` and `end` are optional. Without providing one of them, the page will remain empty. + +The `start` slot is the content of the left pane respectively the slot `end` is the content of the right pane. + +Note: The slot `title` is per default hidden even if you provide it. See attributes below if you wish to display it. + +### Notes + +Optionally a slot `notes` could be use to add some notes regarding the particular slide. These will be automatically `displayed` in the [remote control](https://deckdeckgo.app). + +If you are using the [DeckDeckGo] starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute `show`. + +## Attributes + +This component offers the following options which could be set using attributes: + +| Attribute | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| reveal | boolean | false | Hide the slotted elements `li`, `p` an `img` and display them when navigating using `slideNext()` or `slidePrev()` (see [documention](/doc/features/navigation.md)) | +| reveal-show-first | boolean | false | Show the first elements which would be hidden if `reveal` is set to `true` | + +## Theming + +The following theming options will affect this component if set on its host or parent. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --background | | | +| --color | | | +| --slide-split-background-start | | Left split pane background | +| --slide-split-color-start | | Left split pane color | +| --slide-split-background-end | | Right split pane background | +| --slide-split-color-end | | Right split pane color | +| --slide-split-padding-top | 16px | Padding top of a slide split pane | +| --slide-split-padding-end | 32px | Padding right of a slide split pane | +| --slide-split-padding-bottom | 16px | Padding bottom of a slide split pane | +| --slide-split-padding-start | 32px | Padding left of a slide split pane | +| --slide-split-title-padding-top | 16px | Padding top of the title of the | +| --slide-split-title-padding-end | 32px | Padding right of the title of the | +| --slide-split-title-padding-bottom | 16px | Padding bottom of the title of the | +| --slide-split-title-padding-start | 32px | Padding left of the title of the | +| --slide-padding-start | 32px | Modify slotted ul and ol padding-inline-start | +| --slide-split-align | inherit | Modify for example to center if you want to align the content in the middle | +| --slide-split-text-align | inherit | Modify for example to center if you want to align the text in the middle | +| --slide-split-title-display | none | The `slot` title is per default hidden even if you provide it. If you wish to displays it, modify this attribute | +| --zIndex | 1 | The z-index of the slide | + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/slides/app-slide-title/app-slide-title.md b/docs/docs/slides/app-slide-title/app-slide-title.md new file mode 100644 index 000000000..602d5388f --- /dev/null +++ b/docs/docs/slides/app-slide-title/app-slide-title.md @@ -0,0 +1,113 @@ +# Slide: Title + +The "Title" slide is a simple slide which display its title and content center in the middle of the page. + +This slide could be for example use for the very first and last slide of your presentation. + +## Table of contents + +- [Layout](#app-slide-title-layout) +- [Usage](#app-slide-title-usage) + - [Slots](#app-slide-title-slots) + - [Notes](#app-slide-title-notes) +- [Attributes](#app-slide-title-attributes) +- [Example](#app-slide-title-example) +- [Theming](#app-slide-title-theming) + +## Layout + +
+ + +

My presentation title

+

+ Hello World 🚀 +

+
+
+
+ +## Usage + +The "Title" slide's Web Component could be integrated using the tag ``. + +``` + + +

My presentation title

+

+ Hello World 🚀 +

+
+
+``` + +### Slots + +Both slots `title` and `content` are optional. Without providing one of them, the page will remain empty. + +### Notes + +Optionally a slot `notes` could be use to add some notes regarding the particular slide. These will be automatically `displayed` in the [remote control](https://deckdeckgo.app). + +``` + + +

My presentation title

+
A note regarding this particular slide
+ +And another note on a new line about it too. +
+
+``` + +If you are using the [DeckDeckGo] starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute `show`. + +``` + + +

My presentation title

+
A note displayed in the presentation within a modal accessible for anyone
+
+
+``` + +## Attributes + +This component offers the following options which could be set using attributes: + +| Attribute | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| reveal | boolean | false | Hide the slotted elements `li`, `p` an `img` and display them when navigating using `slideNext()` or `slidePrev()` (see [documention](/doc/features/navigation.md)) | +| reveal-show-first | boolean | false | Show the first elements which would be hidden if `reveal` is set to `true` | + +## Example + +``` + + +

My presentation title

+
    +
  • Hello
  • +
  • World
  • +
  • 🚀
  • +

    + + +``` + +## Theming + +The following theming options will affect this component if set on its host or parent. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --background | | | +| --color | | | +| --slide-padding-top | 16px | Padding top of the all slide | +| --slide-padding-end | 32px | Padding right of the all slide | +| --slide-padding-bottom | 16px | Padding bottom of the all slide | +| --slide-padding-start | 32px | Padding left of the all slide | +| --zIndex | 1 | The z-index of the slide | + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/slides/app-slide-youtube/app-slide-youtube.md b/docs/docs/slides/app-slide-youtube/app-slide-youtube.md new file mode 100644 index 000000000..cbea0540a --- /dev/null +++ b/docs/docs/slides/app-slide-youtube/app-slide-youtube.md @@ -0,0 +1,103 @@ +# Slide: Youtube + +The "Youtube" slide let you add easily a [Youtube](https://youtube.com) video to your presentation. + +## Table of contents + +- [Layout](#app-slide-youtube-layout) +- [Usage](#app-slide-youtube-usage) + - [Slots](#app-slide-youtube-slots) + - [Notes](#app-slide-youtube-notes) + - [Youtube component](#app-slide-youtube-youtube-component) +- [Attributes](#app-slide-youtube-attributes) +- [Theming](#app-slide-youtube-theming) +- [Methods](#app-slide-youtube-methods) + - [Play the video](#app-slide-youtube-play-the-video) + - [Pause the video](#app-slide-youtube-pause-the-video) + +## Layout + +
    + + +

    A 16/9 video

    +
    +
    +
    + +## Usage + +The "Youtube" slide's Web Component could be integrated using the tag ``. + +``` + +

    A 16/9 video

    +
    +``` + +### Slots + +The slot `title` is optional. + +### Notes + +Optionally a slot `notes` could be use to add some notes regarding the particular slide. These will be automatically `displayed` in the [remote control](https://deckdeckgo.app). + +If you are using the [DeckDeckGo] starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute `show`. + +### Youtube component + +The slide "Youtube" relies on the component `` which is described in the components [documentation](https://github.com/deckgo/deckdeckgo/blob/master/doc/components/components.md). + +## Attributes + +This component offers the following options which could be set using attributes: + +| Attribute | Type | Default | Description | +| -------------------------- |-----------------|-----------------|-----------------| +| src | string | | The source url, the Youtube url, of the video. Not embeddable url will be automatically converted to embeddable url supported by Youtube. | +| width | number | Per default the video width will be calculated according the content size available. | Using this option you would be able to define your own width. | +| height | number | Per default the video height will be calculated according the content size available. | Using this option you would be able to define your own height. | + +## Theming + +The following theming options will affect this component if set on its host or parent. + +| CSS4 variable | Default | Note | +| -------------------------- |-----------------|-----------------| +| --background | | | +| --color | | | +| --slide-padding-top | 16px | Padding top of the all slide | +| --slide-padding-end | 32px | Padding right of the all slide | +| --slide-padding-bottom | 16px | Padding bottom of the all slide | +| --slide-padding-start | 32px | Padding left of the all slide | +| --zIndex | 1 | The z-index of the slide | + +## Methods + +The slide "Youtube" offers extra methods to play and pause the Youtube video clip. These methods are notably used by the [DeckDecGo]'s remote control. + +### Play the video + +``` +const slide = deck.getElementsByTagName('deckgo-slide-youtube'); +await slide.play(); +``` + +### Pause the video + +``` +const slide = deck.getElementsByTagName('deckgo-slide-youtube'); +await slide.pause(); +``` + +### Toggle the video + +Toggle will take care to pause or play the video according its current state. + +``` +const slide = deck.getElementsByTagName('deckgo-slide-youtube'); +await slide.toggle(); +``` + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/docs/slides/app-slides-concept/app-slides-concept.md b/docs/docs/slides/app-slides-concept/app-slides-concept.md new file mode 100644 index 000000000..5c769f72d --- /dev/null +++ b/docs/docs/slides/app-slides-concept/app-slides-concept.md @@ -0,0 +1,151 @@ +# Concept + +[DeckDeckGo] is a deck of slides where each slide is based on a template which has its own layout and behaviour. Their content could be edited and structured using `slots` and other attributes. + +The parent deck should be declared using the tag `` and each slide should be added as its children. + +``` + + +

    The first slide

    +

    + Hello World 🚀 +

    +
    + + +

    The second slide

    +
    +
    +``` + +In the previous example, the presentation contains two slides. The first slide use the template `deckgo-slide-title` and the second slide use the template `deckgo-slide-content`. + +# Templates + +[DeckDeckGo] provide the following templates: + +* Slide: [Title](/slides/title) + +
    + + +

    slot="title"

    +

    + slot="content" +

    +
    +
    +
    + +* Slide: [Content](/slides/content) + +
    + + +

    slot="title"

    +

    + slot="content" +

    +
    +
    +
    + +* Slide: [Split](/slides/split) + +
    + + +

    slot="title"

    +

    + slot="start" +

    +

    + slot="end" +

    +
    +
    +
    + +* Slide: [Gif](/slides/gif) + +
    + + +

    slot="title"

    +

    slot="header"

    +

    slot="footer"

    +
    +
    +
    + +* Slide: [Chart](/slides/chart) + +
    + + +

    slot="title"

    +
    + +

    slot="title"

    +
    + +

    slot="title"

    +
    +
    +
    + +* Slide: [Youtube](/slides/youtube) + +
    + + +

    slot="title"

    +
    +
    +
    + +* Slide: [Code](/slides/code) + +
    + + +

    slot="title"

    +
    +
    +
    + +* Slide: [Author](/slides/author) + + +
    + + +

    slot="title"

    +
    slot="author"
    +
    twitter
    +
    linkedin
    +
    +
    +
    + +* Slide: [QR Code](/slides/qrcode) + +
    + + +

    slot="title"

    +

    slot="content"

    +
    +
    +
    + +## Note + +If you would miss or need further templates, don't hesitate to open an issue and/or submit a PR, it would be my pleasure to add more options. + +[DeckDeckGo]: https://deckdeckgo.com \ No newline at end of file diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 000000000..4be9fb617 --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,4408 @@ +{ + "name": "deckdeckgo-docs", + "version": "1.0.0-alpha.3", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@ionic/core": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-4.0.1.tgz", + "integrity": "sha512-2Zgrs8C+SiGUTPKIAjcVomrPd7cT1A09kSt6CiGDoXtKYRaaF1bVr5NvrjyPa2rfplCtKH5TGhgiAvCvzxLLZQ==", + "requires": { + "ionicons": "4.5.5" + } + }, + "@stencil/core": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-0.18.0.tgz", + "integrity": "sha512-ntv936jPJPbDPyLkYKPyowEH1xu35t+VtLv5Eb9W8NpyjKcR9fp4zpM3zB5OcD0feeF6hQ1dXiYQXPFc7+QbQg==", + "dev": true, + "requires": { + "chokidar": "2.0.3", + "jsdom": "11.11.0", + "typescript": "3.3.3" + } + }, + "@stencil/postcss": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@stencil/postcss/-/postcss-0.1.0.tgz", + "integrity": "sha512-p1Eo3+SkxHOdshEawZBx5SuQRQdHtHNS1ykSzEy0l2IMQNZs9CSwKrTORcUfovXlfQIBj6RNGn2pJEeFr+7lLA==", + "dev": true, + "requires": { + "postcss": "6.0.20" + } + }, + "@stencil/sass": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@stencil/sass/-/sass-0.1.1.tgz", + "integrity": "sha512-vhEP1Tk+/ADjiohFvjSeNQNGUIAhL4Diolg8TiA5+H1zbtKNoZjoCVEt2+w/s846tpsOCsDZYLe7NZABMSQ1Lw==", + "dev": true, + "requires": { + "node-sass": "4.9.3" + } + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/marked": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.6.0.tgz", + "integrity": "sha512-TxwhgR9VsIfRDJ3WwFokG8Xu+ea0nYGDRHdI783WJ983uffatz0ytIeUEIBOwPvRy241KRSNVyywQltuTqDh0w==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "11.9.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.9.3.tgz", + "integrity": "sha512-DMiqG51GwES/c4ScBY0u5bDlH44+oY8AeYHjY1SGCWidD7h08o1dfHue/TGK7REmif2KiJzaUskO+Q0eaeZ2fQ==", + "dev": true + }, + "abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", + "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz", + "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", + "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "dev": true + }, + "ajv": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.0.tgz", + "integrity": "sha512-VsK2jpqRno3Hn+at4NGtBRpR5q3OW7n5INrTKqENDNQJB99DXATQEVHlnoD1BA7Uo/qGO+ijGA/vgSAlxP9E4A==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.7.tgz", + "integrity": "sha512-qS5wW6aXHkm53Y4z73tFGsUhmZu4aMPV9iHXYlF0c/wxjknXNHuj/1cIQb+6YH692DbJGGWcckAXX+VxKvahMA==", + "dev": true, + "requires": { + "browserslist": "^4.4.1", + "caniuse-lite": "^1.0.30000932", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.14", + "postcss-value-parser": "^3.3.1" + }, + "dependencies": { + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", + "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browserslist": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", + "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000929", + "electron-to-chromium": "^1.3.103", + "node-releases": "^1.1.3" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30000935", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000935.tgz", + "integrity": "sha512-1Y2uJ5y56qDt3jsDTdBHL1OqiImzjoQcBG6Yl3Qizq8mcc2SgCFpi+ZwLLqkztYnk9l87IYqRlNBnPSOTbFkXQ==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", + "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.1.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.0" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clipboard": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz", + "integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz", + "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "cssom": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", + "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", + "dev": true + }, + "cssstyle": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz", + "integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "d3-array": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.0.3.tgz", + "integrity": "sha512-C7g4aCOoJa+/K5hPVqZLG8wjYHsTUROTk7Z1Ep9F4P5l+WVrvV0+6nAZ1wKTRLMhFWpGbozxUpyjIPZYAaLi+g==" + }, + "d3-axis": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", + "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, + "d3-color": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.2.3.tgz", + "integrity": "sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw==" + }, + "d3-format": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz", + "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ==" + }, + "d3-interpolate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.3.2.tgz", + "integrity": "sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==", + "requires": { + "d3-color": "1" + } + }, + "d3-path": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.7.tgz", + "integrity": "sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA==" + }, + "d3-scale": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + }, + "dependencies": { + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + } + } + }, + "d3-scale-chromatic": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.3.3.tgz", + "integrity": "sha512-BWTipif1CimXcYfT02LKjAyItX5gKiwxuPRgr4xM58JwlLocWbjPLI7aMEjkcoOQXMkYsmNsvv3d2yl/OKuHHw==", + "requires": { + "d3-color": "1", + "d3-interpolate": "1" + } + }, + "d3-selection": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.0.tgz", + "integrity": "sha512-EYVwBxQGEjLCKF2pJ4+yrErskDnz5v403qvAid96cNdCMr8rmCYfY5RGzWz24mdIbxmDf6/4EAH+K9xperD5jg==" + }, + "d3-shape": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.4.tgz", + "integrity": "sha512-izaz4fOpOnY3CD17hkZWNxbaN70sIGagLR/5jb6RS96Y+6VqX+q1BQf1av6QSBRdfULi3Gb8Js4CzG4+KAPjMg==", + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.11.tgz", + "integrity": "sha512-Z3wpvhPLW4vEScGeIMUckDW7+3hWKOQfAWg/U7PlWBnQmeKQ00gCUsTtWSYulrKNA7ta8hJ+xXc6MHrMuITwEw==" + }, + "d3-time-format": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.3.tgz", + "integrity": "sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==", + "requires": { + "d3-time": "1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "abab": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "dev": true + }, + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "date-fns": { + "version": "2.0.0-alpha.27", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.0.0-alpha.27.tgz", + "integrity": "sha512-cqfVLS+346P/Mpj2RpDrBv0P4p2zZhWWvfY5fuWrXNR/K38HaAGEkeOwb47hIpQP9Jr/TIxjZ2/sNMQwdXuGMg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deckdeckgo": { + "version": "1.0.0-beta.26", + "resolved": "https://registry.npmjs.org/deckdeckgo/-/deckdeckgo-1.0.0-beta.26.tgz", + "integrity": "sha512-riOBji4UILiWTMfmb6nQQGFzgUt6Qmi2ENLBqJxk+SpHplalLHGRIPB3S0jHUCpnNtAi3hV1jexodMhA+eCzvQ==" + }, + "deckdeckgo-charts": { + "version": "1.0.0-alpha.5", + "resolved": "https://registry.npmjs.org/deckdeckgo-charts/-/deckdeckgo-charts-1.0.0-alpha.5.tgz", + "integrity": "sha512-GJYo4hCAWIqHYinPto0SxoYK2PdFlscf6158EpObGyK8qfknoU6V+pOjYVkW9VCpOHWda98Q50Zu7ZM58T7SeA==", + "requires": { + "d3-array": "^2.0.3", + "d3-axis": "^1.0.12", + "d3-scale": "^2.2.2", + "d3-scale-chromatic": "^1.3.3", + "d3-selection": "^1.4.0", + "d3-shape": "^1.3.4", + "date-fns": "^2.0.0-alpha.26" + } + }, + "deckdeckgo-highlight-code": { + "version": "1.0.0-alpha.11", + "resolved": "https://registry.npmjs.org/deckdeckgo-highlight-code/-/deckdeckgo-highlight-code-1.0.0-alpha.11.tgz", + "integrity": "sha512-xJaKv5tReosZ98HNbEHDkbpfBBrF3WiI27nk3HZv9az3p7Tup2tWvbLsv+6mjEZCPiSLWnoT1SaxPJ4QCDxMoA==", + "requires": { + "prismjs": "^1.15.0" + } + }, + "deckdeckgo-qrcode": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/deckdeckgo-qrcode/-/deckdeckgo-qrcode-1.0.0-alpha.6.tgz", + "integrity": "sha512-CfzuB6d1x1pTHxNWG4HRuOzZsE19Z8rR3aSB6DT9vfZUMD4y9VhXvjCo75mqt4VbWKQeaLd1txz5FuNxkYIQRg==" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.3.113", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", + "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", + "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ionicons": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-4.5.5.tgz", + "integrity": "sha512-dIGI73XG6Fg2Ps77ry5Ywe36Pq7wUGkDkl0pBhC4uhsiyoW+oXe+pplmarXEnKEcB5fmlkRrBOxYYzZaoRiUGw==" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "dev": true, + "requires": { + "punycode": "2.x.x" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "joi": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-11.4.0.tgz", + "integrity": "sha512-O7Uw+w/zEWgbL6OcHbyACKSj0PkQeUgmehdoXVSxt92QFCq4+1390Rwh5moI2K/OgC7D8RHRZqHZxT2husMJHA==", + "dev": true, + "requires": { + "hoek": "4.x.x", + "isemail": "3.x.x", + "topo": "2.x.x" + } + }, + "js-base64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.11.0.tgz", + "integrity": "sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A==", + "dev": true, + "requires": { + "abab": "^1.0.4", + "acorn": "^5.3.0", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.3.1 < 0.4.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.0", + "escodegen": "^1.9.0", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.2.0", + "nwsapi": "^2.0.0", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.83.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.3", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^4.0.0", + "xml-name-validator": "^3.0.0" + } + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.template": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", + "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "dev": true, + "requires": { + "lodash._reinterpolate": "~3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", + "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "dev": true, + "requires": { + "lodash._reinterpolate": "~3.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "marked": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.0.tgz", + "integrity": "sha512-HduzIW2xApSXKXJSpCipSxKyvMbwRRa/TwMbepmlZziKdH8548WSoDP4SxzulEKjlo8BE39l+2fwJZuRKOln6g==", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "dev": true + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "dev": true, + "requires": { + "mime-db": "~1.37.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.7.tgz", + "integrity": "sha512-bKdrwaqJUPHqlCzDD7so/R+Nk0jGv9a11ZhLrD9f6i947qGLrGAhU3OxRENa19QQmwzGy/g6zCDEuLGDO8HPvA==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "node-sass": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", + "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "2.87.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "^1.4.1" + } + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwsapi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.0.tgz", + "integrity": "sha512-ZG3bLAvdHmhIjaQ/Db1qvBxsGvFMLIRpQszyqbg31VJ53UP++uZX1/gf3Ut96pdwN9AuDwlMqIYLm0UPCdUeHg==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "6.0.20", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.20.tgz", + "integrity": "sha512-Opr6usW30Iy0xEDrJywDckRxtylfO7gTGs3Kfb2LdLQlGsUg89fTy0R3Vm1Dub2YHO7MK58avr0p70+uFFHb7A==", + "dev": true, + "requires": { + "chalk": "^2.3.2", + "source-map": "^0.6.1", + "supports-color": "^5.3.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "dev": true + }, + "prismjs": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.15.0.tgz", + "integrity": "sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA==", + "requires": { + "clipboard": "^2.0.0" + } + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, + "requires": { + "lodash": "^4.13.1" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "topo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", + "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", + "dev": true, + "requires": { + "hoek": "4.x.x" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typescript": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3.tgz", + "integrity": "sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "workbox-background-sync": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-3.6.3.tgz", + "integrity": "sha512-ypLo0B6dces4gSpaslmDg5wuoUWrHHVJfFWwl1udvSylLdXvnrfhFfriCS42SNEe5lsZtcNZF27W/SMzBlva7Q==", + "dev": true, + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-broadcast-cache-update": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.6.3.tgz", + "integrity": "sha512-pJl4lbClQcvp0SyTiEw0zLSsVYE1RDlCPtpKnpMjxFtu8lCFTAEuVyzxp9w7GF4/b3P4h5nyQ+q7V9mIR7YzGg==", + "dev": true, + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-build": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-3.4.1.tgz", + "integrity": "sha512-Qi04XdHjkXbRN0CV5XO1oqDWbJSIm7VYhxmxjtnVcKK8PrMT6rOUFUi9ziDI+8UQgcXbLK4ZChWf2ptZS1/MbA==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "common-tags": "^1.4.0", + "fs-extra": "^4.0.2", + "glob": "^7.1.2", + "joi": "^11.1.1", + "lodash.template": "^4.4.0", + "pretty-bytes": "^4.0.2", + "workbox-background-sync": "^3.4.1", + "workbox-broadcast-cache-update": "^3.4.1", + "workbox-cache-expiration": "^3.4.1", + "workbox-cacheable-response": "^3.4.1", + "workbox-core": "^3.4.1", + "workbox-google-analytics": "^3.4.1", + "workbox-navigation-preload": "^3.4.1", + "workbox-precaching": "^3.4.1", + "workbox-range-requests": "^3.4.1", + "workbox-routing": "^3.4.1", + "workbox-strategies": "^3.4.1", + "workbox-streams": "^3.4.1", + "workbox-sw": "^3.4.1" + } + }, + "workbox-cache-expiration": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-cache-expiration/-/workbox-cache-expiration-3.6.3.tgz", + "integrity": "sha512-+ECNph/6doYx89oopO/UolYdDmQtGUgo8KCgluwBF/RieyA1ZOFKfrSiNjztxOrGJoyBB7raTIOlEEwZ1LaHoA==", + "dev": true, + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-cacheable-response": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-3.6.3.tgz", + "integrity": "sha512-QpmbGA9SLcA7fklBLm06C4zFg577Dt8u3QgLM0eMnnbaVv3rhm4vbmDpBkyTqvgK/Ly8MBDQzlXDtUCswQwqqg==", + "dev": true, + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-3.6.3.tgz", + "integrity": "sha512-cx9cx0nscPkIWs8Pt98HGrS9/aORuUcSkWjG25GqNWdvD/pSe7/5Oh3BKs0fC+rUshCiyLbxW54q0hA+GqZeSQ==", + "dev": true + }, + "workbox-google-analytics": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-3.6.3.tgz", + "integrity": "sha512-RQBUo/6SXtIaQTRFj4RQZ9e1gAl7D8oS5S+Hi173Kk70/BgJjzPwXpC5A249Jv5YfkCOLMQCeF9A27BiD0b0ig==", + "dev": true, + "requires": { + "workbox-background-sync": "^3.6.3", + "workbox-core": "^3.6.3", + "workbox-routing": "^3.6.3", + "workbox-strategies": "^3.6.3" + } + }, + "workbox-navigation-preload": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-3.6.3.tgz", + "integrity": "sha512-dd26xTX16DUu0i+MhqZK/jQXgfIitu0yATM4jhRXEmpMqQ4MxEeNvl2CgjDMOHBnCVMax+CFZQWwxMx/X/PqCw==", + "dev": true, + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-precaching": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-3.6.3.tgz", + "integrity": "sha512-aBqT66BuMFviPTW6IpccZZHzpA8xzvZU2OM1AdhmSlYDXOJyb1+Z6blVD7z2Q8VNtV1UVwQIdImIX+hH3C3PIw==", + "dev": true, + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-range-requests": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-3.6.3.tgz", + "integrity": "sha512-R+yLWQy7D9aRF9yJ3QzwYnGFnGDhMUij4jVBUVtkl67oaVoP1ymZ81AfCmfZro2kpPRI+vmNMfxxW531cqdx8A==", + "dev": true, + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-routing": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-3.6.3.tgz", + "integrity": "sha512-bX20i95OKXXQovXhFOViOK63HYmXvsIwZXKWbSpVeKToxMrp0G/6LZXnhg82ijj/S5yhKNRf9LeGDzaqxzAwMQ==", + "dev": true, + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-strategies": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-3.6.3.tgz", + "integrity": "sha512-Pg5eulqeKet2y8j73Yw6xTgLdElktcWExGkzDVCGqfV9JCvnGuEpz5eVsCIK70+k4oJcBCin9qEg3g3CwEIH3g==", + "dev": true, + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-streams": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-3.6.3.tgz", + "integrity": "sha512-rqDuS4duj+3aZUYI1LsrD2t9hHOjwPqnUIfrXSOxSVjVn83W2MisDF2Bj+dFUZv4GalL9xqErcFW++9gH+Z27w==", + "dev": true, + "requires": { + "workbox-core": "^3.6.3" + } + }, + "workbox-sw": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-3.6.3.tgz", + "integrity": "sha512-IQOUi+RLhvYCiv80RP23KBW/NTtIvzvjex28B8NW1jOm+iV4VIu3VXKXTA6er5/wjjuhmtB28qEAUqADLAyOSg==", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + } + } +} diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 000000000..f206fe013 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,52 @@ +{ + "name": "deckdeckgo-docs", + "version": "1.0.0-alpha.3", + "description": "The Progressive Web App alternative for simple presentations", + "license": "MIT", + "files": [ + "dist/" + ], + "scripts": { + "docs": "tsc --p ./scripts && node ./.deckgo/markdown-to-html", + "build": "npm run docs && stencil build", + "start": "npm run docs && stencil build --dev --watch --serve", + "test": "npm run docs && stencil test --spec --e2e", + "test.watch": "npm run docs && stencil test --spec --e2e --watch" + }, + "dependencies": { + "@ionic/core": "4.0.1", + "deckdeckgo": "^1.0.0-beta.26", + "deckdeckgo-charts": "^1.0.0-alpha.5", + "deckdeckgo-highlight-code": "^1.0.0-alpha.11", + "deckdeckgo-qrcode": "^1.0.0-alpha.6", + "rxjs": "^6.4.0" + }, + "devDependencies": { + "@stencil/core": "^0.18.0", + "@stencil/postcss": "^0.1.0", + "@stencil/sass": "^0.1.1", + "@types/glob": "^7.1.1", + "@types/marked": "^0.6.0", + "@types/node": "^11.9.3", + "autoprefixer": "^9.4.7", + "glob": "^7.1.3", + "marked": "^0.6.0", + "workbox-build": "3.4.1" + }, + "repository": { + "type": "git", + "url": "git://github.com/deckgo/deckdeckgo-docs.git" + }, + "keywords": [ + "ionic", + "stencil", + "stenciljs", + "web components", + "pwa", + "progressive web app", + "presentation", + "slides", + "slideshow", + "talk" + ] +} diff --git a/docs/scripts/markdown-renderer.ts b/docs/scripts/markdown-renderer.ts new file mode 100644 index 000000000..687ce064b --- /dev/null +++ b/docs/scripts/markdown-renderer.ts @@ -0,0 +1,34 @@ +import marked from 'marked'; + +export function changeCodeCreation(renderer: marked.Renderer) { + renderer.code = (code, lang, _escaped) => { + const hcl = []; + code = code + .split('\n') + .map((line, index) => { + if (line.charAt(0) === '|') { + hcl.push(index + 1); + return line.substring(1); + } + return escapeUnsafe(line); + }) + .join('{\'\\n\'}'); + + return ` + ${code} + `; + }; +} + +function escapeUnsafe(unsafe: string): string { + return unsafe + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'") + .replace(/\//g, "/") + .replace(/\\/g, "\") + .replace(/{/g, "{") + .replace(/}/g, "}"); +} diff --git a/docs/scripts/markdown-to-html.ts b/docs/scripts/markdown-to-html.ts new file mode 100644 index 000000000..c61d41339 --- /dev/null +++ b/docs/scripts/markdown-to-html.ts @@ -0,0 +1,62 @@ +import glob from 'glob'; +import {promisify} from 'util'; +import fs from 'fs'; +import path from 'path'; + +import marked from 'marked'; +import {changeCodeCreation} from './markdown-renderer'; +import {updateFile} from './markdown-writer'; + +const readFile = promisify(fs.readFile); +const globAsync = promisify(glob); + +(async function () { + console.log('> Running markdown to Html 🐶'); + + const tsxFiles: string[] = await globAsync('./src/**/*.tsx', {}); + const markdownFiles: string[] = await globAsync('./docs/**/*.md', {}); + + if (!tsxFiles && tsxFiles.length <= 0) { + console.log('> No components found 🙈'); + return; + } + + if (!markdownFiles && markdownFiles.length <= 0) { + console.log('> No markdown files found 🙈'); + return; + } + + const filePromises = markdownFiles.map(async (file: string) => { + const dest: string = file.replace('./docs/', './src/app/pages/docs/').replace('.md', '.tsx'); + + if (tsxFiles.indexOf(dest) === -1) { + return Promise.resolve(); + } + + try { + const markdownContents: string = await readFile(file, {encoding: 'utf8'}); + + const renderer = new marked.Renderer(); + changeCodeCreation(renderer); + + const fileName: string = path.basename(file, path.extname(file)); + + const markdownHtmlContents: string = marked(markdownContents, { + renderer, + headerIds: true, + headerPrefix: fileName + '-', + xhtml: true + }); + + await updateFile(markdownHtmlContents, dest); + } catch (err) { + console.error(file); + throw err; + } + + }); + + await Promise.all(filePromises); + + console.log(`> Documentation successfully generated, ${filePromises.length} files converted 🚀\n`); +})(); diff --git a/docs/scripts/markdown-writer.ts b/docs/scripts/markdown-writer.ts new file mode 100644 index 000000000..24c5d8cc3 --- /dev/null +++ b/docs/scripts/markdown-writer.ts @@ -0,0 +1,21 @@ +import {promisify} from 'util'; +import fs from 'fs'; + +const readFile = promisify(fs.readFile); +const writeFile = promisify(fs.writeFile); + +export function updateFile(markdownHtmlContent: string, dest: string): Promise { + return new Promise(async (resolve, reject) => { + try { + const currentContent: string = await readFile(dest, {encoding: 'utf8'}); + + const updatedContent: string = currentContent.replace(/(
    )(.*?)(<\/main>)/si, '
    ' + markdownHtmlContent + '
    '); + + await writeFile(dest, updatedContent, 'utf8'); + + resolve(); + } catch (err) { + reject(err); + } + }); +} diff --git a/docs/scripts/tsconfig.json b/docs/scripts/tsconfig.json new file mode 100644 index 000000000..9779bd57c --- /dev/null +++ b/docs/scripts/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "allowUnreachableCode": false, + "declaration": false, + "experimentalDecorators": true, + "lib": [ + "dom", + "es2015" + ], + "moduleResolution": "node", + "module": "commonjs", + "target": "es2015", + "noUnusedLocals": true, + "noUnusedParameters": true, + "outDir": "../.deckgo" + }, + "include": [ + "." + ], + "exclude": [ + "node_modules" + ] +} diff --git a/docs/src/app/app-root.scss b/docs/src/app/app-root.scss new file mode 100644 index 000000000..e69de29bb diff --git a/docs/src/app/app-root.tsx b/docs/src/app/app-root.tsx new file mode 100644 index 000000000..5b1129562 --- /dev/null +++ b/docs/src/app/app-root.tsx @@ -0,0 +1,200 @@ +import {Component, Prop, Element} from '@stencil/core'; + +import {MenuService} from './services/menu/menu.service'; +import {Subscription} from 'rxjs'; + +@Component({ + tag: 'app-root', + styleUrl: 'app-root.scss' +}) +export class AppRoot { + + @Prop({connect: 'ion-menu-controller'}) lazyMenuController!: HTMLIonMenuControllerElement; + + private subscription: Subscription; + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.subscription = this.menuService.watch().subscribe(async (enable: boolean) => { + await this.enableMenu(enable); + }); + } + + async componentDidUnload() { + if (this.subscription) { + this.subscription.unsubscribe(); + } + } + + private enableMenu(enable: boolean): Promise { + return new Promise(async (resolve) => { + const menuController: HTMLIonMenuControllerElement = this.el.querySelector('ion-menu-controller'); + if (menuController) { + const isAnimating: boolean = await menuController.isAnimating(); + + // Menu can't be disabled or enabled if currently closing or opening + if (!isAnimating) { + await menuController.enable(enable); + } + } + + resolve(); + }); + } + + private enableMenuOnClose(): Promise { + return new Promise(async (resolve) => { + const enable: boolean = await this.menuService.isEnable(); + await this.enableMenu(enable); + resolve(); + }); + } + + render() { + return ([ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + this.enableMenuOnClose()}> + + + + + + + Introduction + + Getting started + Installation + Running + Publishing + Remote control + + + Edit + + HTML + Markdown + Lazy loading + Theming + Fonts + RTL + + + Slides + + Concept + Title + Content + Split + Gif + Chart + Youtube + Code + Author + QR Code + + + Components + + Charts + Gif + Highlight Code + QR Code + Social + Youtube + + + Deck + + Navigation + Pager + Size + Extra + Events + Background + Actions + + + Miscellaneous + + Collections + Open source + Logo + Backstory + + + + + + + + + + + + + , + + ]); + } +} diff --git a/docs/src/app/components/app-footer/app-footer.scss b/docs/src/app/components/app-footer/app-footer.scss new file mode 100644 index 000000000..7f1dc9233 --- /dev/null +++ b/docs/src/app/components/app-footer/app-footer.scss @@ -0,0 +1,48 @@ +footer { + display: flex; + width: 100%; + flex: 0 0 8em; + padding: 20px 0; + + div.container { + display: flex; + justify-content: space-between; + align-items: center; + + &.container-end { + justify-content: flex-end; + } + + width: 100%; + max-width: 1280px; + margin-left: auto; + margin-right: auto; + padding: 0 15px; + flex: 1 0 auto; + box-sizing: border-box; + + div.end { + a { + padding-right: 8px; + + ion-icon { + color: initial; + } + } + } + } +} + +@media (prefers-color-scheme: dark) { + footer { + div.container { + div.end { + a { + ion-icon { + color: var(--ion-color-light); + } + } + } + } + } +} diff --git a/docs/src/app/components/app-footer/app-footer.tsx b/docs/src/app/components/app-footer/app-footer.tsx new file mode 100644 index 000000000..7be9a8a8a --- /dev/null +++ b/docs/src/app/components/app-footer/app-footer.tsx @@ -0,0 +1,35 @@ +import {Component, Prop} from '@stencil/core'; + +@Component({ + tag: 'app-footer', + styleUrl: 'app-footer.scss', + shadow: true +}) +export class AppLogo { + + @Prop() start: boolean = false; + + render() { + const containerClass: string = !this.start ? 'container container-end' : 'container'; + + return
    +
    + {this.renderStart()} +
    + + +
    +
    +
    + } + + private renderStart() { + if (this.start) { + return
    + +
    ; + } else { + return undefined; + } + } +} diff --git a/docs/src/app/components/app-logo/app-logo.scss b/docs/src/app/components/app-logo/app-logo.scss new file mode 100644 index 000000000..ea96b3d53 --- /dev/null +++ b/docs/src/app/components/app-logo/app-logo.scss @@ -0,0 +1,15 @@ +div { + color: transparent; + + vertical-align: var(--deckgo-logo-vertical-align); + margin-right: var(--deckgo-logo-margin-end); + + background-color: transparent; + background-image: var(--deckgo-logo-url, url('/assets/img/deckdeckgo-logo.svg')); + background-repeat: no-repeat; + + width: var(--deckgo-logo-size); + height: var(--deckgo-logo-size); + + display: inline-block; +} diff --git a/docs/src/app/components/app-logo/app-logo.tsx b/docs/src/app/components/app-logo/app-logo.tsx new file mode 100644 index 000000000..4835a7803 --- /dev/null +++ b/docs/src/app/components/app-logo/app-logo.tsx @@ -0,0 +1,13 @@ +import {Component} from '@stencil/core'; + +@Component({ + tag: 'app-logo', + styleUrl: 'app-logo.scss', + shadow: true +}) +export class AppLogo { + + render() { + return
    ; + } +} diff --git a/docs/src/app/components/app-menu-footer/app-menu-footer.scss b/docs/src/app/components/app-menu-footer/app-menu-footer.scss new file mode 100644 index 000000000..5290e99c5 --- /dev/null +++ b/docs/src/app/components/app-menu-footer/app-menu-footer.scss @@ -0,0 +1,18 @@ +footer { + --deckgo-logo-vertical-align: bottom; + --deckgo-logo-margin-end: 2px; + --deckgo-logo-size: 12px; + + padding: 0 15px; + + a { + text-decoration: none; + } + + a, p { + margin-top: 0; + margin-bottom: 0; + color: var(--deckgo-menu-footer-color, inherit); + font-size: var(--font-size-very-small); + } +} diff --git a/docs/src/app/components/app-menu-footer/app-menu-footer.tsx b/docs/src/app/components/app-menu-footer/app-menu-footer.tsx new file mode 100644 index 000000000..8250b0368 --- /dev/null +++ b/docs/src/app/components/app-menu-footer/app-menu-footer.tsx @@ -0,0 +1,17 @@ +import {Component} from '@stencil/core'; + +@Component({ + tag: 'app-menu-footer', + styleUrl: 'app-menu-footer.scss', + shadow: true +}) +export class AppMenuFooter { + + render() { + return + } +} diff --git a/docs/src/app/components/app-navigation/app-navigation.scss b/docs/src/app/components/app-navigation/app-navigation.scss new file mode 100644 index 000000000..d8193a26d --- /dev/null +++ b/docs/src/app/components/app-navigation/app-navigation.scss @@ -0,0 +1,34 @@ +app-navigation { + a { + color: inherit; + } + + div[slot="end"] { + z-index: 2; + + ion-button { + --color: black; + --color-activated: black; + --background-activated: transparent; + --background: transparent; + --box-shadow: none; + } + } + + @media screen and (min-width: 540px) { + div[slot="end"] { + ion-button { + display: none; + } + } + } + + @media screen and (max-width: 540px) { + div[slot="end"] { + div.links { + display: none; + } + } + } + +} diff --git a/docs/src/app/components/app-navigation/app-navigation.tsx b/docs/src/app/components/app-navigation/app-navigation.tsx new file mode 100644 index 000000000..8865fa1da --- /dev/null +++ b/docs/src/app/components/app-navigation/app-navigation.tsx @@ -0,0 +1,78 @@ +import {Component, Prop} from '@stencil/core'; + +@Component({ + tag: 'app-navigation', + styleUrl: 'app-navigation.scss', + shadow: false +}) +export class AppNavigation { + + @Prop({connect: 'ion-modal-controller'}) modalController: HTMLIonModalControllerElement; + + @Prop() logo: boolean = false; + @Prop() menuToggle: boolean = true; + @Prop() navigation: boolean = true; + + render() { + return ( + + {this.renderLogo()} + {this.renderMenuToggle()} + {this.renderNavigation()} + + + ); + } + + private renderLogo() { + if (this.logo) { + return + + + DeckDeckGo + + ; + } else { + return null; + } + } + + private renderMenuToggle() { + if (this.menuToggle) { + return + + + + + + ; + } else { + return null; + } + } + + private async openNavigationMenuModal() { + const modal: HTMLIonModalElement = await this.modalController.create({ + component: 'app-navigation-modal' + }); + + await modal.present(); + } + + private renderNavigation() { + if (this.navigation) { + return
    + this.openNavigationMenuModal()}> + + + +
    ; + } else { + return null; + } + } +} diff --git a/docs/src/app/modals/app-navigation-modal/app-navigation-modal.scss b/docs/src/app/modals/app-navigation-modal/app-navigation-modal.scss new file mode 100644 index 000000000..242ddfd0e --- /dev/null +++ b/docs/src/app/modals/app-navigation-modal/app-navigation-modal.scss @@ -0,0 +1,20 @@ +app-navigation-modal { + ion-header { + ion-toolbar { + --border-color: transparent; + } + } + + ion-content { + div { + height: 100%; + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + font-size: var(--font-size-h1); + } + } +} diff --git a/docs/src/app/modals/app-navigation-modal/app-navigation-modal.tsx b/docs/src/app/modals/app-navigation-modal/app-navigation-modal.tsx new file mode 100644 index 000000000..793631283 --- /dev/null +++ b/docs/src/app/modals/app-navigation-modal/app-navigation-modal.tsx @@ -0,0 +1,44 @@ +import {Component, Element, Listen} from '@stencil/core'; + +@Component({ + tag: 'app-navigation-modal', + styleUrl: 'app-navigation-modal.scss' +}) +export class AppNavigationModal { + @Element() el: HTMLElement; + + async componentDidLoad() { + history.pushState({modal: true}, null); + } + + @Listen('window:popstate') + async handleHardwareBackbutton(_e: PopStateEvent) { + await this.closeModal(false); + } + + async closeModal(connect: boolean) { + await (this.el.closest('ion-modal') as HTMLIonModalElement).dismiss(connect); + } + + render() { + return [ + + + + this.closeModal(false)}> + + + + + , + + +
    + Docs + Demo + Github +
    +
    + ]; + } +} diff --git a/docs/src/app/pages/app-home/app-home.scss b/docs/src/app/pages/app-home/app-home.scss new file mode 100644 index 000000000..91834dbdf --- /dev/null +++ b/docs/src/app/pages/app-home/app-home.scss @@ -0,0 +1,136 @@ +app-home { + main { + max-width: 1024px; + + section.hero { + text-align: center; + margin-top: 50px; + margin-bottom: 120px; + + --deckgo-logo-size: 4rem; + } + + @media screen and (max-width: 720px) { + section.hero { + margin-bottom: 60px; + } + } + + section.overview { + display: flex; + flex-wrap: wrap; + margin-bottom: 38px; + + > p, ul, li { + flex: 0 0 50%; + box-sizing: border-box; + } + + > p { + padding-right: 40px; + } + + ul { + display: flex; + flex-wrap: wrap; + align-items: flex-start; + align-content: flex-start; + + li { + ion-icon { + color: var(--ion-color-success); + } + } + } + } + + section.cta { + background: var(--ion-color-dark); + color: var(--ion-color-light); + + box-shadow: 0 2px 4px 0 rgba(0,0,0,.19); + border-radius: 8px; + + margin-top: 64px; + + .cta__primary { + padding: 80px 0; + } + + .cta__secondary { + font-size: var(--font-size-small); + } + + deckgo-highlight-code { + --deckgo-highlight-code-text-align: center; + --deckgo-highlight-code-font-size: var(--font-size-h1); + } + } + + section.section { + padding: 68px 0; + + ul { + display: flex; + justify-content: space-between; + + li { + flex: 1; + padding-right: 32px; + + ion-icon { + font-size: 2rem; + } + } + } + } + + deckgo-highlight-code { + --deckgo-highlight-code-background: var(--ion-color-dark); + --deckgo-highlight-code-color: white; + } + } + + @media screen and (max-width: 720px) { + main { + section.section { + padding-top: 40px; + padding-bottom: 70px; + + ul { + flex-direction: column; + padding-bottom: 40px; + + li { + padding-right: 0; + padding-top: 40px; + } + } + } + } + } + + @media screen and (max-width: 1024px) { + main { + section.overview { + flex-direction: column; + + > p { + text-align: center; + padding: 0; + } + + > p, ul { + flex: 1; + max-width: 568px; + margin-left: auto; + margin-right: auto; + } + + ul { + padding-top: 48px; + } + } + } + } +} diff --git a/docs/src/app/pages/app-home/app-home.tsx b/docs/src/app/pages/app-home/app-home.tsx new file mode 100644 index 000000000..43a1d0c87 --- /dev/null +++ b/docs/src/app/pages/app-home/app-home.tsx @@ -0,0 +1,87 @@ +import {Component} from '@stencil/core'; + +import {MenuService} from '../../services/menu/menu.service'; + +@Component({ + tag: 'app-home', + styleUrl: 'app-home.scss' +}) +export class AppHome { + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.disable(); + } + + render() { + return [ + , + + +
    +
    + +

    The Progressive Web App alternative for simple presentations

    +
    + +
    +

    +

    Create a PWA presentation using Web Components, Ionic components and HTML or Markdown 🚀 Cherry on the cake 🍒🎂 DeckDeckGo comes with a Progressive Web App to remote control your slides 📱

    +

    + +
      +
    • Progressive Web App
    • +
    • Predefined templates
    • +
    • Web Components
    • +
    • Lazy loaded content
    • +
    • HTML or Markdown
    • +
    • Free and open source
    • +
    +
    + +
    +
    +

    Get started now 🔥

    + + npm init deckdeckgo + +
    +

    + Dive deeper with the Getting Started chapter +

    +
    + +
    +
      +
    • + +

      Easy editing

      +

      HTML or Markdown, templates based, extra components and features, all you need to easily create, showcase and ship your presentation.

      +
    • +
    • + +

      Slick and smooth

      +

      Build for performance and to be SEO friendly, have a look to the Lighthouse score of the DeckDeckGo demo.

      +
    • +
    • + +

      Modern

      +

      Presentations are bundled and shipped as Progressive Web Apps and based on Web Components.

      +
    • +
    • + +

      Interact

      +

      Control you slides or track your talk's time using the DeckDeckGo remote control PWA.

      +
    • +
    +
    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/components/app-components-charts/app-components-charts.tsx b/docs/src/app/pages/docs/components/app-components-charts/app-components-charts.tsx new file mode 100644 index 000000000..30fd2d5bc --- /dev/null +++ b/docs/src/app/pages/docs/components/app-components-charts/app-components-charts.tsx @@ -0,0 +1,640 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-components-charts' +}) +export class AppComponentsCharts { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Charts

    +

    The "Charts" component is an extra component which let you draw charts easily.

    +

    To create and draw the charts, this project is using D3js.

    +

    Table of contents

    + +

    Showcase

    +

    The following examples are the one provided in the src/index.html of this component. If you would like to run them locally, proceed as follow:

    + + git clone https://github.com/deckgo/deckdeckgo-charts{'\n'}cd deckdeckgo-charts{'\n'}npm install{'\n'}npm run start +

    Pie

    +

    +

    Donut

    +

    +

    Compare two graphs

    +

    +

    Line and area

    +

    +

    Compare two lines and smoothing effect

    +
    + +
    + +

    Compare two lines and display a grid

    +
    + +
    + + +

    Bar

    +
    + +
    + +

    Compare multiple bars

    +
    + +
    + +

    Getting started

    +

    To create easily your PWA presentation and to enjoy all the options, I suggest you to create your slides using the CLI as described in the Getting started chapter.

    +

    Doing so you will use the DeckDeckGo starter kit which already includes this Web Component.

    +

    However, if you are looking to use this Web Component as a standalone component, to add a charts to your web applications, it could be use directly in your project from a CDN, using a simple script include, or could be installed from npm.

    +

    Using DeckDeckGo charts from a CDN

    +

    It's recommended to use unpkg to use the DeckDeckGo charts from a CDN. To do so, add the following include script in the main HTML file of your project:

    + + <script src="https://unpkg.com/deckdeckgo-charts@latest/dist/deckdeckgo-charts.js"></script> +

    Install DeckDeckGo charts from NPM

    +

    Install DeckDeckGo charts in your project from npm using the following command:

    + + npm install deckdeckgo-charts +

    Framework integration

    +

    The Stencil documentation provide examples of framework integration for Angular, React, Vue and Ember.

    +

    Usage

    +

    The main idea behind the DeckDeckGo charts is to be able to drop a csv file, provide it to the component and let it do the job respectively draw the chart.

    +

    Pie usage

    +

    The <deckgo-pie-chart/> Web Component draw a Pie chart.

    +

    CSV

    +

    The csv file should contains one or two columns. The values could be provided as number or percent.

    +
    Single column
    +

    If a single column is used, it should contains the values.

    + + 60{'\n'}20{'\n'}20 +
    Two columns
    +

    If two columns are provided, the first column should contains the description of the value.

    + + Wind;53.13%{'\n'}Solar:1.96%{'\n'}Geothermal;7.52%{'\n'}Landfill Gas;15.67%{'\n'}Biomass;14.79%{'\n'}Qualified Hydropower;6.93% +

    Properties

    +

    The <deckgo-pie-chart/> expose the following properties:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PropertyAttributeMandatoryDescriptionTypeDefault
    srcsrcXThe path to the source file of the datastring
    widthwidthXThe width of the chartnumber
    heightheightXThe height of the chartnumber
    innerRadiusinner-radiusTo plot a donut instead of a pie, provide an inner radiusnumber0
    rangerangeA list of custom colors which should be to draw the chartstring[]
    separatorseparatorThe line separator use in your csv filestring';'
    +

    Styling

    +

    The <deckgo-pie-chart/> could be styled using the following CSS4 variables:

    + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --deckgo-chart-text-colorThe color of the labels
    --deckgo-chart-text-displayThe display property of the labels
    --deckgo-chart-path-strokeThe stroke property of the pie, in case you would like to display a line between the slices
    +

    Methods

    +

    The <deckgo-pie-chart/> expose the following method in case you would like to redraw your chart, for example on resize of the window:

    + + draw() => Promise<void> +

    Examples

    +

    You could find other examples of pie charts in the src/index.html of the project.

    + + <deckgo-pie-chart width={500} height={400} src="https://raw.githubusercontent.com/fluster/deckdeckgo-charts/master/showcase/data-pie-chart.csv"></deckgo-pie-chart> +

    Line usage

    +

    The <deckgo-line-chart/> Web Component draw a line chart.

    +

    CSV

    +

    The csv file should contains two or three columns.

    +

    The first column contains the values for the x axis. These should be provided as date or number.

    +

    The second and third columns contains the values for the y axis. These should be provided as number.

    +
    Two columns
    +

    With dates as x axis:

    + + 01.01.2018;5{'\n'}01.03.2018;10{'\n'}01.06.2018;8 +

    With numbers as x axis:

    + + 1;5{'\n'}2;10{'\n'}3;8 +
    Three columns
    +

    The third columns is optional, it could be use in case you would like to plot two charts on the same graph.

    +

    With dates as x axis:

    + + 01.01.2018;5;4{'\n'}01.03.2018;10;3{'\n'}01.06.2018;8;19 +

    With numbers as x axis:

    + + 1;5;7{'\n'}2;10;13{'\n'}3;8;5 +

    Properties

    +

    The <deckgo-line-chart/> expose the following properties:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PropertyAttributeMandatoryDescriptionTypeDefault
    srcsrcXThe path to the source file of the datastring
    widthwidthXThe width of the chartnumber
    heightheightXThe height of the chartnumber
    marginBottommargin-bottomThe margin bottom of the chart in pixelnumber32
    marginLeftmargin-leftThe margin left of the chart in pixelnumber32
    marginRightmargin-rightThe margin right of the chart in pixelnumber32
    marginTopmargin-topThe margin top of the chart in pixelnumber32
    datePatterndate-patternIn case the x are made of dates, the pattern to be use to parse the dates. Have a look to date-fns for a list of the supported format.string'yyyy-MM-dd'
    yAxisDomainy-axis-domainShould the y axis plot the values from 0 to max or be extended (use extent) to cover all valuesstringmax
    smoothsmoothDraw a smooth line or a line with edgesbooleantrue
    areaareaDraw the area or just a linebooleantrue
    ticksticksSpecify the ticks of the axisnumber``
    gridgridDraw a grid behin the graphbooleanfalse
    separatorseparatorThe line separator use in your csv filestring';'
    +

    Styling

    +

    The <deckgo-line-chart/> could be styled using the following CSS4 variables:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --deckgo-chart-axis-colorblackThe color of the axis
    --deckgo-chart-text-colorThe color of the labels
    --deckgo-chart-text-displayThe display property of the labels
    --deckgo-chart-fill-color#3880ffThe fill color of the area of the main chart
    --deckgo-chart-fill-opacityThe opacity of the area of the main chart
    --deckgo-chart-strokeThe stroke of the area of the main chart
    --deckgo-chart-stroke-widthThe stroke width of the area of the main chart
    --deckgo-chart-compare-fill-color#0cd1e8The fill color of the area of the chart to compare
    --deckgo-chart-compare-fill-opacity0.7The opacity of the area of the chart to compare
    --deckgo-chart-compare-strokeThe stroke of the area of the chart to compare
    --deckgo-chart-compare-stroke-widthThe stroke width of the area of the chart to compare
    --deckgo-chart-grid-stroke#989aa2The stroke of the grid
    --deckgo-chart-grid-stroke-opacity0.7The stroke opacity of the grid
    +

    Methods

    +

    The <deckgo-line-chart/> expose the following method in case you would like to redraw your chart, for example on resize of the window:

    + + draw() => Promise<void> +

    Examples

    +

    You could find other examples of line charts in the src/index.html of the project.

    + + <deckgo-line-chart width={500} height={400} date-pattern="dd.MM.yyyy" src="https://raw.githubusercontent.com/fluster/deckdeckgo-charts/master/showcase/data-line-chart.csv"></deckgo-line-chart> +

    Bar usage

    +

    The <deckgo-bar-chart/> Web Component draw a Bar chart.

    +

    CSV

    +

    The csv file should contains at lest two columns. The values could be provided as number or percent.

    +
    Multiple columns
    +

    The first column should contains the labels or groups used for the X axis. The other columns are the values use for the Y axis.

    + + Group A;5;0;10{'\n'}Group B;10;6;12{'\n'}Group C;8;14;8{'\n'}Group D;14;8;16{'\n'}Group E;18;4;5 +

    Properties

    +

    The <deckgo-bar-chart/> expose the following properties:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PropertyAttributeMandatoryDescriptionTypeDefault
    srcsrcXThe path to the source file of the datastring
    widthwidthXThe width of the chartnumber
    heightheightXThe height of the chartnumber
    marginBottommargin-bottomThe margin bottom of the chart in pixelnumber32
    marginLeftmargin-leftThe margin left of the chart in pixelnumber32
    marginRightmargin-rightThe margin right of the chart in pixelnumber32
    marginTopmargin-topThe margin top of the chart in pixelnumber32
    separatorseparatorThe line separator use in your csv filestring';'
    +

    Styling

    +

    The <deckgo-bar-chart/> could be styled using the following CSS4 variables:

    + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --deckgo-chart-axis-colorblackThe color of the axis
    +

    Furthermore, as the Bar chart could draw dynamically multiple bars, it will generate dynamically the following CSS4 variable for each series of data where X is an index between 1 and the number of bars.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --deckgo-chart-text-colorThe color of the labels
    --deckgo-chart-text-displayThe display property of the labels
    --deckgo-chart-fill-color-barXThe fill color of the bar chart identified with index X
    --deckgo-chart-fill-opacity-baxXThe opacity of the bar chart identified with index X
    --deckgo-chart-stroke-barXThe stroke of the bar chart identified with index X
    --deckgo-chart-stroke-width-barXThe stroke width of the chart identified with index X
    +

    Methods

    +

    The <deckgo-bar-chart/> expose the following method in case you would like to redraw your chart, for example on resize of the window:

    + + draw() => Promise<void> +

    Examples

    +

    You could find other examples of bar charts in the src/index.html of the project.

    + + <deckgo-bar-chart width={500} {'\n'} height={400}{'\n'} src="https://raw.githubusercontent.com/fluster/deckdeckgo-charts/master/showcase/data-pie-chart.csv"{'\n'} style="--deckgo-chart-fill-color-bar1: #3880ff;">{'\n'}</deckgo-bar-chart> +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/components/app-components-gif/app-components-gif.tsx b/docs/src/app/pages/docs/components/app-components-gif/app-components-gif.tsx new file mode 100644 index 000000000..7fc7979e1 --- /dev/null +++ b/docs/src/app/pages/docs/components/app-components-gif/app-components-gif.tsx @@ -0,0 +1,155 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-components-gif' +}) +export class AppComponentsGif { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + + await this.lazyLoadGifs(); + } + + private lazyLoadGifs(): Promise { + return new Promise((resolve) => { + const gifElements: NodeListOf = this.el.querySelectorAll('deckgo-gif'); + + if (gifElements) { + gifElements.forEach(async (element: HTMLElement) => { + if (element.hasOwnProperty('lazyLoadContent')) { + await (element as any).lazyLoadContent(); + } + }); + } + + resolve(); + }); + } + + render() { + return [ + , + + +

    Gif

    +

    The "Gif" component allows you to easily add a Gif, like those provided by Giphy, in almost any slide of your presentation.

    +

    Table of contents

    + +

    Showcase

    +
    + +

    Hey

    +

    It's a cool gif

    +
    +
    + +

    Usage

    +

    The "Gif" slide's Web Component could be integrated using the tag <deckgo-gif/>.

    + + <deckgo-gif src="https://media.giphy.com/media/xUA7baWfTjfHGLZc3e/giphy.gif" alt="My gif" fullscreen="true">{'\n'} <h1 slot="header">Hey</h1>{'\n'} <h2 slot="footer">It's a cool gif</h2>{'\n'}</deckgo-slide-gif> +

    Slots

    +

    The slots header and footer are both optional. header and footer would be displayed over the gif.

    +

    Attributes

    +

    This component offers the following options which could be set using attributes:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeTypeDefaultDescription
    srcstringThe source url, the src, of the Gif. Could be an embeddable external url or a local one.
    altstringAnd alt information could be provided for accessibility reason.
    fullscreennumberfalseIf set to true, the gif width and height will be related to the slide width and height respectively will be fullscreen.
    +

    Theming

    +

    The following theming options will affect this component if set on its host or parent.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --widthThe width of the gif
    --heightThe height of the gif
    --backgroundThe background of the header and footer over the gif
    --colorThe color of the header and footer over the gif
    --paddingThe padding of the header and footer over the gif
    --zIndex2The z-index of the slide
    +

    Note

    +

    Of course, as other images added to a presentation build with DeckDeckGo, gifs are lazy loaded too.

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/components/app-components-highlight-code/app-components-highlight-code.tsx b/docs/src/app/pages/docs/components/app-components-highlight-code/app-components-highlight-code.tsx new file mode 100644 index 000000000..260657b8b --- /dev/null +++ b/docs/src/app/pages/docs/components/app-components-highlight-code/app-components-highlight-code.tsx @@ -0,0 +1,267 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-components-highlight-code' +}) +export class AppComponentsHighlightCode { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Highlight Code

    +

    The "Highlight Code" component is an extra component which let you highlight code easily.

    +

    To highlight your code, this component is using Prism.js from James DiGioia.

    +

    Table of contents

    + +

    Showcase

    + + public static void main(String args[]) { {'\n'} System.out.println("Hello World");{'\n'}} +

    Getting started

    +

    To create easily your PWA presentation and to enjoy all the options, I suggest you to create your slides using the CLI as described in the Getting started chapter.

    +

    Doing so you will use the DeckDeckGo starter kit which already includes this Web Component.

    +

    However, if you are looking to use this Web Component as a standalone component, to add a code highlighter feature to your web applications, it could be use directly in your project from a CDN, using a simple script include, or could be installed from npm.

    +

    Using DeckDeckGo Highlight Code from a CDN

    +

    It's recommended to use unpkg to use the DeckDeckGo Code from a CDN. To do so, add the following include script in the main HTML file of your project:

    + + <script src="https://unpkg.com/deckdeckgo-highlight-code@latest/dist/deckdeckgo-highlight-code.js"></script> +

    Install DeckDeckGo Highlight Code from NPM

    +

    Install DeckDeckGo - Highlight Code in your project from npm using the following command:

    + + npm install deckdeckgo-highlight-code +

    Framework integration

    +

    The Stencil documentation provide examples of framework integration for Angular, React, Vue and Ember.

    +

    Usage

    +

    The <deckgo-highlight-code/> Web Component will highlight your code using Prism.js. You could inject a <code/> tag using slot or provide an URI to the file containing your code.

    +

    Properties

    +

    The <deckgo-highlight-code/> expose the following properties:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PropertyAttributeDescriptionTypeDefault
    srcsrcThe web url to the source code you would like to showcasestring
    anchoranchorThe anchor identifier which will be use to find the next anchor to scroll too using findNextAnchor()string'// DeckDeckGo'
    anchorZoomanchor-zoomThe anchor identifier which will be use to find the next anchor to zoom inside your code using findNextAnchor()string'// DeckDeckGoZoom'
    hideAnchorhide-anchorSet this attribute to false in case you would like to actually display the anchor value toobooleantrue
    languagelanguageDefine the language to be used for the syntax highlighting. The list of supported languages is defined by Prism.jsstring'javascript'
    highlightLineshighlight-linesIf you wish to highlight some lines of your code. The lines number should be provided as number separated with coma and group separated with space. For example: "3,5 8,9 13,13 14,17"string
    +

    Styling

    +

    The <deckgo-highlight-code/> could be styled using the following CSS4 variables:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --deckgo-highlight-code-colorinheritThe color of the displayed code
    --deckgo-highlight-code-backgroundThe background of the displayed code
    --deckgo-highlight-code-paddingThe padding of the displayed code
    --deckgo-highlight-code-border-radiusThe border radius of the displayed code
    --deckgo-highlight-code-margin-bottom64pxMargin bottom of the code scroller
    --deckgo-highlight-code-zoom1If you wish to manually zoom the code
    --deckgo-highlight-code-font-sizeThe size of the font for the code
    --deckgo-highlight-code-font-familymonospaceThe family of the font for the code
    --deckgo-highlight-code-line-backgroundThe background of the lines you wish to highlight
    --deckgo-highlight-code-line-paddingA padding for each lines you wish to highlight
    --deckgo-highlight-code-line-border-topThe border-top property of the lines you wish to highlight
    --deckgo-highlight-code-directionltrThe direction of the displayed code
    --deckgo-highlight-code-text-alignstartThe text alignment of your code
    --deckgo-highlight-code-token-commentHighlighted code tokens comment, prolog, doctype and cdata
    --deckgo-highlight-code-token-punctuationHighlighted code token punctuation
    --deckgo-highlight-code-token-propertyHighlighted code tokens property, tag, boolean, number, constant, symbol, deleted
    --deckgo-highlight-code-token-selectorHighlighted code tokens selector, attr-name, string, char, builtin, inserted
    --deckgo-highlight-code-token-operatorHighlighted code tokens operator, entity, url, string
    --deckgo-highlight-code-token-atruleHighlighted code tokens atrule, attr-value, keyword
    --deckgo-highlight-code-token-functionHighlighted code function, class-name
    --deckgo-highlight-code-token-regexHighlighted code tokens regex, important, variable
    +

    Methods

    +

    The <deckgo-highlight-code/> expose the following methods:

    +

    Find the next anchor

    + + findNextAnchor(enter: boolean) => Promise<boolean> +

    Zoom into code

    + + zoomCode(zoom: boolean) => Promise<void> +

    Load or reload the component

    + + load() => Promise<void> +

    Examples

    +

    You could find the examples in the src/index.html of the project.

    + + <deckgo-highlight-code src="https://domain.com/yourfile.js">{'\n'}</deckgo-highlight-code>{'\n'}{'\n'}<deckgo-highlight-code language="java" highlight-lines="2,2">{'\n'} <code slot="code">public static void main(String args[]) {{'\n'}{'\n'} System.out.println("Hello World");{'\n'}}</code>{'\n'}</deckgo-highlight-code> +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/components/app-components-qrcode/app-components-qrcode.tsx b/docs/src/app/pages/docs/components/app-components-qrcode/app-components-qrcode.tsx new file mode 100644 index 000000000..0d1356b58 --- /dev/null +++ b/docs/src/app/pages/docs/components/app-components-qrcode/app-components-qrcode.tsx @@ -0,0 +1,231 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-components-qrcode' +}) +export class AppComponentsQRCode { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    QR Code

    +

    The "QR Code" component is an extra component which let you add QR code in your slides, useful for example to display links and url and if you wish your audience to easily access them.

    +

    To generate the QR code, the project qrcode-generator from Kazuhiko Arase is used.

    +

    Table of contents

    + +

    Showcase

    +

    This Web Component let you generate QR code like the following as svg (default) or img:

    +
    + + +
    + +

    Optionally you could also display a logo over your QR code:

    +
    + + + +
    + +

    Getting started

    +

    To create easily your PWA presentation and to enjoy all the options, I suggest you to create your slides using the CLI as described in the Getting started chapter.

    +

    Doing so you will use the DeckDeckGo starter kit which already includes this Web Component.

    +

    However, if you are looking to use this Web Component as a standalone component, to add a QR codes to your web applications, it could be use directly in your project from a CDN, using a simple script include, or could be installed from npm.

    +

    Using DeckDeckGo QR Code from a CDN

    +

    It's recommended to use unpkg to use the DeckDeckGo Code from a CDN. To do so, add the following include script in the main HTML file of your project:

    + + <script src="https://unpkg.com/deckdeckgo-qrcode@latest/dist/deckdeckgo-qrcode.js"></script> +

    Install DeckDeckGo QR Code from NPM

    +

    Install DeckDeckGo - QR Code in your project from npm using the following command:

    + + npm install deckdeckgo-qrcode +

    Framework integration

    +

    The Stencil documentation provide examples of framework integration for Angular, React, Vue and Ember.

    +

    Usage

    +

    The <deckgo-qrcode/> Web Component will generate per default a <svg/> QR code with a correction level set to high.

    +

    Optionally, it's also possible to generate the QR code as an <img/> and/or to display a logo over it.

    +

    Slot

    +

    To display a logo over your QR code, this Web Component provide a slot called logo.

    +

    Properties

    +

    The <deckgo-qrcode/> expose the following properties:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PropertyAttributeDescriptionTypeDefaultOnly applies for type <img/>
    contentcontentThe content, a text or an url, of the QR code to generatestring
    typetypeThe type of QR code to generate, <svg/> or <img/>stringsvg
    qrCellSizeqr-cell-sizeThe size of the cell, useful to generate a bigger QR code, specially in case of <img/>. Use it wisely, I suggest a value between 0 and 20 for example.number
    qrMarginqr-marginThe size of the code margin, in case you would like more spacingnumber
    qrAltqr-img-altAn alternate text for the image of the QR codestringX
    qrBackgroundColorqr-img-background-colorThe background color of the QR code. The value should be provided in a RGB-hex format. For example: FF0000.stringX
    qrFillColorqr-img-fill-colorThe color use to fill the QR code. The value should be provided in a RGB-hex format. For example: FF0000.stringX
    +

    Styling

    +

    The <deckgo-qrcode/> could be styled using the following CSS4 variables which would only applies on the type <svg/>:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNoteOnly applies for type <svg/>
    --deckgo-qrcode-container-displayinline-blockThe display property of the shadow host and the code container
    --deckgo-qrcode-sizeThe size, width and height, of the QR codeX
    --deckgo-qrcode-logo-ratio-size3If you are injecting a logo, its size, width and height, will be calculated with --deckgo-qrcode-size (or 100% if not provided) divided by this valueX
    --deckgo-qrcode-border-strokeThe border color of the QR codeX
    --deckgo-qrcode-background-filltransparentThe QR code's backgroundX
    --deckgo-qrcode-color-fillThe QR code's color (the color of the QR code's squares it contains)X
    +

    Styling type img

    +

    In oder to style QR code if its type is set to <img/>, you will need to use properties instead of CSS4 variables.

    +

    Methods

    +

    The <deckgo-qrcode/> component exposes the following method in case you would like to refresh your QR code, for example on resize of the window on in case you would set its content asynchronously:

    + + generate() => Promise<void> +

    Examples

    +

    You could find all the examples in the src/index.html of the project.

    + + <deckgo-qrcode content="https://deckdeckgo.com" style="--deckgo-qrcode-size: 300px;">{'\n'}</deckgo-qrcode> +

    Example with a logo:

    + + <deckgo-qrcode content="https://myurl.com">{'\n'} <img slot="logo" src="my-logo.svg"/>{'\n'}</deckgo-qrcode> + +

    It's possible to display a logo over your QR Code as the code generated with this Web Component have a correction level set to high meaning, if I understand correctly, that your content is encoded and displayed multiple times inside the QR code. Therefore, even if the logo cover a part of it, it will be still possible for a reader to read the content from "somewhere else" in the code.

    +

    However, test it carefully and play with the colours, cell-size and size of your code to ensure its readability.

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/components/app-components-social/app-components-social.tsx b/docs/src/app/pages/docs/components/app-components-social/app-components-social.tsx new file mode 100644 index 000000000..bc022f56f --- /dev/null +++ b/docs/src/app/pages/docs/components/app-components-social/app-components-social.tsx @@ -0,0 +1,113 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-components-social' +}) +export class AppComponentsSocial { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Social

    +

    The "Social" component allows you to easily add a social link to your presentation.

    +

    Table of contents

    + +

    Showcase

    +

    + Twitter +

    + +

    + DeckDeckGo on Github +

    + +

    Usage

    +

    The "Social" slide's Web Component could be integrated using the tag <deckgo-social/>.

    + + <deckgo-social twitter="daviddalbusco">{'\n'} <img data-src="/assets/twitter.svg" slot="icon"/>{'\n'} Twitter{'\n'}</deckgo-social> +

    Slots

    +

    The slot icon and the text are both optional. Of course, if you provide nothing, nothing will be rendered.

    +

    Attributes

    +

    This component offers the following options which could be set using attributes:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeTypeDefaultDescription
    twitterstringYour Twitter username. It will be concatenated automatically with https://twitter.com/
    linkedinstringYour Linkedin username. It will be concatenated automatically with https://www.linkedin.com/in/
    mediumstringYour Medium username. It will be concatenated automatically with https://medium.com/@
    githubstringYour Github username. It will be concatenated automatically with https://github.com/
    fullUrlstringIn case you would like to provide the URI of your choice
    +

    Examples

    +

    Without any icons:

    + + <deckgo-social twitter="daviddalbusco">Twitter</deckgo-social>{'\n'}<deckgo-social linkedin="david-dal-busco/">Linkedin</deckgo-social>{'\n'}<deckgo-social medium="david.dalbusco">Medium</deckgo-social>{'\n'}<deckgo-social full-url="https://stackoverflow.com/users/5404186/peter-parker">Stackoverflow</deckgo-social> +

    With for example ion-icon:

    + + <deckgo-social twitter="daviddalbusco">{'\n'} <ion-icon slot="icon" name="logo-twitter"></ion-icon>{'\n'} Twitter{'\n'}</deckgo-social>{'\n'}{'\n'}<deckgo-social github="fluster/deckdeckgo">{'\n'} <ion-icon slot="icon" name="logo-github"></ion-icon>{'\n'} DeckDeckGo on Github{'\n'}</deckgo-social> +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/components/app-components-youtube/app-components-youtube.tsx b/docs/src/app/pages/docs/components/app-components-youtube/app-components-youtube.tsx new file mode 100644 index 000000000..3d7819a26 --- /dev/null +++ b/docs/src/app/pages/docs/components/app-components-youtube/app-components-youtube.tsx @@ -0,0 +1,96 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-components-youtube' +}) +export class AppComponentsYoutube { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.loadVideo(this.el); + } + + render() { + return [ + , + + +

    Youtube

    +

    The "Youtube" component allows you to easily add a Youtube video in almost any slide of your presentation.

    +

    Table of contents

    + +

    Showcase

    +
    + + +
    + +

    Usage

    +

    The "Youtube" slide's Web Component could be integrated using the tag <deckgo-youtube/>.

    + + <deckgo-youtube src="https://www.youtube.com/watch?v=oUOjJIfPIjw">{'\n'}</deckgo-youtube> +

    Slots

    +

    No slots are available for this component.

    +

    Attributes

    +

    This component offers the following options which could be set using attributes:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeTypeDefaultDescription
    srcstringThe source url, the Youtube url, of the video. Not embeddable url will be automatically converted to embeddable url supported by Youtube.
    widthnumberThe width of the video player.
    heightnumberThe height of the video player.
    frame-titlestringA title for the frame, could be use for accessibility reason.
    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/deck/app-deck-actions/app-deck-actions.tsx b/docs/src/app/pages/docs/deck/app-deck-actions/app-deck-actions.tsx new file mode 100644 index 000000000..a35277c21 --- /dev/null +++ b/docs/src/app/pages/docs/deck/app-deck-actions/app-deck-actions.tsx @@ -0,0 +1,77 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-deck-actions' +}) +export class AppDeckActions { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Actions

    +

    A DeckDeckGo deck also contains an additional slot actions. In the starter kit, this slot is use to add a social share action for your presentation.

    +

    Table of contents

    + +

    Introduction

    +

    The slot actions provided for the deck will be cloned into each slides of your presentation. Therefore this slot will follow the swiping.

    +

    Also worth to notice, this slot will be hidden when the presentation will be displayed full screen.

    +

    Theming

    +

    The following theming options will affect the slot actions if set on the deckgo-deck or any slides.

    + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --slide-actions-top32pxTop value
    --slide-actions-end32pxIn LTR, right value
    --slide-actions-startIn LTR, left value
    +

    Example

    + + <deckgo-deck>{'\n'} <deckgo-slide-title>{'\n'} <h1 slot="title">My presentation title</h1>{'\n'} <p slot="content">{'\n'} Hello World 🚀{'\n'} </p>{'\n'} </deckgo-slide-title>{'\n'}{'\n'} <a href="#" onclick="share()" slot="actions" style="color: inherit;"><ion-icon name="share"></ion-icon></a>{'\n'}</deckgo-deck> +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/deck/app-deck-background/app-deck-background.tsx b/docs/src/app/pages/docs/deck/app-deck-background/app-deck-background.tsx new file mode 100644 index 000000000..99e900136 --- /dev/null +++ b/docs/src/app/pages/docs/deck/app-deck-background/app-deck-background.tsx @@ -0,0 +1,129 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-deck-background' +}) +export class AppDeckBackground { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Background

    +

    Beside slides and templates, a DeckDeckGo deck could also contains a customized element background which could be injected using a dedicated slot.

    +

    Table of contents

    + +

    Introduction

    +

    The slot background provided for the deck will be cloned into each slides of your presentation.

    +

    This slot is particularly useful if you wish to display your brand or company logo on each slides.

    +

    Also worth to notice, this slot will be hidden when the presentation will be displayed full screen.

    +

    Optionally, if you wish, this slot could also not be cloned, could be useful in case you rather would like to display a background which follows your entire presentation.

    +

    Attributes

    +

    The following attribute could be applied to the deckgo-deck element:

    + + + + + + + + + + + + + + + + + + + +
    PropertyAttributeMandatoryDescriptionTypeDefault
    cloneBackgroundclone-backgroundSet to false in case you don't want to clone the background in each slidesbooleantrue
    +

    Theming

    +

    The following theming options will affect the slot background if set on the deckgo-deck or any slides.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --slide-background-positionabsoluteThe position of the background
    --slide-background-top0Top value
    --slide-background-endIn LTR, right value
    --slide-background-start0In LTR, left value
    --slide-background-widthA background width, default without being set all width
    --slide-background-heightA background height, default without being set all height
    --slide-background-print-displaynoneDon't print per default the background
    +

    Examples

    +

    An example with an image cloned as background for each slides:

    + + <deckgo-deck>{'\n'} <deckgo-slide-title>{'\n'} <h1 slot="title">My presentation title</h1>{'\n'} <p slot="content">{'\n'} Hello World 🚀{'\n'} </p>{'\n'} </deckgo-slide-title>{'\n'}{'\n'} <img slot="background" data-src="https://deckdeckgo.com/assets/img/deckdeckgo.png">{'\n'}</deckgo-deck> +

    An example with a more complex html and css element which is set as background for the all presentation:

    + + <deckgo-deck clone-background="false">{'\n'} <deckgo-slide-title>{'\n'} <h1 slot="title">My presentation title</h1>{'\n'} <p slot="content">{'\n'} Hello World 🚀{'\n'} </p>{'\n'} </deckgo-slide-title>{'\n'}{'\n'} <div class="circle" slot="background"></div>{'\n'}</deckgo-deck> +

    where for example the related circle css code could be:

    + + div.circle {{'\n'} position: absolute;{'\n'} left: 50%;{'\n'} transform: translate(-50%, 0);{'\n'}{'\n'} bottom: -10vh;{'\n'} width: 800vw;{'\n'} height: 100vh;{'\n'}{'\n'} border-radius: 50%;{'\n'} background: yellow;{'\n'} opacity: 0.3;{'\n'}} +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/deck/app-deck-events/app-deck-events.tsx b/docs/src/app/pages/docs/deck/app-deck-events/app-deck-events.tsx new file mode 100644 index 000000000..74fb8cd40 --- /dev/null +++ b/docs/src/app/pages/docs/deck/app-deck-events/app-deck-events.tsx @@ -0,0 +1,78 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-deck-events' +}) +export class AppDeckEvents { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Events

    +

    The DeckDeckGo deck triggers the following events:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    EventEmitted valueDescription
    slidesDidLoadstring[]Emitted when the deck and all slides have loaded. Emit the an ordered list of all the tag names of the slides.
    slideNextDidChangenumberEmitted when the next slide has started. Emit the index of the new active slide.
    slidePrevDidChangenumberEmitted when the previous slide has ended. Emit the index of the new active slide.
    slideToChangenumberEmitted when a specific slide has been selected. Emit the index of the new selected slide.
    slideDragnumberEmitted when the slider is actively being moved. Emit the transformX value of the deck.
    slideWillChangenumberEmitted before the active slide has changed. Emit the transformX value of the deck.
    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/deck/app-deck-extra-features/app-deck-extra-features.tsx b/docs/src/app/pages/docs/deck/app-deck-extra-features/app-deck-extra-features.tsx new file mode 100644 index 000000000..ddd13aa1a --- /dev/null +++ b/docs/src/app/pages/docs/deck/app-deck-extra-features/app-deck-extra-features.tsx @@ -0,0 +1,55 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-deck-extra-features' +}) +export class AppDeckExtraFeatures { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Extra Features

    +

    The DeckDeckGo deck exposes a couple of extra features which could be added to your presentation too if you don't already use the starter kit.

    +

    Table of contents

    + +

    Toggle on/off the full screen mode

    + + await deck.toggleFullScreen(); +

    Print the presentation

    + + await deck.print(); +

    Mobile

    +

    A util method to know if the current presentation is browsed on a mobile device or not.

    + + await deck.isMobile(); // resolve a boolean +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/deck/app-deck-navigation/app-deck-navigation.tsx b/docs/src/app/pages/docs/deck/app-deck-navigation/app-deck-navigation.tsx new file mode 100644 index 000000000..0d5b8d83a --- /dev/null +++ b/docs/src/app/pages/docs/deck/app-deck-navigation/app-deck-navigation.tsx @@ -0,0 +1,166 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-deck-navigation' +}) +export class AppDeckNavigation { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Navigation

    +

    If you use the DeckDeckGo starter kit, the navigation methods are already bind out of the box.

    +

    However, if you wish to know more about the different options or are using the core of DeckDeckGo, the DeckDeckGo deck exposes the following asynchronous methods in case you would like to add navigation features to your project.

    + +

    Introduction

    +

    In the following examples we are accessing the features available on the deck element <deckgo-deck>.

    +

    For example, in Vanilla Javascript, we would get a reference to the deck using the following selector:

    + + const deck = document.getElementsByTagName('deckgo-deck'); +

    Go to next slide

    + + await deck.slideNext(); +

    Optional parameters

    + + + + + + + + + + + + + + + + + + + + + +
    ParameterTypeDefaultDescription
    slideAnimationbooleantrueSet to false in case you would not like the inner animation of a slide, like the reveal or code animation for example, to be performed.
    emitEventbooleantrueSet to false in case you would not like the events slideNextDidChange and slidePrevDidChange to be fired. Note that to use this parameter, the previous should be set too.
    +

    For example:

    + + await deck.slideNext(false, false); +

    Go to previous slide

    + + await deck.slidePrev(); +

    Optional parameters

    + + + + + + + + + + + + + + + + + + + + + +
    ParameterTypeDefaultDescription
    slideAnimationbooleantrueSet to false in case you would not like the inner animation of a slide, like the reveal or code animation for example, to be performed.
    emitEventbooleantrueSet to false in case you would not like the events slideNextDidChange and slidePrevDidChange to be fired. Note that to use this parameter, the previous should be set too.
    +

    For example:

    + + await deck.slidePrev(false, false); +

    Go to a specific slide

    + + await deck.slideTo(0); // parameters: index: number, speed?: number | undefined +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ParameterTypeDefaultDescription
    indexnumberSlide index of the specific slide.
    speednumber300The slide transition speed. Default 300ms.
    emitEventbooleantrueIn case you would not like to emit the event slideToChange. Note that if you would use this parameter, the above speed parameter must be provided too.
    +

    Is the deck at the begin

    + + await deck.isBeginning(); // resolve a boolean +

    Is the deck at the end

    + + await deck.isEnd(); // resolve a boolean +

    Get the index of the current slide

    + + await deck.getActiveIndex(); // resolve a number +

    Get the length of the deck

    + + await deck.getLength(); // resolve a number +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/deck/app-deck-pager/app-deck-pager.tsx b/docs/src/app/pages/docs/deck/app-deck-pager/app-deck-pager.tsx new file mode 100644 index 000000000..4d737b31e --- /dev/null +++ b/docs/src/app/pages/docs/deck/app-deck-pager/app-deck-pager.tsx @@ -0,0 +1,126 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-deck-pager' +}) +export class AppDeckPager { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Pager

    +

    DeckDeckGo will per default display a pager in form of a progress circle bar. It's possible to hide it or to customize the following various style options.

    +

    Also worth to notice that the pager inherits per default the document and deck direction (LTR or RTL for example).

    + +

    Show or hide

    +

    The show or hide options of the pager are available on the <deckgo-deck> element.

    + + + + + + + + + + + + + + + + + + + + + +
    AttributeTypeDefaultDescription
    pagerbooleantrueShow or hide the pager
    pagerPercentagebooleantrueShow or hide the progression in percentage inside the pager
    +

    Customization

    +

    The following style options are available to style the pager:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefault
    --pager-size56px
    --pager-margin-top8px
    --pager-margin-end8px
    --pager-margin-bottom8px
    --pager-margin-start8px
    --pager-background#eee
    --pager-text-color#4c8dff
    --pager-text-size0.5em
    --pager-stroke-outer-width2.8
    --pager-stroke-inner-width1.8
    --pager-position-left
    --pager-position-right
    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/deck/app-deck-size/app-deck-size.tsx b/docs/src/app/pages/docs/deck/app-deck-size/app-deck-size.tsx new file mode 100644 index 000000000..302fb73ad --- /dev/null +++ b/docs/src/app/pages/docs/deck/app-deck-size/app-deck-size.tsx @@ -0,0 +1,42 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-deck-size' +}) +export class AppDeckSize { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Size

    +

    Per default, the DeckDeckGo deck will use all the browser window size respectively width and height.

    +

    However, it is possible to include or use DeckDeckGo in any container, for that purpose you would only need to set the attribute embedded to true.

    + + <div style="width: 500px; height: 400px;">{'\n'} <deckgo-deck embedded="true">{'\n'} <deckgo-slide-title>{'\n'} <h1 slot="title">My presentation title</h1>{'\n'} <p slot="content">{'\n'} Hello World 🚀{'\n'} </p>{'\n'} </deckgo-slide-title>{'\n'} </deckgo-deck>{'\n'}</div> +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/edit/app-edit-default/app-edit-default.tsx b/docs/src/app/pages/docs/edit/app-edit-default/app-edit-default.tsx new file mode 100644 index 000000000..e93b41416 --- /dev/null +++ b/docs/src/app/pages/docs/edit/app-edit-default/app-edit-default.tsx @@ -0,0 +1,36 @@ +import {Component, Element} from '@stencil/core'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-edit-default' +}) +export class AppEditDefault { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + render() { + return [ + , + + +

    HTML

    +

    To edit your DeckDeckGo presentation your could either use HTML or Markdown.

    +

    The default language is HTML. It's also the recommended language as it will offers you more flexibility specially regarding styling.

    +

    If you use the starter kit and use HTML as language for the edition, you could begin to edit the index.html of your project as displayed in the chapter Concept.

    +

    If you wish to edit your talk using Markdown have a look to the next chapter.

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/edit/app-edit-fonts/app-edit-fonts.scss b/docs/src/app/pages/docs/edit/app-edit-fonts/app-edit-fonts.scss new file mode 100644 index 000000000..78c385fe6 --- /dev/null +++ b/docs/src/app/pages/docs/edit/app-edit-fonts/app-edit-fonts.scss @@ -0,0 +1,17 @@ +app-edit-fonts { + deckgo-highlight-code { + --deckgo-highlight-code-token-selector: black; + --deckgo-highlight-code-token-property: black; + --deckgo-highlight-code-token-function: black; + } +} + +@media (prefers-color-scheme: dark) { + app-edit-fonts { + deckgo-highlight-code { + --deckgo-highlight-code-token-selector: white; + --deckgo-highlight-code-token-property: white; + --deckgo-highlight-code-token-function: white; + } + } +} diff --git a/docs/src/app/pages/docs/edit/app-edit-fonts/app-edit-fonts.tsx b/docs/src/app/pages/docs/edit/app-edit-fonts/app-edit-fonts.tsx new file mode 100644 index 000000000..570b3008e --- /dev/null +++ b/docs/src/app/pages/docs/edit/app-edit-fonts/app-edit-fonts.tsx @@ -0,0 +1,41 @@ +import {Component, Element} from '@stencil/core'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-edit-fonts', + styleUrl: 'app-edit-fonts.scss' +}) +export class AppEditFonts { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + render() { + return [ + , + + +

    Fonts

    +

    As any web application, the fonts of your presentation could be easily styled, but DeckDeckGo goes one step further by downloading and installing automatically any Google Fonts you would like to use during the setup process (if you are using the starter kit).

    +

    Using automatically any Google Fonts

    +

    After you have kick-started your presentation running npm init deckdeckgo in a terminal and provided the information as describe in the Getting started chapter, the DeckDeckGo CLI will ask you if you are looking to use Google Fonts and if you would answer yes, will guide you to get some information about the font.

    +

    Once all information gathered, it will automatically download the fonts, add them to your presentation and even do the settings in the CSS stylesheets for you.

    +

    Example

    +

    The following is an example of the process if you would like to install the Google Font Lato:

    + + ? Do you want to use a Google Font for your presentation? (y/N) Y{'\n'}{'\n'}⠼ Fetching fonts list...{'\n'}{'\n'}? Search a Google font (min. 3 characters)? ato{'\n'}{'\n'}? Select the font (Use arrow keys){'\n'} Atomic Age {'\n'}❯ Lato {'\n'} Search again {'\n'} Skip {'\n'}{'\n'}? Select charsets (Press <space> to select, <a> to toggle all, <i> to invert selection){'\n'}❯◉ latin{'\n'} ◯ latin-ext{'\n'}{'\n'}? Select styles (Press <space> to select, <a> to toggle all, <i> to invert selection){'\n'} ◯ 100{'\n'} ◯ 100italic{'\n'} ◯ 300{'\n'} ◯ 300italic{'\n'} ❯◉ regular{'\n'} ◯ italic{'\n'} ◯ 700{'\n'} (Move up and down to reveal more choices){'\n'}{'\n'}⠼ Downloading font{'\n'}⠼ Writing to CSS files...{'\n'} +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/edit/app-edit-lazy-loading/app-edit-lazy-loading.tsx b/docs/src/app/pages/docs/edit/app-edit-lazy-loading/app-edit-lazy-loading.tsx new file mode 100644 index 000000000..1348ef8f6 --- /dev/null +++ b/docs/src/app/pages/docs/edit/app-edit-lazy-loading/app-edit-lazy-loading.tsx @@ -0,0 +1,36 @@ +import {Component, Element} from '@stencil/core'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-edit-lazy-loading' +}) +export class AppEditLazyLoading { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + render() { + return [ + , + + +

    Lazy loading

    +

    DeckDeckGo is build for performance and try to lazy load as much as possible the components of your presentation, have a look to the Lighthouse score of the DeckDeckGo website for reference.

    +

    Therefore, in order to lazy load the images of your presentation, please provide their url using the attribute data-src instead of src. DeckDeckGo will then take care of loading them only when needed.

    + + <img data-src="https://deckdeckgo.com/assets/img/deckdeckgo.png"/> +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/edit/app-edit-markdown/app-edit-markdown.tsx b/docs/src/app/pages/docs/edit/app-edit-markdown/app-edit-markdown.tsx new file mode 100644 index 000000000..733114498 --- /dev/null +++ b/docs/src/app/pages/docs/edit/app-edit-markdown/app-edit-markdown.tsx @@ -0,0 +1,81 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-edit-markdown' +}) +export class AppEditMarkdown { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Markdown

    +

    If you wish, you could edit your DeckDeckGo presentation using Markdown. This chapter has for goal to introduce you briefly on how editing your slides with Markdown differs from the HTML method.

    +

    Table of contents

    + +

    Introduction

    +

    When you edit your talk with Markdown, the DeckDeckGo Webpack Markdown Plugin will convert, at bundle time, your code to HTML and will inject the results in the index.html file. Doing so, your DeckDeckGo presentation will remain SEO friendly even without server side rendering.

    +

    Edit

    +

    To begin to edit your talk, instead of editing the index.html you will instead have to edit the index.md file provided by the starter kit.

    +

    Furthermore than the standard Markdown tags, you will be able to use extended tags in order to specify which types of slides you would like to use. For that purpose, use the separator --- followed by a shortened version of the template's name, like for example --- title for </deckgo-slide-title>.

    +

    The plugin also takes care of injecting the content you would provide in the right slots.

    +

    Example

    +

    The following <deckgo-slide-title/> slide:

    + + --- title{'\n'}# My presentation title{'\n'}{'\n'}Hello World 🚀 +

    will be parsed into:

    + + <deckgo-slide-title>{'\n'} <h1 slot="title">My presentation title</h1>{'\n'} <div slot="content">{'\n'} <p>Hello World 🚀</p>{'\n'} </div>{'\n'}</deckgo-slide-title> +

    Attributes

    +

    As some templates needs attributes, you will also be able to specify them in Markdown.

    +

    For example the <deckgo-slide-gif/> slide:

    + + --- gif src="https://media.giphy.com/media/xUA7baWfTjfHGLZc3e/giphy.gif" alt="My gif" fullscreen="true"{'\n'}# My title{'\n'}{'\n'}# Hey{'\n'}{'\n'}### It's cool gif +

    will be parsed into:

    + + <deckgo-slide-gif src="https://media.giphy.com/media/xUA7baWfTjfHGLZc3e/giphy.gif" alt="My gif" fullscreen="true">{'\n'} <h1 slot="title">My title</h1>{'\n'} <h1 slot="header">Hey</h1>{'\n'} <h2 slot="footer">It's a cool gif</h2>{'\n'}</deckgo-slide-gif> +

    Notes

    +

    To add some notes to a particular slide, use the separator *** and write down your notes afterwards.

    +

    Optionally, if you wish to display your notes in your deck, you could also use the attribute show.

    + + --- title{'\n'}# My presentation title{'\n'}{'\n'}Hello World 🚀{'\n'}{'\n'}***{'\n'}{'\n'}I should not forget to think about that during my talk{'\n'}{'\n'}...and say hello to mum +

    will be parsed into:

    + + <deckgo-slide-title>{'\n'} <h1 slot="title">My presentation title</h1>{'\n'} <div slot="content">{'\n'} <p>Hello World 🚀</p>{'\n'} </div>{'\n'} <div slot="notes">{'\n'} I should not forget to think about that during my talk{'\n'}{'\n'} ...and say hello to mum{'\n'} </div>{'\n'}</deckgo-slide-title> +

    Summary

    +

    When you choose Markdown, you edit your slides in index.md and use standard Markdown except the extra tags --- to declare your slides and *** if you wish to add notes.

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/edit/app-edit-rtl/app-edit-rtl.tsx b/docs/src/app/pages/docs/edit/app-edit-rtl/app-edit-rtl.tsx new file mode 100644 index 000000000..942fecfe1 --- /dev/null +++ b/docs/src/app/pages/docs/edit/app-edit-rtl/app-edit-rtl.tsx @@ -0,0 +1,36 @@ +import {Component, Element} from '@stencil/core'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-edit-rtl' +}) +export class AppEditRtl { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + render() { + return [ + , + + +

    RTL Support

    +

    DeckDeckGo offers full LTR and RTL support. The deck inherits its parent text direction.

    +

    Commonly, if you wish to use RTL for your all page respectively presentation, you could set the attribute dir of the root html tag to rtl.

    + + <!DOCTYPE html>{'\n'}<html dir="rtl">{'\n'}<body>{'\n'} <deckgo-deck>{'\n'} </deckgo-deck>{'\n'}</body>{'\n'}</html> +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/edit/app-edit-theming/app-edit-theming.tsx b/docs/src/app/pages/docs/edit/app-edit-theming/app-edit-theming.tsx new file mode 100644 index 000000000..912f4385f --- /dev/null +++ b/docs/src/app/pages/docs/edit/app-edit-theming/app-edit-theming.tsx @@ -0,0 +1,52 @@ +import {Component, Element} from '@stencil/core'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-edit-theming' +}) +export class AppEditTheming { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + render() { + return [ + , + + +

    Theming

    +

    Theming a DeckDeckGo presentation is quick and easy.

    +

    Table of contents

    + +

    Theme

    +

    To create the theme for your deck when you are using the DeckDeckGo starter kit, use the Ionic Color Generator to pick the colors of your choice.

    +

    Once done, copy the generated CSS variables and parse them into the src/css/variables.css file of your presentation.

    +

    Finally, edit the index.html and replace the color of the body background.

    + + body {{'\n'} background: #3880ff;{'\n'}} +
    +

    This background color is defined directly in the index.html file because it is the one which will be applied until your presentation is loaded

    +
    +

    Custom styles

    +

    DeckDeckGo also offers various theming options which could be set using CSS variables and which are described in their respective slides' templates, see chapter concept to begin with.

    +

    Notes

    +

    If you would miss or need further theming options, don't hesitate to open an issue and/or submit a PR, it would be my pleasure to add more theming flexibility and options

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/introduction/app-installation/app-installation.scss b/docs/src/app/pages/docs/introduction/app-installation/app-installation.scss new file mode 100644 index 000000000..e69de29bb diff --git a/docs/src/app/pages/docs/introduction/app-installation/app-installation.tsx b/docs/src/app/pages/docs/introduction/app-installation/app-installation.tsx new file mode 100644 index 000000000..758270b55 --- /dev/null +++ b/docs/src/app/pages/docs/introduction/app-installation/app-installation.tsx @@ -0,0 +1,58 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-installation', + styleUrl: 'app-installation.scss' +}) +export class AppInstallation { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Installation

    +

    To create easily your PWA presentation and to enjoy all the options, I suggest you to create your slides using the CLI and the starter kit as described in the previous chapter.

    +

    However, the DeckDeckGo core component, could be installed in any project too.

    +

    If you wish to do so, use it directly in your project from a CDN, using a simple script include, or install it from npm.

    +

    Table of contents

    + +

    Using DeckDeckGo from a CDN

    +

    It's recommended to use unpkg to use the DeckDeckGo from a CDN. To do so, add the following include script in the main HTML file of your project:

    + + <script src="https://unpkg.com/deckdeckgo@latest/dist/deckdeckgo.js"></script> +

    Install DeckDeckGo from NPM

    +

    Install DeckDeckGo in your project from npm using the following command:

    + + npm install deckdeckgo +

    Framework integration

    +

    The Stencil documentation provide examples of framework integration for Angular, React, Vue and Ember.

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/introduction/app-introduction/app-introduction.scss b/docs/src/app/pages/docs/introduction/app-introduction/app-introduction.scss new file mode 100644 index 000000000..9fb43fce9 --- /dev/null +++ b/docs/src/app/pages/docs/introduction/app-introduction/app-introduction.scss @@ -0,0 +1,15 @@ +app-introduction { + deckgo-highlight-code { + --deckgo-highlight-code-token-selector: black; + --deckgo-highlight-code-token-property: black; + } +} + +@media (prefers-color-scheme: dark) { + app-introduction { + deckgo-highlight-code { + --deckgo-highlight-code-token-selector: white; + --deckgo-highlight-code-token-property: white; + } + } +} diff --git a/docs/src/app/pages/docs/introduction/app-introduction/app-introduction.tsx b/docs/src/app/pages/docs/introduction/app-introduction/app-introduction.tsx new file mode 100644 index 000000000..d49be6852 --- /dev/null +++ b/docs/src/app/pages/docs/introduction/app-introduction/app-introduction.tsx @@ -0,0 +1,53 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-introduction', + styleUrl: 'app-introduction.scss' +}) +export class AppIntroduction { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Getting started

    +

    DeckDeckGo provides a CLI and a starter kit.

    +

    Prerequisites

    +

    DeckDeckGo requires a recent LTS version of NodeJS and npm. Make sure you've installed and/or updated Node before continuing.

    +
    +

    Note that you will need to use npm 6 or higher

    +
    +

    Starting a new presentation

    +

    Run the following command in a terminal to create a new deck:

    + + npm init deckdeckgo +

    After running init you will be provided with a prompt so that you can set the base information for your new deck and choose if you rather like to edit it in HTML or markdown:

    + + Cool, let's kick start a new DeckDeckGo presentation{'\n'}{'\n'}? What's your project name (will be use to create a new folder)? (deckdeckgo){'\n'}{'\n'}? What's your presentation name (max. 45 characters, will be use for meta tags and manifest information)? (DeckDeckGo){'\n'}{'\n'}? What's your presentation about (its description)? (Create a lightweight presentation using Web Components 🚀){'\n'}{'\n'}? What's your name (will be use for the author meta information)? (David){'\n'}{'\n'}? What method do you want to use to edit your presentation? (Use arrow keys){'\n'} ❯ HTML {'\n'} Markdown +

    Once your presentation created, go to your new project's folder and start editing your slides and content for your talk 😉

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/introduction/app-publishing/app-publishing.tsx b/docs/src/app/pages/docs/introduction/app-publishing/app-publishing.tsx new file mode 100644 index 000000000..8316cd155 --- /dev/null +++ b/docs/src/app/pages/docs/introduction/app-publishing/app-publishing.tsx @@ -0,0 +1,71 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-publishing' +}) +export class AppPublishing { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Publishing

    +

    DeckDeckGo bundles your presentation as a Progressive Web App which could be hosted on any Web Server or hosting solution.

    +
    +

    Not sure what PWAs are? Check out Ionic's PWA Overview for more info.

    +
    +

    Table of contents

    + +

    SEO friendly

    +

    It is worth to notice that DeckDeckGo is, respectively your slides build with are, SEO friendly.

    +

    Therefore you do not need to implement a complex server-side rendering (SSR) hosting solution.

    +

    Before production

    +

    Before your final build and most important before deploying online your deck, don't forget to edit the information about your presentation in the following files:

    +
      +
    1. Edit the meta tags in the <head/> of your src/index.html file

      +
    2. +
    3. Generate your icons and replace the respective files in the assets folder. For that purpose I suggest you to use the real great tool RealFaviconGenerator

      +
    4. +
    5. Update the information in the manifest.json file

      +
    6. +
    +

    Production build

    +

    When you are ready for your talk or ready to publish online your slides, run the following command in a terminal to bundle your presentation for production:

    + + npm run build +

    If you do not wish to remove your notes from your presentation, run the build command with the attributes --notes:

    + + npm run build -- --notes +

    If you wish to run your presentation locally afterwards without rebuilding everything, you could run the following command to start only the dev server:

    + + npm run dev +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/introduction/app-remote-control/app-remote-control.scss b/docs/src/app/pages/docs/introduction/app-remote-control/app-remote-control.scss new file mode 100644 index 000000000..7fc6bdbfd --- /dev/null +++ b/docs/src/app/pages/docs/introduction/app-remote-control/app-remote-control.scss @@ -0,0 +1,8 @@ +img { + width: 10rem; +} + +ul li { + list-style-type: initial; + list-style-position: inside; +} diff --git a/docs/src/app/pages/docs/introduction/app-remote-control/app-remote-control.tsx b/docs/src/app/pages/docs/introduction/app-remote-control/app-remote-control.tsx new file mode 100644 index 000000000..03f727f35 --- /dev/null +++ b/docs/src/app/pages/docs/introduction/app-remote-control/app-remote-control.tsx @@ -0,0 +1,76 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-remote-control', + styleUrl: 'app-remote-control.scss' +}) +export class AppRemoteControl { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Remote control

    +

    Cherry on the cake 🍒🎂 DeckDeckGo comes with a Progressive Web App to remote control your slides 📱

    +

    Table of contents

    + +

    How does it work

    +

    The same Progressive Web App remote control could be use to control any presentations developed with DeckDeckGo.

    +

    If you are using the starter kit, out of the box, your presentation will signal itself as "controllable" and will therefore be "discoverable".

    +

    One a presentation would be linked with the remote control, the communication between these will happens through a real-time channel using WebRTC.

    +

    Give a try

    +

    Better than a description, the DeckDeckGo website implement a deck and receiver to let you interact with this application, just give it a try:

    +
      +
    1. Open the DeckDeckGo website 👉 https://deckdeckgo.com
    2. +
    3. Start the remote control PWA 👉 https://deckdeckgo.app
    4. +
    5. Have fun 🎉
    6. +
    +

    Control your slides

    +

    Use the remote control to take remotely the remotely of your presentation. Useful to interact with present your slides while you are focusing one your talk.

    +

    Features

    +
      +
    • Switch between slides and/or swipe your slides
    • +
    • Play and pause Youtube video
    • +
    • Draw over your slide deck
    • +
    • Highlight elements of your presentation
    • +
    +

    Screenshot

    +

    The DeckDeckGo remote control

    +

    Time tracker

    +

    The remote control let you track your talk's time too. This application implements local notifications to inform you when your talk is about to finish or is finished.

    +

    Screenshot

    +

    The DeckDeckGo remote control timer

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/introduction/app-running/app-running.tsx b/docs/src/app/pages/docs/introduction/app-running/app-running.tsx new file mode 100644 index 000000000..b3ab43a25 --- /dev/null +++ b/docs/src/app/pages/docs/introduction/app-running/app-running.tsx @@ -0,0 +1,54 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-running' +}) +export class AppRunning { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Running

    +

    There are two options to run and showcase your presentation:

    +

    You could either publish your deck online and showcase it from there, by accessing it with its online url with your favorite browser. For example by accessing an URL like https://deckdeckgo.com.

    +

    Or you could showcase your deck in your favorite browser by running it locally using the integrated dev server provided by the DeckDeckGo starter kit with the default access URL http://localhost:3000.

    +

    Local

    +

    To run your presentation, in a terminal, start the following command to bundle your slides and to keep listening to modifications:

    + + npm run start +

    If you wish to develop your presentation without adding it to the list of available deck of the remote control, run the following command instead:

    + + npm run start-no-remote +
    +

    Furthermore to serve your deck, both above commands are watching your presentation's source files for changes and will trigger a new build and reload in case of modifications

    +
    +

    lite-server is use as integrated dev server.

    +

    Online

    +

    If you are looking to showcase your presentation from an online URL, have a look to the next chapter publishing before deploying your deck on your hosting solution.

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/misc/app-misc-backstory/app-misc-backstory.tsx b/docs/src/app/pages/docs/misc/app-misc-backstory/app-misc-backstory.tsx new file mode 100644 index 000000000..27d1f823b --- /dev/null +++ b/docs/src/app/pages/docs/misc/app-misc-backstory/app-misc-backstory.tsx @@ -0,0 +1,36 @@ +import {Component, Element} from '@stencil/core'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-misc-backstory' +}) +export class AppMiscBackstory { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + render() { + return [ + , + + +

    Backstory

    +

    I had the opportunity to talk about Web Components and Ionic. While I was developing my presentation it came to my mind that I was not really following what I was about to present, that's why I wrapped up together DeckDeckGo, this new tool to create a Progressive Web App alternative for simple presentations using Web Components.

    +

    I hope my little project will help you to create a slick presentation 🚀

    +

    To infinity and beyond 🖖

    +

    David

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/misc/app-misc-collections/app-misc-collections.tsx b/docs/src/app/pages/docs/misc/app-misc-collections/app-misc-collections.tsx new file mode 100644 index 000000000..1f65aa6a1 --- /dev/null +++ b/docs/src/app/pages/docs/misc/app-misc-collections/app-misc-collections.tsx @@ -0,0 +1,74 @@ +import {Component, Element} from '@stencil/core'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-misc-collections' +}) +export class AppMiscCollections { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + render() { + return [ + , + + +

    Collections

    +

    A collection of presentations and talks where DeckDeckGo was used:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TitleDate and eventAuthorRepoAvailable online
    Pantallas táctiles2019/01/23 Universitat Jaume I, Castellón de la Plana (Spain)David López Castellotesap126-pantallas-tactileshttps://bit.ly/2FFqXWX
    Schaffhausen civictech prototype?2018/12/08Sandro Scalcohttps://schaffhausen.io
    Ionic v4 and web components2018/10/26 Web Zürich October, ZürichDavid Dal BuscoWeb Zueri
    Ionic v4, web components, shadow dom and beyond2018/10/16 Pantalks, ZürichDavid Dal BuscoIonicv4-and-beyond
    +

    Send me your slides

    +

    If you would publish online a presentation or talk you would have built with DeckDeckGo, reach me out, I would be super duper happy to add it to the list of talks and presentations ❤️

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/misc/app-misc-logo/app-misc-logo.tsx b/docs/src/app/pages/docs/misc/app-misc-logo/app-misc-logo.tsx new file mode 100644 index 000000000..8f7845d25 --- /dev/null +++ b/docs/src/app/pages/docs/misc/app-misc-logo/app-misc-logo.tsx @@ -0,0 +1,34 @@ +import {Component, Element} from '@stencil/core'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-misc-logo' +}) +export class AppMiscLogo { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + render() { + return [ + , + + +

    Logo

    +

    The DeckDeckGo logo was designed and offered by Anita from Skinque.com, a great online marketplace for tattoos 🤘

    +

    Reach her out if you are looking for a cool custom tattoo or a nice logo 😃

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/misc/app-misc-open-source/app-misc-open-source.scss b/docs/src/app/pages/docs/misc/app-misc-open-source/app-misc-open-source.scss new file mode 100644 index 000000000..1de4e140b --- /dev/null +++ b/docs/src/app/pages/docs/misc/app-misc-open-source/app-misc-open-source.scss @@ -0,0 +1,5 @@ +div.github-links { + ion-badge { + margin: 4px; + } +} diff --git a/docs/src/app/pages/docs/misc/app-misc-open-source/app-misc-open-source.tsx b/docs/src/app/pages/docs/misc/app-misc-open-source/app-misc-open-source.tsx new file mode 100644 index 000000000..807d47fff --- /dev/null +++ b/docs/src/app/pages/docs/misc/app-misc-open-source/app-misc-open-source.tsx @@ -0,0 +1,50 @@ +import {Component, Element} from '@stencil/core'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-misc-open-source', + styleUrl: 'app-misc-open-source.scss' +}) +export class AppMiscOpenSource { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + render() { + return [ + , + + +

    Open source

    +

    DeckDeckGo is open source and its source code could be found in the following repos:

    + + +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/slides/app-slide-author/app-slide-author.tsx b/docs/src/app/pages/docs/slides/app-slide-author/app-slide-author.tsx new file mode 100644 index 000000000..f22ef276a --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-author/app-slide-author.tsx @@ -0,0 +1,203 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-slide-author', + styleUrl: 'app-slides-author.scss' +}) +export class AppSlideAuthor { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Slide: Author

    +

    The "Author" slide let you introduce the author of the presentation.

    +

    Table of contents

    + +

    Layout

    +
    + + +

    slot="title"

    +
    slot="author"
    +
    twitter
    +
    linkedin
    +
    +
    +
    + +

    Usage

    +

    The "Author" slide's Web Component could be integrated using the tag <deckgo-slide-author/>.

    + + <deckgo-deck>{'\n'} <deckgo-slide-author img-src="/assets/author.jpeg" img-alt="My self">{'\n'} <h1 slot="title">Author</h1>{'\n'} <div slot="author">{'\n'} <h2>David</h2>{'\n'} <p>Something about me</p>{'\n'} </div>{'\n'} <div slot="social-link"><deckgo-social twitter="daviddalbusco">twitter</deckgo-social></div>{'\n'} </deckgo-slide-author>{'\n'}</deckgo-deck> +

    Slots

    +

    Both slots title, author and social-link are optional, but of course the slide would looks better with at least the slot author would be provided.

    +

    Notes:

    +
      +
    • The slot title is hidden. If you use the DeckDeckGo starter, it will be use for the navigation modal

      +
    • +
    • You could provide up to six social-link slots. Each of these could be your custom code or you could use the component <deckgo-social/> to easily provide a link to an external URI.

      +
    • +
    +

    Notes

    +

    Optionally a slot notes could be use to add some notes regarding the particular slide. These will be automatically displayed in the remote control.

    +

    If you are using the DeckDeckGo starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute show.

    +

    Social components

    +

    The details of the component <deckgo-social/> is described in the components documentation.

    +

    Attributes

    +

    This component offers the following options which could be set using attributes:

    + + + + + + + + + + + + + + + + + + + + + +
    AttributeTypeDefaultDescription
    img-srcstringAn image URI, for example a picture of the author. Note: this image will be displayed as a circle.
    img-altstringAn optional accessibility alt for the image.
    +

    Example

    + + <deckgo-deck>{'\n'} <deckgo-slide-author img-src="/assets/author.jpeg">{'\n'} <div slot="author">{'\n'} <h2>David</h2>{'\n'} <p>Something about me</p>{'\n'} </div>{'\n'} <div slot="social-link"><deckgo-social twitter="daviddalbusco">twitter</deckgo-social></div>{'\n'} <div slot="social-link"><deckgo-social linkedin="david-dal-busco/">linkedin</deckgo-social></div>{'\n'} <div slot="social-link"><deckgo-social medium="david.dalbusco">medium</deckgo-social></div>{'\n'} </deckgo-slide-author>{'\n'}</deckgo-deck> +

    Theming

    +

    The following theming options will affect this component if set on its host or parent.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --background
    --color
    --slide-author-background-startLeft pane background
    --slide-author-color-startLeft pane color
    --slide-author-background-endRight pane background
    --slide-author-color-endRight pane color
    --slide-author-padding-top16pxPadding top of a slide
    --slide-author-padding-end32pxPadding right of a slide
    --slide-author-padding-bottom16pxPadding bottom of a slide
    --slide-author-padding-start32pxPadding left of a slide
    --slide-padding-start32pxModify slotted ul and ol padding-inline-start
    --slide-author-aligninheritModify for example to center if you want to align the content in the middle
    --slide-author-text-aligninheritModify for example to center if you want to align the text in the middle
    --slide-author-img-size80%The size of the image of the left pane
    --slide-author-social-padding-top32pxThe spacing between the author description and the social links
    --zIndex1The z-index of the slide
    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/slides/app-slide-author/app-slides-author.scss b/docs/src/app/pages/docs/slides/app-slide-author/app-slides-author.scss new file mode 100644 index 000000000..5f4275806 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-author/app-slides-author.scss @@ -0,0 +1 @@ +@import "../app-slides-container"; diff --git a/docs/src/app/pages/docs/slides/app-slide-chart/app-slide-chart.tsx b/docs/src/app/pages/docs/slides/app-slide-chart/app-slide-chart.tsx new file mode 100644 index 000000000..ae7b6b4b8 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-chart/app-slide-chart.tsx @@ -0,0 +1,171 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-slide-chart', + styleUrl: 'app-slides-chart.scss' +}) +export class AppSlideChart { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Slide: Chart

    +

    The "Chart" slide let you draw easily charts in your presentation.

    +

    Table of contents

    + +

    Layout

    +
    + + +

    slot="title"

    +
    + +

    slot="title"

    +
    + +

    slot="title"

    +
    +
    +
    + +

    Usage

    +

    The "Chart" slide's Web Component could be integrated using the tag <deckgo-slide-chart/>.

    + + <deckgo-slide-chart src="./assets/csv/data-pie-chart.csv">{'\n'} <h1 slot="title">My Pie chart</h1>{'\n'}</deckgo-slide-chart> +

    Slots

    +

    The slot title is optional.

    +

    Notes

    +

    Optionally a slot notes could be use to add some notes regarding the particular slide. These will be automatically displayed in the remote control.

    +

    If you are using the DeckDeckGo starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute show.

    +

    Chart components

    +

    The slide "Chart" relies on the charts components <deckgo-pie-chart/>, <deckgo-line-chart/> and <deckgo-bar-chart/> which are described in the components documentation.

    +

    Installation

    +

    The DeckDeckGo charts components are provided in separate extra library. If you don't use the DeckDeckGo starter kit and wish to add the DeckDeckGo chart to your project, you will need to install and integrate it from a CDN or npm as described in its installation guide.

    +

    Attributes

    +

    This component offers the following options which could be set using attributes:

    + + + + + + + + + + + + + + + +
    AttributeTypeDefaultDescription
    typestringpieThe type of the chart, pie, line or bar
    +

    Furthermore, this slide component offers the same attributes as the DeckDeckGo charts Web Component, see its documentation for the details.

    +

    Theming

    +

    The following theming options will affect this component if set on its host or parent.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --background
    --color
    --slide-padding-top16pxPadding top of the all slide
    --slide-padding-end32pxPadding right of the all slide
    --slide-padding-bottom16pxPadding bottom of the all slide
    --slide-padding-start32pxPadding left of the all slide
    --zIndex1The z-index of the slide
    --slide-chart-margin-top32pxMargin top of the chart inside its container
    --slide-chart-margin-end96pxMargin right of the chart inside its container
    --slide-chart-margin-bottom32pxMargin bottom of the chart inside its container
    --slide-chart-margin-start32pxMargin left of the chart inside its container
    +

    Furthermore, this slide component offers the exact same CSS4 variables as the DeckDeckGo charts Web Component, see its documentation for the details.

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/slides/app-slide-chart/app-slides-chart.scss b/docs/src/app/pages/docs/slides/app-slide-chart/app-slides-chart.scss new file mode 100644 index 000000000..5f4275806 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-chart/app-slides-chart.scss @@ -0,0 +1 @@ +@import "../app-slides-container"; diff --git a/docs/src/app/pages/docs/slides/app-slide-code/app-slide-code.tsx b/docs/src/app/pages/docs/slides/app-slide-code/app-slide-code.tsx new file mode 100644 index 000000000..720147df7 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-code/app-slide-code.tsx @@ -0,0 +1,137 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-slide-code', + styleUrl: 'app-slides-code.scss' +}) +export class AppSlideCode { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Slide: Code

    +

    The "Code" slide is a the slide to use if you would like to showcase code during your talk.

    +

    Table of contents

    + +

    Layout

    +
    + + +

    slot="title"

    +
    +
    +
    + +

    Usage

    +

    The "Code" slide's Web Component could be integrated using the tag <deckgo-slide-code/>.

    +

    You could provide a file URI to the code you want to display or provide it with a slotted element.

    +

    Usage with file URI

    + + <deckgo-deck>{'\n'} <deckgo-slide-code src="https://domain.com/path-to-my-code.extension">{'\n'} <h1 slot="title">My code</h1>{'\n'} </deckgo-slide-code>{'\n'}</deckgo-deck> +

    Usage with slotted element

    + + <deckgo-deck>{'\n'} <deckgo-slide-code language="java">{'\n'} <h1 slot="title">Manual code</h1>{'\n'} <code slot="code">{'\n'} interface DeckDeckGoDemo {{'\n'} boolean helloWorld();{'\n'} }{'\n'} </deckgo-slide-code>{'\n'}</deckgo-deck> +

    Slots

    +

    The slots title and code are optional.

    +

    This template also exposes a slot info which would let you display an information over your code on mobile devices, useful to explain your reader that they should click to switch between vertical and horizontal scrolling. Find an example of the use of that slot on the DeckDeckGo website.

    +

    Notes

    +

    Optionally a slot notes could be use to add some notes regarding the particular slide. These will be automatically displayed in the remote control.

    +

    If you are using the DeckDeckGo starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute show.

    +

    Code components

    +

    The slide "Code" relies on the code component <deckgo-highlight-code/> which is described in the components documentation.

    +

    Installation

    +

    The DeckDeckGo - Hightlight code component is provided in separate extra library. If you don't use the DeckDeckGo starter kit and wish to add the DeckDeckGo code to your project, you will need to install and integrate it from a CDN or npm as described in its installation guide.

    +

    Attributes

    +

    At least src or the slot code should be provided in order to render code in this template. It offers the same attributes as the DeckDeckGo code Web Component, see its documentation for the details.

    +

    Example with file URI

    + + <deckgo-deck>{'\n'} <deckgo-slide-code hide-anchor="false" src="https://raw.githubusercontent.com/fluster/deckdeckgo/master/src/components/slides/deckdeckgo-slide-code/deckdeckgo-slide-code.tsx">{'\n'} <h1 slot="title">Code</h1>{'\n'} </deckgo-slide-code>{'\n'}</deckgo-deck> +

    Example with slotted element

    + + <deckgo-deck>{'\n'} <deckgo-slide-code language="java">{'\n'} <h1 slot="title">Manual code</h1>{'\n'} <code slot="code">interface NumericTest {{'\n'} boolean computeTest(int n);{'\n'} }{'\n'}{'\n'} public static void main(String args[]) {{'\n'} NumericTest isEven = (n) -> (n % 2) == 0;{'\n'} NumericTest isNegative = (n) -> (n < 0);{'\n'}{'\n'} // Output: false{'\n'} System.out.println(isEven.computeTest(5));{'\n'}{'\n'} // Output: true{'\n'} System.out.println(isNegative.computeTest(-5));{'\n'} }</code>{'\n'} </deckgo-slide-code>{'\n'}</deckgo-deck> +

    Theming

    +

    The following theming options will affect this component if set on its host or parent.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --background
    --color
    --slide-padding-top16pxPadding top of the all slide
    --slide-padding-end32pxPadding right of the all slide
    --slide-padding-bottom16pxPadding bottom of the all slide
    --slide-padding-start32pxPadding left of the all slide
    +

    Furthermore, this slide component offers the exact same CSS4 variables as the DeckDeckGo - Highlight code Web Component, see its documentation for the details.

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/slides/app-slide-code/app-slides-code.scss b/docs/src/app/pages/docs/slides/app-slide-code/app-slides-code.scss new file mode 100644 index 000000000..5f4275806 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-code/app-slides-code.scss @@ -0,0 +1 @@ +@import "../app-slides-container"; diff --git a/docs/src/app/pages/docs/slides/app-slide-content/app-slide-content.tsx b/docs/src/app/pages/docs/slides/app-slide-content/app-slide-content.tsx new file mode 100644 index 000000000..482a61c89 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-content/app-slide-content.tsx @@ -0,0 +1,149 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-slide-content', + styleUrl: 'app-slides-content.scss' +}) +export class AppConcept { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Slide: Content

    +

    The "Content" slide is a simple slide which display its title and content aligned to the start of the page.

    +

    This slide could be for example use for the every slides of your presentation where you would like to display content related to your talk.

    +

    Table of contents

    + +

    Layout

    +
    + + +

    Something related to my topic

    +

    + Cool beans +

    +
    +
    +
    + +

    Usage

    +

    The "Content" slide's Web Component could be integrated using the tag <deckgo-slide-content/>.

    + + <deckgo-deck>{'\n'} <deckgo-slide-content>{'\n'} <h1 slot="title">Something related to my topic</h1>{'\n'} <p slot="content">{'\n'} Cool beans{'\n'} </p>{'\n'} </deckgo-slide-content>{'\n'}</deckgo-deck> +

    Slots

    +

    Both slots title and content are optional. Without providing one of them, the page will remain empty.

    +

    Notes

    +

    Optionally a slot notes could be use to add some notes regarding the particular slide. These will be automatically displayed in the remote control.

    +

    If you are using the DeckDeckGo starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute show.

    +

    Attributes

    +

    This component offers the following options which could be set using attributes:

    + + + + + + + + + + + + + + + + + + + + + +
    AttributeTypeDefaultDescription
    revealbooleanfalseHide the slotted elements li, p an img and display them when navigating using slideNext() or slidePrev() (see documention)
    reveal-show-firstbooleanfalseShow the first elements which would be hidden if reveal is set to true
    +

    Example

    + + <deckgo-deck>{'\n'} <deckgo-slide-content reveal="true" reveal-show-first="true">{'\n'} <h1 slot="title">Something related to my topic</h1>{'\n'} <ul slot="content">{'\n'} <li>Cool</li>{'\n'} <li>Beans</li>{'\n'} </ul>{'\n'} </deckgo-slide-content>{'\n'}</deckgo-deck> +

    Theming

    +

    The following theming options will affect this component if set on its host or parent.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --background
    --color
    --slide-padding-top16pxPadding top of the all slide
    --slide-padding-end32pxPadding right of the all slide
    --slide-padding-bottom16pxPadding bottom of the all slide
    --slide-padding-start32pxPadding left of the all slide
    --zIndex1The z-index of the slide
    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/slides/app-slide-content/app-slides-content.scss b/docs/src/app/pages/docs/slides/app-slide-content/app-slides-content.scss new file mode 100644 index 000000000..5f4275806 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-content/app-slides-content.scss @@ -0,0 +1 @@ +@import "../app-slides-container"; diff --git a/docs/src/app/pages/docs/slides/app-slide-gif/app-slide-gif.tsx b/docs/src/app/pages/docs/slides/app-slide-gif/app-slide-gif.tsx new file mode 100644 index 000000000..04cf9c62f --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-gif/app-slide-gif.tsx @@ -0,0 +1,153 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-slide-gif', + styleUrl: 'app-slides-gif.scss' +}) +export class AppSlideGif { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Slide: Gif

    +

    The "Gif" slide let you add easily a gif, like those provided by Giphy, to your presentation.

    +

    Table of contents

    + +

    Layout

    +
    + + +

    My title

    +

    Hey

    +

    It's a cool gif

    +
    +
    +
    + +

    For images too

    +

    The slide Gif is useful for Gifs but could be use for any images too, in case you would like for example to display an image fullscreen.

    +

    Usage

    +

    The "Gif" slide's Web Component could be integrated using the tag <deckgo-slide-gif/>.

    + + <deckgo-slide-gif src="https://media.giphy.com/media/xUA7baWfTjfHGLZc3e/giphy.gif" alt="My gif" fullscreen="true">{'\n'} <h1 slot="title">My title</h1>{'\n'} <h1 slot="header">Hey</h1>{'\n'} <h2 slot="footer">It's a cool gif</h2>{'\n'}</deckgo-slide-gif> +

    Slots

    +

    The slots title, header and footer are both optional. header and footer would be displayed over the gif.

    +

    Notes

    +

    Optionally a slot notes could be use to add some notes regarding the particular slide. These will be automatically displayed in the remote control.

    +

    If you are using the DeckDeckGo starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute show.

    +

    Gif component

    +

    The slide "Gif" relies on the component <deckgo-gif/> which is described in the components documentation.

    +

    Attributes

    +

    This component offers the following options which could be set using attributes:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeTypeDefaultDescription
    srcstringThe source url, the src, of the Gif. Could be an embeddable external url or a local one.
    altstringAnd alt information could be provided for accessibility reason.
    fullscreennumberfalseIf set to true, the gif width and height will be related to the slide width and height respectively will be fullscreen.
    +

    Theming

    +

    The following theming options will affect this component if set on its host or parent.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --background
    --color
    --slide-padding-top16pxPadding top of the all slide
    --slide-padding-end32pxPadding right of the all slide
    --slide-padding-bottom16pxPadding bottom of the all slide
    --slide-padding-start32pxPadding left of the all slide
    --zIndex1The z-index of the slide
    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/slides/app-slide-gif/app-slides-gif.scss b/docs/src/app/pages/docs/slides/app-slide-gif/app-slides-gif.scss new file mode 100644 index 000000000..5f4275806 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-gif/app-slides-gif.scss @@ -0,0 +1 @@ +@import "../app-slides-container"; diff --git a/docs/src/app/pages/docs/slides/app-slide-qrcode/app-slide-qrcode.tsx b/docs/src/app/pages/docs/slides/app-slide-qrcode/app-slide-qrcode.tsx new file mode 100644 index 000000000..14fcf4de2 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-qrcode/app-slide-qrcode.tsx @@ -0,0 +1,148 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-slide-qrcode', + styleUrl: 'app-slides-qrcode.scss' +}) +export class AppSlideQRCode { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Slide: QR Code

    +

    The "QR code" slide is an handy slide in case you would like to display a QR code. It could for example be use as the very last slide of your presentation to display an easy link pointing to your deck, you previously published online. It would allow your audience to get easily your slides without any delay on their phone.

    +

    Table of contents

    + +

    Layout

    +
    + + +

    slot="title"

    +

    slot="content"

    +
    +
    +
    + +

    Usage

    +

    The "QR code" slide's Web Component could be integrated using the tag <deckgo-slide-qrcode/>.

    +

    Usage

    + + <deckgo-deck>{'\n'} <deckgo-slide-qrcode content="https://deckdeckgo.com">{'\n'} <h1 slot="title">My QR code</h1>{'\n'} <p slot="content">An optional additional content</p>{'\n'} </deckgo-slide-code>{'\n'}</deckgo-deck> +

    Slots

    +

    The slots title and content are optional.

    +

    Notes

    +

    Optionally a slot notes could be use to add some notes regarding the particular slide. These will be automatically displayed in the remote control.

    +

    If you are using the DeckDeckGo starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute show.

    +

    Code components

    +

    The slide "QR Code" relies on the code component <deckgo-qrcode/> which is described in the components documentation.

    +

    Installation

    +

    The DeckDeckGo - QR Code component is provided in separate extra library. If you don't use the DeckDeckGo starter kit and wish to add the DeckDeckGo QR code to your project, you will need to install and integrate it from a CDN or npm as described in its installation guide.

    +

    Attributes

    +

    The attribute content should be provided in order to render a QR code in this template. It offers the same attributes as the DeckDeckGo QR code Web Component, see its documentation for the details.

    +

    Example without any slots

    + + <deckgo-deck>{'\n'} <deckgo-slide-qrcode content="An encoded text">{'\n'} </deckgo-slide-code>{'\n'}</deckgo-deck> +

    Theming

    +

    The following theming options will affect this component if set on its host or parent.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --background
    --color
    --slide-padding-top16pxPadding top of the all slide
    --slide-padding-end32pxPadding right of the all slide
    --slide-padding-bottom16pxPadding bottom of the all slide
    --slide-padding-start32pxPadding left of the all slide
    --slide-qrcode-aligncenterQR code vertical alignment
    --slide-qrcode-text-aligncenterQR code horizontal alignment
    --slide-qrcode-backgroundQR code column's background
    --slide-qrcode-title-displayinheritIf you wish to hide the slot="title"
    +

    Furthermore, this slide component offers the exact same CSS4 variables as the DeckDeckGo - QR code Web Component, see its documentation for the details.

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/slides/app-slide-qrcode/app-slides-qrcode.scss b/docs/src/app/pages/docs/slides/app-slide-qrcode/app-slides-qrcode.scss new file mode 100644 index 000000000..5f4275806 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-qrcode/app-slides-qrcode.scss @@ -0,0 +1 @@ +@import "../app-slides-container"; diff --git a/docs/src/app/pages/docs/slides/app-slide-split/app-slide-split.tsx b/docs/src/app/pages/docs/slides/app-slide-split/app-slide-split.tsx new file mode 100644 index 000000000..5a2795604 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-split/app-slide-split.tsx @@ -0,0 +1,207 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-slide-split', + styleUrl: 'app-slides-split.scss' +}) +export class AppSlideContent { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Slide: Split

    +

    The "Split" slide is a simple slide which display two panes on the page.

    +

    Table of contents

    + +

    Layout

    +
    + + +

    Two columns subject

    +

    + The content you want to display on the left side of the page +

    +

    + The content you want to display on the right side of the page +

    +
    +
    +
    + +

    Usage

    +

    The "Split" slide's Web Component could be integrated using the tag <deckgo-slide-split/>.

    + + <deckgo-deck>{'\n'} <deckgo-slide-split>{'\n'} <h1 slot="title">Two columns subject</h1>{'\n'} <p slot="start">{'\n'} The content you want to display on the left side of the page{'\n'} </p>{'\n'} <p slot="end">{'\n'} The content you want to display on the right side of the page{'\n'} </p>{'\n'} </deckgo-slide-split>{'\n'}</deckgo-deck> +

    Slots

    +

    Both slots title, start and end are optional. Without providing one of them, the page will remain empty.

    +

    The start slot is the content of the left pane respectively the slot end is the content of the right pane.

    +

    Note: The slot title is per default hidden even if you provide it. See attributes below if you wish to display it.

    +

    Notes

    +

    Optionally a slot notes could be use to add some notes regarding the particular slide. These will be automatically displayed in the remote control.

    +

    If you are using the DeckDeckGo starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute show.

    +

    Attributes

    +

    This component offers the following options which could be set using attributes:

    + + + + + + + + + + + + + + + + + + + + + +
    AttributeTypeDefaultDescription
    revealbooleanfalseHide the slotted elements li, p an img and display them when navigating using slideNext() or slidePrev() (see documention)
    reveal-show-firstbooleanfalseShow the first elements which would be hidden if reveal is set to true
    +

    Theming

    +

    The following theming options will affect this component if set on its host or parent.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --background
    --color
    --slide-split-background-startLeft split pane background
    --slide-split-color-startLeft split pane color
    --slide-split-background-endRight split pane background
    --slide-split-color-endRight split pane color
    --slide-split-padding-top16pxPadding top of a slide split pane
    --slide-split-padding-end32pxPadding right of a slide split pane
    --slide-split-padding-bottom16pxPadding bottom of a slide split pane
    --slide-split-padding-start32pxPadding left of a slide split pane
    --slide-split-title-padding-top16pxPadding top of the title of the
    --slide-split-title-padding-end32pxPadding right of the title of the
    --slide-split-title-padding-bottom16pxPadding bottom of the title of the
    --slide-split-title-padding-start32pxPadding left of the title of the
    --slide-padding-start32pxModify slotted ul and ol padding-inline-start
    --slide-split-aligninheritModify for example to center if you want to align the content in the middle
    --slide-split-text-aligninheritModify for example to center if you want to align the text in the middle
    --slide-split-title-displaynoneThe slot title is per default hidden even if you provide it. If you wish to displays it, modify this attribute
    --zIndex1The z-index of the slide
    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/slides/app-slide-split/app-slides-split.scss b/docs/src/app/pages/docs/slides/app-slide-split/app-slides-split.scss new file mode 100644 index 000000000..5f4275806 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-split/app-slides-split.scss @@ -0,0 +1 @@ +@import "../app-slides-container"; diff --git a/docs/src/app/pages/docs/slides/app-slide-title/app-slide-title.tsx b/docs/src/app/pages/docs/slides/app-slide-title/app-slide-title.tsx new file mode 100644 index 000000000..ff5296a30 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-title/app-slide-title.tsx @@ -0,0 +1,151 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-slide-title', + styleUrl: 'app-slides-title.scss' +}) +export class AppSlideTitle { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Slide: Title

    +

    The "Title" slide is a simple slide which display its title and content center in the middle of the page.

    +

    This slide could be for example use for the very first and last slide of your presentation.

    +

    Table of contents

    + +

    Layout

    +
    + + +

    My presentation title

    +

    + Hello World 🚀 +

    +
    +
    +
    + +

    Usage

    +

    The "Title" slide's Web Component could be integrated using the tag <deckgo-slide-title/>.

    + + <deckgo-deck>{'\n'} <deckgo-slide-title>{'\n'} <h1 slot="title">My presentation title</h1>{'\n'} <p slot="content">{'\n'} Hello World 🚀{'\n'} </p>{'\n'} </deckgo-slide-title>{'\n'}</deckgo-deck> +

    Slots

    +

    Both slots title and content are optional. Without providing one of them, the page will remain empty.

    +

    Notes

    +

    Optionally a slot notes could be use to add some notes regarding the particular slide. These will be automatically displayed in the remote control.

    + + <deckgo-deck>{'\n'} <deckgo-slide-title>{'\n'} <h1 slot="title">My presentation title</h1>{'\n'} <div slot="notes">A note regarding this particular slide</div>{'\n'}{'\n'}And another note on a new line about it too.{'\n'} </deckgo-slide-title>{'\n'}</deckgo-deck> +

    If you are using the DeckDeckGo starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute show.

    + + <deckgo-deck>{'\n'} <deckgo-slide-title>{'\n'} <h1 slot="title">My presentation title</h1>{'\n'} <div slot="notes" show>A note displayed in the presentation within a modal accessible for anyone</div>{'\n'} </deckgo-slide-title>{'\n'}</deckgo-deck> +

    Attributes

    +

    This component offers the following options which could be set using attributes:

    + + + + + + + + + + + + + + + + + + + + + +
    AttributeTypeDefaultDescription
    revealbooleanfalseHide the slotted elements li, p an img and display them when navigating using slideNext() or slidePrev() (see documention)
    reveal-show-firstbooleanfalseShow the first elements which would be hidden if reveal is set to true
    +

    Example

    + + <deckgo-deck>{'\n'} <deckgo-slide-title reveal="true" reveal-show-first="true">{'\n'} <h1 slot="title">My presentation title</h1>{'\n'} <ul slot="content">{'\n'} <li>Hello</li>{'\n'} <li>World</li>{'\n'} <li>🚀</li>{'\n'} </p>{'\n'} </deckgo-slide-title>{'\n'}</deckgo-deck> +

    Theming

    +

    The following theming options will affect this component if set on its host or parent.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --background
    --color
    --slide-padding-top16pxPadding top of the all slide
    --slide-padding-end32pxPadding right of the all slide
    --slide-padding-bottom16pxPadding bottom of the all slide
    --slide-padding-start32pxPadding left of the all slide
    --zIndex1The z-index of the slide
    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/slides/app-slide-title/app-slides-title.scss b/docs/src/app/pages/docs/slides/app-slide-title/app-slides-title.scss new file mode 100644 index 000000000..5f4275806 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-title/app-slides-title.scss @@ -0,0 +1 @@ +@import "../app-slides-container"; diff --git a/docs/src/app/pages/docs/slides/app-slide-youtube/app-slide-youtube.tsx b/docs/src/app/pages/docs/slides/app-slide-youtube/app-slide-youtube.tsx new file mode 100644 index 000000000..b04d85b2f --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-youtube/app-slide-youtube.tsx @@ -0,0 +1,165 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-slide-youtube', + styleUrl: 'app-slides-youtube.scss' +}) +export class AppSlideYoutube { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Slide: Youtube

    +

    The "Youtube" slide let you add easily a Youtube video to your presentation.

    +

    Table of contents

    + +

    Layout

    +
    + + +

    A 16/9 video

    +
    +
    +
    + +

    Usage

    +

    The "Youtube" slide's Web Component could be integrated using the tag <deckgo-slide-youtube/>.

    + + <deckgo-slide-youtube src="https://www.youtube.com/watch?v=oUOjJIfPIjw">{'\n'} <h1 slot="title">A 16/9 video</h1>{'\n'}</deckgo-slide-youtube> +

    Slots

    +

    The slot title is optional.

    +

    Notes

    +

    Optionally a slot notes could be use to add some notes regarding the particular slide. These will be automatically displayed in the remote control.

    +

    If you are using the DeckDeckGo starter kit and wish to make your notes accessible to anyone, you would need to mark them with an attribute show.

    +

    Youtube component

    +

    The slide "Youtube" relies on the component <deckgo-youtube/> which is described in the components documentation.

    +

    Attributes

    +

    This component offers the following options which could be set using attributes:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeTypeDefaultDescription
    srcstringThe source url, the Youtube url, of the video. Not embeddable url will be automatically converted to embeddable url supported by Youtube.
    widthnumberPer default the video width will be calculated according the content size available.Using this option you would be able to define your own width.
    heightnumberPer default the video height will be calculated according the content size available.Using this option you would be able to define your own height.
    +

    Theming

    +

    The following theming options will affect this component if set on its host or parent.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CSS4 variableDefaultNote
    --background
    --color
    --slide-padding-top16pxPadding top of the all slide
    --slide-padding-end32pxPadding right of the all slide
    --slide-padding-bottom16pxPadding bottom of the all slide
    --slide-padding-start32pxPadding left of the all slide
    --zIndex1The z-index of the slide
    +

    Methods

    +

    The slide "Youtube" offers extra methods to play and pause the Youtube video clip. These methods are notably used by the [DeckDecGo]'s remote control.

    +

    Play the video

    + + const slide = deck.getElementsByTagName('deckgo-slide-youtube');{'\n'}await slide.play(); +

    Pause the video

    + + const slide = deck.getElementsByTagName('deckgo-slide-youtube');{'\n'}await slide.pause(); +

    Toggle the video

    +

    Toggle will take care to pause or play the video according its current state.

    + + const slide = deck.getElementsByTagName('deckgo-slide-youtube');{'\n'}await slide.toggle(); +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/slides/app-slide-youtube/app-slides-youtube.scss b/docs/src/app/pages/docs/slides/app-slide-youtube/app-slides-youtube.scss new file mode 100644 index 000000000..5f4275806 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slide-youtube/app-slides-youtube.scss @@ -0,0 +1 @@ +@import "../app-slides-container"; diff --git a/docs/src/app/pages/docs/slides/app-slides-concept/app-slides-concept.scss b/docs/src/app/pages/docs/slides/app-slides-concept/app-slides-concept.scss new file mode 100644 index 000000000..5f4275806 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slides-concept/app-slides-concept.scss @@ -0,0 +1 @@ +@import "../app-slides-container"; diff --git a/docs/src/app/pages/docs/slides/app-slides-concept/app-slides-concept.tsx b/docs/src/app/pages/docs/slides/app-slides-concept/app-slides-concept.tsx new file mode 100644 index 000000000..19553a423 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slides-concept/app-slides-concept.tsx @@ -0,0 +1,175 @@ +import {Component, Element} from '@stencil/core'; + +import {DeckdeckgoDocsUtils} from '../../../../utils/deckdeckgo-docs-utils'; + +import {MenuService} from '../../../../services/menu/menu.service'; + +@Component({ + tag: 'app-slides-concept', + styleUrl: 'app-slides-concept.scss' +}) +export class AppSlidesConcept { + + @Element() el: HTMLElement; + + constructor(private menuService: MenuService) { + this.menuService = MenuService.getInstance(); + } + + async componentWillLoad() { + this.menuService.enable(); + } + + async componentDidLoad() { + await DeckdeckgoDocsUtils.reloadCode(this.el); + } + + render() { + return [ + , + + +

    Concept

    +

    DeckDeckGo is a deck of slides where each slide is based on a template which has its own layout and behaviour. Their content could be edited and structured using slots and other attributes.

    +

    The parent deck should be declared using the tag <deckgo-deck/> and each slide should be added as its children.

    + + <deckgo-deck>{'\n'} <deckgo-slide-title>{'\n'} <h1 slot="title">The first slide</h1>{'\n'} <p slot="content">{'\n'} Hello World 🚀{'\n'} </p>{'\n'} </deckgo-slide-title>{'\n'}{'\n'} <deckgo-slide-content>{'\n'} <h1 slot="title">The second slide</h1>{'\n'} </deckgo-slide-content>{'\n'}</deckgo-deck> +

    In the previous example, the presentation contains two slides. The first slide use the template deckgo-slide-title and the second slide use the template deckgo-slide-content.

    +

    Templates

    +

    DeckDeckGo provide the following templates:

    + +
    + + +

    slot="title"

    +

    + slot="content" +

    +
    +
    +
    + + +
    + + +

    slot="title"

    +

    + slot="content" +

    +
    +
    +
    + + +
    + + +

    slot="title"

    +

    + slot="start" +

    +

    + slot="end" +

    +
    +
    +
    + + +
    + + +

    slot="title"

    +

    slot="header"

    +

    slot="footer"

    +
    +
    +
    + + +
    + + +

    slot="title"

    +
    + +

    slot="title"

    +
    + +

    slot="title"

    +
    +
    +
    + + +
    + + +

    slot="title"

    +
    +
    +
    + + +
    + + +

    slot="title"

    +
    +
    +
    + + +
    + + +

    slot="title"

    +
    slot="author"
    +
    twitter
    +
    linkedin
    +
    +
    +
    + + +
    + + +

    slot="title"

    +

    slot="content"

    +
    +
    +
    + +

    Note

    +

    If you would miss or need further templates, don't hesitate to open an issue and/or submit a PR, it would be my pleasure to add more options.

    +
    + + +
    + ]; + } +} diff --git a/docs/src/app/pages/docs/slides/app-slides-container.scss b/docs/src/app/pages/docs/slides/app-slides-container.scss new file mode 100644 index 000000000..9204505b6 --- /dev/null +++ b/docs/src/app/pages/docs/slides/app-slides-container.scss @@ -0,0 +1,43 @@ +div.container { + width: 100%; + height: 200px; + position: relative; + overflow: hidden; + border: 1px solid; + + margin-left: 0; + margin-bottom: 48px; + + border-radius: 8px; + + deckgo-deck { + --font-size-h1: 18px; + + --slide-padding-top: 16px; + --slide-padding-end: 16px; + --slide-padding-bottom: 16px; + --slide-padding-start: 16px; + + --slide-split-padding-top: 16px; + --slide-split-padding-end: 16px; + --slide-split-padding-bottom: 16px; + --slide-split-padding-start: 16px; + + --slide-split-title-display: block; + --slide-split-title-padding-top: 4px; + --slide-split-title-padding-end: 16px; + --slide-split-title-padding-bottom: 4px; + --slide-split-title-padding-start: 16px; + + --slide-chart-margin-top: 4px; + --slide-chart-margin-start: 4px; + --slide-chart-margin-end: 4px; + --slide-chart-margin-bottom: 4px; + --deckgo-chart-text-display: none; + + --slide-author-padding-top: 4px; + --slide-author-padding-end: 4px; + --slide-author-padding-start: 4px; + --slide-author-padding-bottom: 4px; + } +} diff --git a/docs/src/app/services/menu/menu.service.tsx b/docs/src/app/services/menu/menu.service.tsx new file mode 100644 index 000000000..60463ec4a --- /dev/null +++ b/docs/src/app/services/menu/menu.service.tsx @@ -0,0 +1,36 @@ +import {BehaviorSubject, Observable} from 'rxjs'; + +export class MenuService { + + private static instance: MenuService; + + private enableSubject: BehaviorSubject = new BehaviorSubject(true); + + private constructor() { + // Private constructor, singleton + } + + static getInstance() { + if (!MenuService.instance) { + MenuService.instance = new MenuService(); + } + return MenuService.instance; + } + + watch(): Observable { + return this.enableSubject.asObservable(); + } + + isEnable(): boolean { + return this.enableSubject.getValue(); + } + + disable() { + this.enableSubject.next(false); + } + + enable() { + this.enableSubject.next(true); + } + +} diff --git a/docs/src/app/utils/deckdeckgo-docs-utils.tsx b/docs/src/app/utils/deckdeckgo-docs-utils.tsx new file mode 100644 index 000000000..edbc13001 --- /dev/null +++ b/docs/src/app/utils/deckdeckgo-docs-utils.tsx @@ -0,0 +1,63 @@ +export class DeckdeckgoDocsUtils { + + static reloadCode(el: HTMLElement): Promise { + return new Promise((resolve) => { + let elements: HTMLElement[] = this.getAllDeckgoHighlightCode(el); + + if (!elements || elements.length <= 0) { + resolve(); + } else { + elements.forEach(async (element: HTMLElement) => { + + if (element.hasOwnProperty('load')) { + await await (element as any).load(); + } + }); + + resolve(); + } + }); + } + + private static getAllDeckgoHighlightCode(el: HTMLElement): HTMLElement[] { + const allElements: NodeListOf = el.querySelectorAll('deckgo-highlight-code'); + + if (el.shadowRoot) { + const allShadowedElements: NodeListOf = el.shadowRoot.querySelectorAll('deckgo-highlight-code'); + return Array.from(allElements).concat(Array.from(allShadowedElements)); + } else { + return Array.from(allElements); + } + } + + static loadVideo(el: HTMLElement): Promise { + return new Promise((resolve) => { + let elements: HTMLElement[] = this.getAllDeckgoYoutube(el); + + if (!elements || elements.length <= 0) { + resolve(); + } else { + elements.forEach(async (element: HTMLElement) => { + + if (element.hasOwnProperty('lazyLoadContent')) { + await await (element as any).lazyLoadContent(); + } + }); + + resolve(); + } + }); + } + + private static getAllDeckgoYoutube(el: HTMLElement): HTMLElement[] { + const allElements: NodeListOf = el.querySelectorAll('deckgo-youtube'); + + if (el.shadowRoot) { + const allShadowedElements: NodeListOf = el.shadowRoot.querySelectorAll('deckgo-youtube'); + return Array.from(allElements).concat(Array.from(allShadowedElements)); + } else { + return Array.from(allElements); + } + } + +} diff --git a/docs/src/assets/favicon/android-chrome-192x192.png b/docs/src/assets/favicon/android-chrome-192x192.png new file mode 100644 index 000000000..979956f46 Binary files /dev/null and b/docs/src/assets/favicon/android-chrome-192x192.png differ diff --git a/docs/src/assets/favicon/android-chrome-512x512.png b/docs/src/assets/favicon/android-chrome-512x512.png new file mode 100644 index 000000000..ab9749071 Binary files /dev/null and b/docs/src/assets/favicon/android-chrome-512x512.png differ diff --git a/docs/src/assets/favicon/apple-touch-icon.png b/docs/src/assets/favicon/apple-touch-icon.png new file mode 100644 index 000000000..46a9cf5bf Binary files /dev/null and b/docs/src/assets/favicon/apple-touch-icon.png differ diff --git a/docs/src/assets/favicon/browserconfig.xml b/docs/src/assets/favicon/browserconfig.xml new file mode 100644 index 000000000..7738dd46d --- /dev/null +++ b/docs/src/assets/favicon/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #ffffff + + + diff --git a/docs/src/assets/favicon/favicon-16x16.png b/docs/src/assets/favicon/favicon-16x16.png new file mode 100644 index 000000000..855ea2ae3 Binary files /dev/null and b/docs/src/assets/favicon/favicon-16x16.png differ diff --git a/docs/src/assets/favicon/favicon-32x32.png b/docs/src/assets/favicon/favicon-32x32.png new file mode 100644 index 000000000..ae2a1b6ea Binary files /dev/null and b/docs/src/assets/favicon/favicon-32x32.png differ diff --git a/docs/src/assets/favicon/favicon.ico b/docs/src/assets/favicon/favicon.ico new file mode 100644 index 000000000..2d78efac2 Binary files /dev/null and b/docs/src/assets/favicon/favicon.ico differ diff --git a/docs/src/assets/favicon/mstile-150x150.png b/docs/src/assets/favicon/mstile-150x150.png new file mode 100644 index 000000000..660763d96 Binary files /dev/null and b/docs/src/assets/favicon/mstile-150x150.png differ diff --git a/docs/src/assets/favicon/safari-pinned-tab.svg b/docs/src/assets/favicon/safari-pinned-tab.svg new file mode 100644 index 000000000..e55ec3fe2 --- /dev/null +++ b/docs/src/assets/favicon/safari-pinned-tab.svg @@ -0,0 +1,40 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/docs/src/assets/img/deckdeckgo-logo-invert.svg b/docs/src/assets/img/deckdeckgo-logo-invert.svg new file mode 100644 index 000000000..ba372e2e7 --- /dev/null +++ b/docs/src/assets/img/deckdeckgo-logo-invert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/src/assets/img/deckdeckgo-logo.svg b/docs/src/assets/img/deckdeckgo-logo.svg new file mode 100644 index 000000000..ed38450e8 --- /dev/null +++ b/docs/src/assets/img/deckdeckgo-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/src/assets/img/deckdeckgo.png b/docs/src/assets/img/deckdeckgo.png new file mode 100644 index 000000000..c898a3414 Binary files /dev/null and b/docs/src/assets/img/deckdeckgo.png differ diff --git a/docs/src/assets/img/screenshots/remote-control/deckdeckgo-remote-control-interact.png b/docs/src/assets/img/screenshots/remote-control/deckdeckgo-remote-control-interact.png new file mode 100644 index 000000000..47a16aa71 Binary files /dev/null and b/docs/src/assets/img/screenshots/remote-control/deckdeckgo-remote-control-interact.png differ diff --git a/docs/src/assets/img/screenshots/remote-control/deckdeckgo-remote-control-timer.png b/docs/src/assets/img/screenshots/remote-control/deckdeckgo-remote-control-timer.png new file mode 100644 index 000000000..2b22110fb Binary files /dev/null and b/docs/src/assets/img/screenshots/remote-control/deckdeckgo-remote-control-timer.png differ diff --git a/docs/src/assets/splash/launch-1125x2436.png b/docs/src/assets/splash/launch-1125x2436.png new file mode 100644 index 000000000..405bc1598 Binary files /dev/null and b/docs/src/assets/splash/launch-1125x2436.png differ diff --git a/docs/src/assets/splash/launch-1242x2148.png b/docs/src/assets/splash/launch-1242x2148.png new file mode 100644 index 000000000..bb5b2499e Binary files /dev/null and b/docs/src/assets/splash/launch-1242x2148.png differ diff --git a/docs/src/assets/splash/launch-1536x2048.png b/docs/src/assets/splash/launch-1536x2048.png new file mode 100644 index 000000000..c0f053edc Binary files /dev/null and b/docs/src/assets/splash/launch-1536x2048.png differ diff --git a/docs/src/assets/splash/launch-1668x2224.png b/docs/src/assets/splash/launch-1668x2224.png new file mode 100644 index 000000000..3a8b96539 Binary files /dev/null and b/docs/src/assets/splash/launch-1668x2224.png differ diff --git a/docs/src/assets/splash/launch-2048x2732.png b/docs/src/assets/splash/launch-2048x2732.png new file mode 100644 index 000000000..778f64807 Binary files /dev/null and b/docs/src/assets/splash/launch-2048x2732.png differ diff --git a/docs/src/assets/splash/launch-640x1136.png b/docs/src/assets/splash/launch-640x1136.png new file mode 100644 index 000000000..b7dbfb2cd Binary files /dev/null and b/docs/src/assets/splash/launch-640x1136.png differ diff --git a/docs/src/assets/splash/launch-750x1294.png b/docs/src/assets/splash/launch-750x1294.png new file mode 100644 index 000000000..7bd29bda1 Binary files /dev/null and b/docs/src/assets/splash/launch-750x1294.png differ diff --git a/docs/src/components.d.ts b/docs/src/components.d.ts new file mode 100644 index 000000000..c8cc678f6 --- /dev/null +++ b/docs/src/components.d.ts @@ -0,0 +1,641 @@ +/* tslint:disable */ +/** + * This is an autogenerated file created by the Stencil compiler. + * It contains typing information for all components that exist in this project. + */ + + +import '@stencil/core'; + +import '@ionic/core'; +import 'ionicons'; +import 'deckdeckgo'; +import 'deckdeckgo-highlight-code'; +import 'deckdeckgo-charts'; +import 'deckdeckgo-qrcode'; + + +export namespace Components { + + interface AppRoot {} + interface AppRootAttributes extends StencilHTMLAttributes {} + + interface AppFooter { + 'start': boolean; + } + interface AppFooterAttributes extends StencilHTMLAttributes { + 'start'?: boolean; + } + + interface AppLogo {} + interface AppLogoAttributes extends StencilHTMLAttributes {} + + interface AppMenuFooter {} + interface AppMenuFooterAttributes extends StencilHTMLAttributes {} + + interface AppNavigation { + 'logo': boolean; + 'menuToggle': boolean; + 'navigation': boolean; + } + interface AppNavigationAttributes extends StencilHTMLAttributes { + 'logo'?: boolean; + 'menuToggle'?: boolean; + 'navigation'?: boolean; + } + + interface AppNavigationModal {} + interface AppNavigationModalAttributes extends StencilHTMLAttributes {} + + interface AppHome {} + interface AppHomeAttributes extends StencilHTMLAttributes {} + + interface AppComponentsCharts {} + interface AppComponentsChartsAttributes extends StencilHTMLAttributes {} + + interface AppComponentsGif {} + interface AppComponentsGifAttributes extends StencilHTMLAttributes {} + + interface AppComponentsHighlightCode {} + interface AppComponentsHighlightCodeAttributes extends StencilHTMLAttributes {} + + interface AppComponentsQrcode {} + interface AppComponentsQrcodeAttributes extends StencilHTMLAttributes {} + + interface AppComponentsSocial {} + interface AppComponentsSocialAttributes extends StencilHTMLAttributes {} + + interface AppComponentsYoutube {} + interface AppComponentsYoutubeAttributes extends StencilHTMLAttributes {} + + interface AppDeckActions {} + interface AppDeckActionsAttributes extends StencilHTMLAttributes {} + + interface AppDeckBackground {} + interface AppDeckBackgroundAttributes extends StencilHTMLAttributes {} + + interface AppDeckEvents {} + interface AppDeckEventsAttributes extends StencilHTMLAttributes {} + + interface AppDeckExtraFeatures {} + interface AppDeckExtraFeaturesAttributes extends StencilHTMLAttributes {} + + interface AppDeckNavigation {} + interface AppDeckNavigationAttributes extends StencilHTMLAttributes {} + + interface AppDeckPager {} + interface AppDeckPagerAttributes extends StencilHTMLAttributes {} + + interface AppDeckSize {} + interface AppDeckSizeAttributes extends StencilHTMLAttributes {} + + interface AppEditDefault {} + interface AppEditDefaultAttributes extends StencilHTMLAttributes {} + + interface AppEditFonts {} + interface AppEditFontsAttributes extends StencilHTMLAttributes {} + + interface AppEditLazyLoading {} + interface AppEditLazyLoadingAttributes extends StencilHTMLAttributes {} + + interface AppEditMarkdown {} + interface AppEditMarkdownAttributes extends StencilHTMLAttributes {} + + interface AppEditRtl {} + interface AppEditRtlAttributes extends StencilHTMLAttributes {} + + interface AppEditTheming {} + interface AppEditThemingAttributes extends StencilHTMLAttributes {} + + interface AppInstallation {} + interface AppInstallationAttributes extends StencilHTMLAttributes {} + + interface AppIntroduction {} + interface AppIntroductionAttributes extends StencilHTMLAttributes {} + + interface AppPublishing {} + interface AppPublishingAttributes extends StencilHTMLAttributes {} + + interface AppRemoteControl {} + interface AppRemoteControlAttributes extends StencilHTMLAttributes {} + + interface AppRunning {} + interface AppRunningAttributes extends StencilHTMLAttributes {} + + interface AppMiscBackstory {} + interface AppMiscBackstoryAttributes extends StencilHTMLAttributes {} + + interface AppMiscCollections {} + interface AppMiscCollectionsAttributes extends StencilHTMLAttributes {} + + interface AppMiscLogo {} + interface AppMiscLogoAttributes extends StencilHTMLAttributes {} + + interface AppMiscOpenSource {} + interface AppMiscOpenSourceAttributes extends StencilHTMLAttributes {} + + interface AppSlideAuthor {} + interface AppSlideAuthorAttributes extends StencilHTMLAttributes {} + + interface AppSlideChart {} + interface AppSlideChartAttributes extends StencilHTMLAttributes {} + + interface AppSlideCode {} + interface AppSlideCodeAttributes extends StencilHTMLAttributes {} + + interface AppSlideContent {} + interface AppSlideContentAttributes extends StencilHTMLAttributes {} + + interface AppSlideGif {} + interface AppSlideGifAttributes extends StencilHTMLAttributes {} + + interface AppSlideQrcode {} + interface AppSlideQrcodeAttributes extends StencilHTMLAttributes {} + + interface AppSlideSplit {} + interface AppSlideSplitAttributes extends StencilHTMLAttributes {} + + interface AppSlideTitle {} + interface AppSlideTitleAttributes extends StencilHTMLAttributes {} + + interface AppSlideYoutube {} + interface AppSlideYoutubeAttributes extends StencilHTMLAttributes {} + + interface AppSlidesConcept {} + interface AppSlidesConceptAttributes extends StencilHTMLAttributes {} +} + +declare global { + interface StencilElementInterfaces { + 'AppRoot': Components.AppRoot; + 'AppFooter': Components.AppFooter; + 'AppLogo': Components.AppLogo; + 'AppMenuFooter': Components.AppMenuFooter; + 'AppNavigation': Components.AppNavigation; + 'AppNavigationModal': Components.AppNavigationModal; + 'AppHome': Components.AppHome; + 'AppComponentsCharts': Components.AppComponentsCharts; + 'AppComponentsGif': Components.AppComponentsGif; + 'AppComponentsHighlightCode': Components.AppComponentsHighlightCode; + 'AppComponentsQrcode': Components.AppComponentsQrcode; + 'AppComponentsSocial': Components.AppComponentsSocial; + 'AppComponentsYoutube': Components.AppComponentsYoutube; + 'AppDeckActions': Components.AppDeckActions; + 'AppDeckBackground': Components.AppDeckBackground; + 'AppDeckEvents': Components.AppDeckEvents; + 'AppDeckExtraFeatures': Components.AppDeckExtraFeatures; + 'AppDeckNavigation': Components.AppDeckNavigation; + 'AppDeckPager': Components.AppDeckPager; + 'AppDeckSize': Components.AppDeckSize; + 'AppEditDefault': Components.AppEditDefault; + 'AppEditFonts': Components.AppEditFonts; + 'AppEditLazyLoading': Components.AppEditLazyLoading; + 'AppEditMarkdown': Components.AppEditMarkdown; + 'AppEditRtl': Components.AppEditRtl; + 'AppEditTheming': Components.AppEditTheming; + 'AppInstallation': Components.AppInstallation; + 'AppIntroduction': Components.AppIntroduction; + 'AppPublishing': Components.AppPublishing; + 'AppRemoteControl': Components.AppRemoteControl; + 'AppRunning': Components.AppRunning; + 'AppMiscBackstory': Components.AppMiscBackstory; + 'AppMiscCollections': Components.AppMiscCollections; + 'AppMiscLogo': Components.AppMiscLogo; + 'AppMiscOpenSource': Components.AppMiscOpenSource; + 'AppSlideAuthor': Components.AppSlideAuthor; + 'AppSlideChart': Components.AppSlideChart; + 'AppSlideCode': Components.AppSlideCode; + 'AppSlideContent': Components.AppSlideContent; + 'AppSlideGif': Components.AppSlideGif; + 'AppSlideQrcode': Components.AppSlideQrcode; + 'AppSlideSplit': Components.AppSlideSplit; + 'AppSlideTitle': Components.AppSlideTitle; + 'AppSlideYoutube': Components.AppSlideYoutube; + 'AppSlidesConcept': Components.AppSlidesConcept; + } + + interface StencilIntrinsicElements { + 'app-root': Components.AppRootAttributes; + 'app-footer': Components.AppFooterAttributes; + 'app-logo': Components.AppLogoAttributes; + 'app-menu-footer': Components.AppMenuFooterAttributes; + 'app-navigation': Components.AppNavigationAttributes; + 'app-navigation-modal': Components.AppNavigationModalAttributes; + 'app-home': Components.AppHomeAttributes; + 'app-components-charts': Components.AppComponentsChartsAttributes; + 'app-components-gif': Components.AppComponentsGifAttributes; + 'app-components-highlight-code': Components.AppComponentsHighlightCodeAttributes; + 'app-components-qrcode': Components.AppComponentsQrcodeAttributes; + 'app-components-social': Components.AppComponentsSocialAttributes; + 'app-components-youtube': Components.AppComponentsYoutubeAttributes; + 'app-deck-actions': Components.AppDeckActionsAttributes; + 'app-deck-background': Components.AppDeckBackgroundAttributes; + 'app-deck-events': Components.AppDeckEventsAttributes; + 'app-deck-extra-features': Components.AppDeckExtraFeaturesAttributes; + 'app-deck-navigation': Components.AppDeckNavigationAttributes; + 'app-deck-pager': Components.AppDeckPagerAttributes; + 'app-deck-size': Components.AppDeckSizeAttributes; + 'app-edit-default': Components.AppEditDefaultAttributes; + 'app-edit-fonts': Components.AppEditFontsAttributes; + 'app-edit-lazy-loading': Components.AppEditLazyLoadingAttributes; + 'app-edit-markdown': Components.AppEditMarkdownAttributes; + 'app-edit-rtl': Components.AppEditRtlAttributes; + 'app-edit-theming': Components.AppEditThemingAttributes; + 'app-installation': Components.AppInstallationAttributes; + 'app-introduction': Components.AppIntroductionAttributes; + 'app-publishing': Components.AppPublishingAttributes; + 'app-remote-control': Components.AppRemoteControlAttributes; + 'app-running': Components.AppRunningAttributes; + 'app-misc-backstory': Components.AppMiscBackstoryAttributes; + 'app-misc-collections': Components.AppMiscCollectionsAttributes; + 'app-misc-logo': Components.AppMiscLogoAttributes; + 'app-misc-open-source': Components.AppMiscOpenSourceAttributes; + 'app-slide-author': Components.AppSlideAuthorAttributes; + 'app-slide-chart': Components.AppSlideChartAttributes; + 'app-slide-code': Components.AppSlideCodeAttributes; + 'app-slide-content': Components.AppSlideContentAttributes; + 'app-slide-gif': Components.AppSlideGifAttributes; + 'app-slide-qrcode': Components.AppSlideQrcodeAttributes; + 'app-slide-split': Components.AppSlideSplitAttributes; + 'app-slide-title': Components.AppSlideTitleAttributes; + 'app-slide-youtube': Components.AppSlideYoutubeAttributes; + 'app-slides-concept': Components.AppSlidesConceptAttributes; + } + + + interface HTMLAppRootElement extends Components.AppRoot, HTMLStencilElement {} + var HTMLAppRootElement: { + prototype: HTMLAppRootElement; + new (): HTMLAppRootElement; + }; + + interface HTMLAppFooterElement extends Components.AppFooter, HTMLStencilElement {} + var HTMLAppFooterElement: { + prototype: HTMLAppFooterElement; + new (): HTMLAppFooterElement; + }; + + interface HTMLAppLogoElement extends Components.AppLogo, HTMLStencilElement {} + var HTMLAppLogoElement: { + prototype: HTMLAppLogoElement; + new (): HTMLAppLogoElement; + }; + + interface HTMLAppMenuFooterElement extends Components.AppMenuFooter, HTMLStencilElement {} + var HTMLAppMenuFooterElement: { + prototype: HTMLAppMenuFooterElement; + new (): HTMLAppMenuFooterElement; + }; + + interface HTMLAppNavigationElement extends Components.AppNavigation, HTMLStencilElement {} + var HTMLAppNavigationElement: { + prototype: HTMLAppNavigationElement; + new (): HTMLAppNavigationElement; + }; + + interface HTMLAppNavigationModalElement extends Components.AppNavigationModal, HTMLStencilElement {} + var HTMLAppNavigationModalElement: { + prototype: HTMLAppNavigationModalElement; + new (): HTMLAppNavigationModalElement; + }; + + interface HTMLAppHomeElement extends Components.AppHome, HTMLStencilElement {} + var HTMLAppHomeElement: { + prototype: HTMLAppHomeElement; + new (): HTMLAppHomeElement; + }; + + interface HTMLAppComponentsChartsElement extends Components.AppComponentsCharts, HTMLStencilElement {} + var HTMLAppComponentsChartsElement: { + prototype: HTMLAppComponentsChartsElement; + new (): HTMLAppComponentsChartsElement; + }; + + interface HTMLAppComponentsGifElement extends Components.AppComponentsGif, HTMLStencilElement {} + var HTMLAppComponentsGifElement: { + prototype: HTMLAppComponentsGifElement; + new (): HTMLAppComponentsGifElement; + }; + + interface HTMLAppComponentsHighlightCodeElement extends Components.AppComponentsHighlightCode, HTMLStencilElement {} + var HTMLAppComponentsHighlightCodeElement: { + prototype: HTMLAppComponentsHighlightCodeElement; + new (): HTMLAppComponentsHighlightCodeElement; + }; + + interface HTMLAppComponentsQrcodeElement extends Components.AppComponentsQrcode, HTMLStencilElement {} + var HTMLAppComponentsQrcodeElement: { + prototype: HTMLAppComponentsQrcodeElement; + new (): HTMLAppComponentsQrcodeElement; + }; + + interface HTMLAppComponentsSocialElement extends Components.AppComponentsSocial, HTMLStencilElement {} + var HTMLAppComponentsSocialElement: { + prototype: HTMLAppComponentsSocialElement; + new (): HTMLAppComponentsSocialElement; + }; + + interface HTMLAppComponentsYoutubeElement extends Components.AppComponentsYoutube, HTMLStencilElement {} + var HTMLAppComponentsYoutubeElement: { + prototype: HTMLAppComponentsYoutubeElement; + new (): HTMLAppComponentsYoutubeElement; + }; + + interface HTMLAppDeckActionsElement extends Components.AppDeckActions, HTMLStencilElement {} + var HTMLAppDeckActionsElement: { + prototype: HTMLAppDeckActionsElement; + new (): HTMLAppDeckActionsElement; + }; + + interface HTMLAppDeckBackgroundElement extends Components.AppDeckBackground, HTMLStencilElement {} + var HTMLAppDeckBackgroundElement: { + prototype: HTMLAppDeckBackgroundElement; + new (): HTMLAppDeckBackgroundElement; + }; + + interface HTMLAppDeckEventsElement extends Components.AppDeckEvents, HTMLStencilElement {} + var HTMLAppDeckEventsElement: { + prototype: HTMLAppDeckEventsElement; + new (): HTMLAppDeckEventsElement; + }; + + interface HTMLAppDeckExtraFeaturesElement extends Components.AppDeckExtraFeatures, HTMLStencilElement {} + var HTMLAppDeckExtraFeaturesElement: { + prototype: HTMLAppDeckExtraFeaturesElement; + new (): HTMLAppDeckExtraFeaturesElement; + }; + + interface HTMLAppDeckNavigationElement extends Components.AppDeckNavigation, HTMLStencilElement {} + var HTMLAppDeckNavigationElement: { + prototype: HTMLAppDeckNavigationElement; + new (): HTMLAppDeckNavigationElement; + }; + + interface HTMLAppDeckPagerElement extends Components.AppDeckPager, HTMLStencilElement {} + var HTMLAppDeckPagerElement: { + prototype: HTMLAppDeckPagerElement; + new (): HTMLAppDeckPagerElement; + }; + + interface HTMLAppDeckSizeElement extends Components.AppDeckSize, HTMLStencilElement {} + var HTMLAppDeckSizeElement: { + prototype: HTMLAppDeckSizeElement; + new (): HTMLAppDeckSizeElement; + }; + + interface HTMLAppEditDefaultElement extends Components.AppEditDefault, HTMLStencilElement {} + var HTMLAppEditDefaultElement: { + prototype: HTMLAppEditDefaultElement; + new (): HTMLAppEditDefaultElement; + }; + + interface HTMLAppEditFontsElement extends Components.AppEditFonts, HTMLStencilElement {} + var HTMLAppEditFontsElement: { + prototype: HTMLAppEditFontsElement; + new (): HTMLAppEditFontsElement; + }; + + interface HTMLAppEditLazyLoadingElement extends Components.AppEditLazyLoading, HTMLStencilElement {} + var HTMLAppEditLazyLoadingElement: { + prototype: HTMLAppEditLazyLoadingElement; + new (): HTMLAppEditLazyLoadingElement; + }; + + interface HTMLAppEditMarkdownElement extends Components.AppEditMarkdown, HTMLStencilElement {} + var HTMLAppEditMarkdownElement: { + prototype: HTMLAppEditMarkdownElement; + new (): HTMLAppEditMarkdownElement; + }; + + interface HTMLAppEditRtlElement extends Components.AppEditRtl, HTMLStencilElement {} + var HTMLAppEditRtlElement: { + prototype: HTMLAppEditRtlElement; + new (): HTMLAppEditRtlElement; + }; + + interface HTMLAppEditThemingElement extends Components.AppEditTheming, HTMLStencilElement {} + var HTMLAppEditThemingElement: { + prototype: HTMLAppEditThemingElement; + new (): HTMLAppEditThemingElement; + }; + + interface HTMLAppInstallationElement extends Components.AppInstallation, HTMLStencilElement {} + var HTMLAppInstallationElement: { + prototype: HTMLAppInstallationElement; + new (): HTMLAppInstallationElement; + }; + + interface HTMLAppIntroductionElement extends Components.AppIntroduction, HTMLStencilElement {} + var HTMLAppIntroductionElement: { + prototype: HTMLAppIntroductionElement; + new (): HTMLAppIntroductionElement; + }; + + interface HTMLAppPublishingElement extends Components.AppPublishing, HTMLStencilElement {} + var HTMLAppPublishingElement: { + prototype: HTMLAppPublishingElement; + new (): HTMLAppPublishingElement; + }; + + interface HTMLAppRemoteControlElement extends Components.AppRemoteControl, HTMLStencilElement {} + var HTMLAppRemoteControlElement: { + prototype: HTMLAppRemoteControlElement; + new (): HTMLAppRemoteControlElement; + }; + + interface HTMLAppRunningElement extends Components.AppRunning, HTMLStencilElement {} + var HTMLAppRunningElement: { + prototype: HTMLAppRunningElement; + new (): HTMLAppRunningElement; + }; + + interface HTMLAppMiscBackstoryElement extends Components.AppMiscBackstory, HTMLStencilElement {} + var HTMLAppMiscBackstoryElement: { + prototype: HTMLAppMiscBackstoryElement; + new (): HTMLAppMiscBackstoryElement; + }; + + interface HTMLAppMiscCollectionsElement extends Components.AppMiscCollections, HTMLStencilElement {} + var HTMLAppMiscCollectionsElement: { + prototype: HTMLAppMiscCollectionsElement; + new (): HTMLAppMiscCollectionsElement; + }; + + interface HTMLAppMiscLogoElement extends Components.AppMiscLogo, HTMLStencilElement {} + var HTMLAppMiscLogoElement: { + prototype: HTMLAppMiscLogoElement; + new (): HTMLAppMiscLogoElement; + }; + + interface HTMLAppMiscOpenSourceElement extends Components.AppMiscOpenSource, HTMLStencilElement {} + var HTMLAppMiscOpenSourceElement: { + prototype: HTMLAppMiscOpenSourceElement; + new (): HTMLAppMiscOpenSourceElement; + }; + + interface HTMLAppSlideAuthorElement extends Components.AppSlideAuthor, HTMLStencilElement {} + var HTMLAppSlideAuthorElement: { + prototype: HTMLAppSlideAuthorElement; + new (): HTMLAppSlideAuthorElement; + }; + + interface HTMLAppSlideChartElement extends Components.AppSlideChart, HTMLStencilElement {} + var HTMLAppSlideChartElement: { + prototype: HTMLAppSlideChartElement; + new (): HTMLAppSlideChartElement; + }; + + interface HTMLAppSlideCodeElement extends Components.AppSlideCode, HTMLStencilElement {} + var HTMLAppSlideCodeElement: { + prototype: HTMLAppSlideCodeElement; + new (): HTMLAppSlideCodeElement; + }; + + interface HTMLAppSlideContentElement extends Components.AppSlideContent, HTMLStencilElement {} + var HTMLAppSlideContentElement: { + prototype: HTMLAppSlideContentElement; + new (): HTMLAppSlideContentElement; + }; + + interface HTMLAppSlideGifElement extends Components.AppSlideGif, HTMLStencilElement {} + var HTMLAppSlideGifElement: { + prototype: HTMLAppSlideGifElement; + new (): HTMLAppSlideGifElement; + }; + + interface HTMLAppSlideQrcodeElement extends Components.AppSlideQrcode, HTMLStencilElement {} + var HTMLAppSlideQrcodeElement: { + prototype: HTMLAppSlideQrcodeElement; + new (): HTMLAppSlideQrcodeElement; + }; + + interface HTMLAppSlideSplitElement extends Components.AppSlideSplit, HTMLStencilElement {} + var HTMLAppSlideSplitElement: { + prototype: HTMLAppSlideSplitElement; + new (): HTMLAppSlideSplitElement; + }; + + interface HTMLAppSlideTitleElement extends Components.AppSlideTitle, HTMLStencilElement {} + var HTMLAppSlideTitleElement: { + prototype: HTMLAppSlideTitleElement; + new (): HTMLAppSlideTitleElement; + }; + + interface HTMLAppSlideYoutubeElement extends Components.AppSlideYoutube, HTMLStencilElement {} + var HTMLAppSlideYoutubeElement: { + prototype: HTMLAppSlideYoutubeElement; + new (): HTMLAppSlideYoutubeElement; + }; + + interface HTMLAppSlidesConceptElement extends Components.AppSlidesConcept, HTMLStencilElement {} + var HTMLAppSlidesConceptElement: { + prototype: HTMLAppSlidesConceptElement; + new (): HTMLAppSlidesConceptElement; + }; + + interface HTMLElementTagNameMap { + 'app-root': HTMLAppRootElement + 'app-footer': HTMLAppFooterElement + 'app-logo': HTMLAppLogoElement + 'app-menu-footer': HTMLAppMenuFooterElement + 'app-navigation': HTMLAppNavigationElement + 'app-navigation-modal': HTMLAppNavigationModalElement + 'app-home': HTMLAppHomeElement + 'app-components-charts': HTMLAppComponentsChartsElement + 'app-components-gif': HTMLAppComponentsGifElement + 'app-components-highlight-code': HTMLAppComponentsHighlightCodeElement + 'app-components-qrcode': HTMLAppComponentsQrcodeElement + 'app-components-social': HTMLAppComponentsSocialElement + 'app-components-youtube': HTMLAppComponentsYoutubeElement + 'app-deck-actions': HTMLAppDeckActionsElement + 'app-deck-background': HTMLAppDeckBackgroundElement + 'app-deck-events': HTMLAppDeckEventsElement + 'app-deck-extra-features': HTMLAppDeckExtraFeaturesElement + 'app-deck-navigation': HTMLAppDeckNavigationElement + 'app-deck-pager': HTMLAppDeckPagerElement + 'app-deck-size': HTMLAppDeckSizeElement + 'app-edit-default': HTMLAppEditDefaultElement + 'app-edit-fonts': HTMLAppEditFontsElement + 'app-edit-lazy-loading': HTMLAppEditLazyLoadingElement + 'app-edit-markdown': HTMLAppEditMarkdownElement + 'app-edit-rtl': HTMLAppEditRtlElement + 'app-edit-theming': HTMLAppEditThemingElement + 'app-installation': HTMLAppInstallationElement + 'app-introduction': HTMLAppIntroductionElement + 'app-publishing': HTMLAppPublishingElement + 'app-remote-control': HTMLAppRemoteControlElement + 'app-running': HTMLAppRunningElement + 'app-misc-backstory': HTMLAppMiscBackstoryElement + 'app-misc-collections': HTMLAppMiscCollectionsElement + 'app-misc-logo': HTMLAppMiscLogoElement + 'app-misc-open-source': HTMLAppMiscOpenSourceElement + 'app-slide-author': HTMLAppSlideAuthorElement + 'app-slide-chart': HTMLAppSlideChartElement + 'app-slide-code': HTMLAppSlideCodeElement + 'app-slide-content': HTMLAppSlideContentElement + 'app-slide-gif': HTMLAppSlideGifElement + 'app-slide-qrcode': HTMLAppSlideQrcodeElement + 'app-slide-split': HTMLAppSlideSplitElement + 'app-slide-title': HTMLAppSlideTitleElement + 'app-slide-youtube': HTMLAppSlideYoutubeElement + 'app-slides-concept': HTMLAppSlidesConceptElement + } + + interface ElementTagNameMap { + 'app-root': HTMLAppRootElement; + 'app-footer': HTMLAppFooterElement; + 'app-logo': HTMLAppLogoElement; + 'app-menu-footer': HTMLAppMenuFooterElement; + 'app-navigation': HTMLAppNavigationElement; + 'app-navigation-modal': HTMLAppNavigationModalElement; + 'app-home': HTMLAppHomeElement; + 'app-components-charts': HTMLAppComponentsChartsElement; + 'app-components-gif': HTMLAppComponentsGifElement; + 'app-components-highlight-code': HTMLAppComponentsHighlightCodeElement; + 'app-components-qrcode': HTMLAppComponentsQrcodeElement; + 'app-components-social': HTMLAppComponentsSocialElement; + 'app-components-youtube': HTMLAppComponentsYoutubeElement; + 'app-deck-actions': HTMLAppDeckActionsElement; + 'app-deck-background': HTMLAppDeckBackgroundElement; + 'app-deck-events': HTMLAppDeckEventsElement; + 'app-deck-extra-features': HTMLAppDeckExtraFeaturesElement; + 'app-deck-navigation': HTMLAppDeckNavigationElement; + 'app-deck-pager': HTMLAppDeckPagerElement; + 'app-deck-size': HTMLAppDeckSizeElement; + 'app-edit-default': HTMLAppEditDefaultElement; + 'app-edit-fonts': HTMLAppEditFontsElement; + 'app-edit-lazy-loading': HTMLAppEditLazyLoadingElement; + 'app-edit-markdown': HTMLAppEditMarkdownElement; + 'app-edit-rtl': HTMLAppEditRtlElement; + 'app-edit-theming': HTMLAppEditThemingElement; + 'app-installation': HTMLAppInstallationElement; + 'app-introduction': HTMLAppIntroductionElement; + 'app-publishing': HTMLAppPublishingElement; + 'app-remote-control': HTMLAppRemoteControlElement; + 'app-running': HTMLAppRunningElement; + 'app-misc-backstory': HTMLAppMiscBackstoryElement; + 'app-misc-collections': HTMLAppMiscCollectionsElement; + 'app-misc-logo': HTMLAppMiscLogoElement; + 'app-misc-open-source': HTMLAppMiscOpenSourceElement; + 'app-slide-author': HTMLAppSlideAuthorElement; + 'app-slide-chart': HTMLAppSlideChartElement; + 'app-slide-code': HTMLAppSlideCodeElement; + 'app-slide-content': HTMLAppSlideContentElement; + 'app-slide-gif': HTMLAppSlideGifElement; + 'app-slide-qrcode': HTMLAppSlideQrcodeElement; + 'app-slide-split': HTMLAppSlideSplitElement; + 'app-slide-title': HTMLAppSlideTitleElement; + 'app-slide-youtube': HTMLAppSlideYoutubeElement; + 'app-slides-concept': HTMLAppSlidesConceptElement; + } + + + export namespace JSX { + export interface Element {} + export interface IntrinsicElements extends StencilIntrinsicElements { + [tagName: string]: any; + } + } + export interface HTMLAttributes extends StencilHTMLAttributes {} + +} diff --git a/docs/src/global/app.scss b/docs/src/global/app.scss new file mode 100644 index 000000000..f31a8809c --- /dev/null +++ b/docs/src/global/app.scss @@ -0,0 +1,39 @@ +/* Document Level Styles */ + +/* + The imports below are needed to include our light dom css for global styles such as fonts and colors. + You can comment out any of these imports if you do not need that css. For example, if you have your own + global font family css then you can comment out the typography.css import. +*/ + +/** Core CSS required for ionic components to work property */ +@import "~@ionic/core/css/core.css"; + +/** Basic CSS for apps built with Ionic */ +@import "~@ionic/core/css/normalize.css"; +@import "~@ionic/core/css/structure.css"; +@import "~@ionic/core/css/typography.css"; + +/** Optional CSS utils that can be commented out */ +@import "~@ionic/core/css/padding.css"; +@import "~@ionic/core/css/float-elements.css"; +@import "~@ionic/core/css/text-alignment.css"; +@import "~@ionic/core/css/text-transformation.css"; +@import "~@ionic/core/css/flex-utils.css"; + +/* + The CSS Variables below can be used to theme your app. + For more info on CSS variables check out: + https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables + + More info about color theming using Ionic: + https://beta.ionicframework.com/docs/theming/color-generator +*/ + +@import "theme/variables"; +@import "theme/fonts"; +@import "theme/theme"; +@import "theme/toolbar"; +@import "theme/menu"; +@import "theme/code"; +@import "theme/table"; diff --git a/docs/src/global/app.ts b/docs/src/global/app.ts new file mode 100644 index 000000000..6587f5c34 --- /dev/null +++ b/docs/src/global/app.ts @@ -0,0 +1,6 @@ +import '@ionic/core'; + +import 'deckdeckgo'; +import 'deckdeckgo-highlight-code'; +import 'deckdeckgo-charts'; +import 'deckdeckgo-qrcode'; diff --git a/docs/src/global/theme/code.scss b/docs/src/global/theme/code.scss new file mode 100644 index 000000000..387fcd62d --- /dev/null +++ b/docs/src/global/theme/code.scss @@ -0,0 +1,34 @@ +deckgo-highlight-code { + font-size: var(--font-size-normal); + + --deckgo-highlight-code-margin: 32px 0 32px; + + --deckgo-highlight-code-margin-bottom: 0; + --deckgo-highlight-code-padding: 16px; + --deckgo-highlight-code-border-radius: 8px; + --deckgo-highlight-code-background: var(--ion-color-light); + --deckgo-highlight-code-color: inherit; +} + +deckgo-highlight-code, deckgo-deck { + --deckgo-highlight-code-token-atrule: var(--ion-color-dark); + --deckgo-highlight-code-token-function: var(--ion-color-primary); + --deckgo-highlight-code-token-selector: var(--ion-color-primary); + --deckgo-highlight-code-token-property: var(--ion-color-primary); +} + +@media screen and (max-width: 720px) { + deckgo-highlight-code { + font-size: var(--font-size-small); + } +} + +@media (prefers-color-scheme: dark) { + deckgo-highlight-code { + --deckgo-highlight-code-background: var(--ion-color-dark); + } + + deckgo-highlight-code, deckgo-deck { + --deckgo-highlight-code-token-atrule: var(--ion-color-light); + } +} diff --git a/docs/src/global/theme/fonts.scss b/docs/src/global/theme/fonts.scss new file mode 100644 index 000000000..475a100de --- /dev/null +++ b/docs/src/global/theme/fonts.scss @@ -0,0 +1,93 @@ +:root { + --ion-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + + --font-size-very-small: 10px; + --font-size-small: 12px; + --font-size-normal: 15px; + + --font-size-h1: 28px; + --font-size-h2: 20px; + --font-size-h3: 17px; +} + +* { + // Fonts + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + --ion-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; +} + +h1, +h1 a { + font-size: var(--font-size-h1); + font-weight: bold; +} + +h2, +h2 a { + font-size: var(--font-size-h2); + font-weight: bold; +} + +h3 , +h3 a { + font-size: var(--font-size-h3); + font-weight: bold; +} + +h4, +h4 a { + font-size: var(--font-size-normal); + margin-top: 48px; + margin-bottom: 8px; + letter-spacing: 0.04em; +} + +p, +ul, +ol { + font-size: var(--font-size-normal); + line-height: 1.8; + margin: 14px 0px; +} + +ul, +ol { + padding: 0 0 0 16px; +} + +p a, +ul a, +ol a, +td a { + transition: border 0.3s; + text-decoration: none; + border-bottom: 1px solid transparent; + font-weight: 500; +} + +p a:hover, +ul a:hover, +ol a:hover, +td a:hover { + border-bottom-color: var(--ion-color-primary); +} + +blockquote { + background: var(--ion-color-tertiary); + margin: 32px 0; + padding: 1px 18px 4px; + border-radius: 4px; +} + +blockquote p { + color: white; + line-height: 1.6; + font-size: 14px; +} + +blockquote a { + color: var(--ion-color-secondary); +} + diff --git a/docs/src/global/theme/menu.scss b/docs/src/global/theme/menu.scss new file mode 100644 index 000000000..25b76439a --- /dev/null +++ b/docs/src/global/theme/menu.scss @@ -0,0 +1,137 @@ +ion-split-pane { + + &:not(.split-pane-visible) { + ion-menu { + --background: var(--ion-color-primary); + --ion-background-color: var(--ion-color-primary); + + --deckgo-logo-url: url('/assets/img/deckdeckgo-logo-invert.svg'); + + ion-item-divider { + background: var(--ion-color-primary); + } + + ion-header { + ion-toolbar { + --color: white; + --border-color: transparent; + } + } + + ion-content { + ion-list { + ion-item-divider { + --color: white; + font-weight: bold; + } + + ion-item { + --color: white; + + --background-activated: var(--ion-color-primary); + } + } + + app-menu-footer { + --deckgo-menu-footer-color: white; + } + } + } + } + + &.split-pane-visible { + ion-menu { + ion-content { + --padding-top: 40px; + + @media screen and (min-width: 1200px) { + --padding-start: 32px; + } + + app-menu-footer { + --deckgo-menu-footer-color: var(--ion-color-medium); + } + } + } + + ion-content { + --padding-top: 40px; + } + } + + &.split-pane-md.split-pane-visible { + > ion-menu.split-pane-side { + max-width: 18%; + } + } + + ion-menu { + --border: 0px; + + ion-content { + ion-list { + ion-item-divider { + border: 0; + --color: var(--ion-color-dark); + font-size: var(--font-size-small); + font-weight: bold; + + &:not(:first-of-type) { + margin-top: 8px; + } + } + + ion-item { + --border-color: transparent; + --color: var(--ion-color-medium); + --padding-start: 32px; + --min-height: inherit; + font-size: var(--font-size-small); + height: inherit; + + ion-label { + margin-top: 6px; + margin-bottom: 6px; + } + } + } + } + } + + ion-header { + ion-title { + --deckgo-logo-vertical-align: bottom; + --deckgo-logo-margin-end: 6px; + --deckgo-logo-size: 20px + } + } +} + +@media (prefers-color-scheme: dark) { + ion-split-pane { + &.split-pane-visible { + ion-menu { + ion-content { + app-menu-footer { + --deckgo-menu-footer-color: var(--ion-color-light); + } + } + } + } + + ion-menu { + + ion-content { + ion-list { + ion-item-divider { + --color: var(--ion-color-light); + } + + ion-item { + --color: var(--ion-color-light); + } + } + } + } + } +} diff --git a/docs/src/global/theme/table.scss b/docs/src/global/theme/table.scss new file mode 100644 index 000000000..c93ee97a2 --- /dev/null +++ b/docs/src/global/theme/table.scss @@ -0,0 +1,43 @@ +table { + border-collapse: collapse; + border-spacing: 0; + + width: 100%; + + th, td { + border: 1px solid transparent; + padding: 8px; + transition: all 0.3s; + + font-size: var(--font-size-small); + } + + th { + background: var(--ion-color-tertiary); + color: white; + font-weight: normal; + text-align: left; + } + + tr:nth-child(even) td { + background: var(--ion-color-light); + } + + tr td:hover { + background: var(--ion-color-secondary); + color: white; + } +} + +@media (prefers-color-scheme: dark) { + table { + tr:nth-child(even) td { + background: var(--ion-color-dark); + } + + tr td:hover { + background: var(--ion-color-secondary); + color: white; + } + } +} diff --git a/docs/src/global/theme/theme.scss b/docs/src/global/theme/theme.scss new file mode 100644 index 000000000..72d4ec7fa --- /dev/null +++ b/docs/src/global/theme/theme.scss @@ -0,0 +1,31 @@ +ul { + list-style-type: none; + margin: 0; + padding: 0; +} + +main { + max-width: calc(1200px - 28% - 64px); + margin-left: auto; + margin-right: auto; + + h1:not(:first-of-type) { + margin-top: 48px; + } + + h2, h3 { + margin-top: 32px; + } + + ul { + font-size: var(--font-size-small); + li { + padding-left: 8px; + font-size: var(--font-size-small); + } + } +} + +a { + text-decoration: none; +} diff --git a/docs/src/global/theme/toolbar.scss b/docs/src/global/theme/toolbar.scss new file mode 100644 index 000000000..261ecd4d7 --- /dev/null +++ b/docs/src/global/theme/toolbar.scss @@ -0,0 +1,9 @@ +ion-header { + ion-toolbar { + --ion-toolbar-background: transparent; + } + + &[class*="header"]::after { + background-image: none; + } +} diff --git a/docs/src/global/theme/variables.scss b/docs/src/global/theme/variables.scss new file mode 100644 index 000000000..ad183d372 --- /dev/null +++ b/docs/src/global/theme/variables.scss @@ -0,0 +1,84 @@ +:root { + --ion-color-primary: #3880ff; + --ion-color-primary-rgb: 56,128,255; + --ion-color-primary-contrast: #ffffff; + --ion-color-primary-contrast-rgb: 255,255,255; + --ion-color-primary-shade: #3171e0; + --ion-color-primary-tint: #4c8dff; + + --ion-color-secondary: #0cd1e8; + --ion-color-secondary-rgb: 12,209,232; + --ion-color-secondary-contrast: #ffffff; + --ion-color-secondary-contrast-rgb: 255,255,255; + --ion-color-secondary-shade: #0bb8cc; + --ion-color-secondary-tint: #24d6ea; + + --ion-color-tertiary: #7044ff; + --ion-color-tertiary-rgb: 112,68,255; + --ion-color-tertiary-contrast: #ffffff; + --ion-color-tertiary-contrast-rgb: 255,255,255; + --ion-color-tertiary-shade: #633ce0; + --ion-color-tertiary-tint: #7e57ff; + + --ion-color-success: #10dc60; + --ion-color-success-rgb: 16,220,96; + --ion-color-success-contrast: #ffffff; + --ion-color-success-contrast-rgb: 255,255,255; + --ion-color-success-shade: #0ec254; + --ion-color-success-tint: #28e070; + + --ion-color-warning: #ffce00; + --ion-color-warning-rgb: 255,206,0; + --ion-color-warning-contrast: #ffffff; + --ion-color-warning-contrast-rgb: 255,255,255; + --ion-color-warning-shade: #e0b500; + --ion-color-warning-tint: #ffd31a; + + --ion-color-danger: #f04141; + --ion-color-danger-rgb: 245,61,61; + --ion-color-danger-contrast: #ffffff; + --ion-color-danger-contrast-rgb: 255,255,255; + --ion-color-danger-shade: #d33939; + --ion-color-danger-tint: #f25454; + + --ion-color-dark: #222428; + --ion-color-dark-rgb: 34,34,34; + --ion-color-dark-contrast: #ffffff; + --ion-color-dark-contrast-rgb: 255,255,255; + --ion-color-dark-shade: #1e2023; + --ion-color-dark-tint: #383a3e; + + --ion-color-medium: #6E6D6F; + --ion-color-medium-rgb: 110, 109, 111; + --ion-color-medium-contrast: #ffffff; + --ion-color-medium-contrast-rgb: 255, 255, 255; + --ion-color-medium-shade: #616062; + --ion-color-medium-tint: #7d7c7d; + + --ion-color-light: #f4f5f8; + --ion-color-light-rgb: 244,244,244; + --ion-color-light-contrast: #000000; + --ion-color-light-contrast-rgb: 0,0,0; + --ion-color-light-shade: #d7d8da; + --ion-color-light-tint: #f5f6f9; +} + +@media (prefers-color-scheme: dark) { + :root { + --ion-background-color: #323639; + + --ion-text-color: #ffffff; + + --ion-border-color: #202124; + + --ion-tab-bar-background: #202124; + --ion-tab-bar-color-activated: #ffffff; + + --ion-color-medium: #6E6D6F; + --ion-color-medium-rgb: 110, 109, 111; + --ion-color-medium-contrast: #ffffff; + --ion-color-medium-contrast-rgb: 255,255,255; + --ion-color-medium-shade: #616062; + --ion-color-medium-tint: #7d7c7d; + } +} diff --git a/docs/src/helpers/utils.ts b/docs/src/helpers/utils.ts new file mode 100644 index 000000000..ef899dd92 --- /dev/null +++ b/docs/src/helpers/utils.ts @@ -0,0 +1,5 @@ + + +export function sayHello() { + return Math.random() < 0.5 ? 'Hello' : 'Hola'; +} diff --git a/docs/src/index.html b/docs/src/index.html new file mode 100644 index 000000000..679551245 --- /dev/null +++ b/docs/src/index.html @@ -0,0 +1,70 @@ + + + + + + DeckDeckGo | Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/interfaces.d.ts b/docs/src/interfaces.d.ts new file mode 100644 index 000000000..e69de29bb diff --git a/docs/src/manifest.json b/docs/src/manifest.json new file mode 100644 index 000000000..3a72aa84f --- /dev/null +++ b/docs/src/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "DeckDeckGo", + "short_name": "DeckDeckGo", + "display": "standalone", + "theme_color": "#ffffff", + "background_color": "#ffffff", + "scope": "/", + "start_url": "/", + "icons": [ + { + "src": "/assets/favicon/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/assets/favicon/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} diff --git a/docs/src/robots.txt b/docs/src/robots.txt new file mode 100644 index 000000000..3969cb159 --- /dev/null +++ b/docs/src/robots.txt @@ -0,0 +1,4 @@ +# robotstxt.org/ + +User-agent: * +Disallow: diff --git a/docs/stencil.config.ts b/docs/stencil.config.ts new file mode 100644 index 000000000..4842d6c00 --- /dev/null +++ b/docs/stencil.config.ts @@ -0,0 +1,26 @@ +import {Config} from '@stencil/core'; + +import {sass} from '@stencil/sass'; +import {postcss} from '@stencil/postcss'; +import autoprefixer from 'autoprefixer'; + +export const config: Config = { + outputTargets: [{ + type: 'www' + }], + globalScript: 'src/global/app.ts', + globalStyle: 'src/global/app.scss', + plugins: [ + sass(), + postcss({ + plugins: [autoprefixer()] + }) + ], + nodeResolve: {browser: true}, + devServer: { + openBrowser: false + }, + copy: [ + {src: 'robots.txt'} + ] +}; diff --git a/docs/tsconfig.json b/docs/tsconfig.json new file mode 100644 index 000000000..09367cee5 --- /dev/null +++ b/docs/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "allowUnreachableCode": false, + "declaration": false, + "experimentalDecorators": true, + "lib": [ + "dom", + "es2017" + ], + "moduleResolution": "node", + "module": "esnext", + "target": "es2017", + "noUnusedLocals": true, + "noUnusedParameters": true, + "jsx": "react", + "jsxFactory": "h" + }, + "include": [ + "src" + ], + "exclude": [ + "node_modules" + ] +}