├── docs
├── .nojekyll
├── _sidebar.md
├── components
│ ├── Tutorial.md
│ ├── TutorialSection.md
│ ├── TutorialStep.md
│ └── TutorialHighlighter.md
├── index.html
└── README.md
├── vue.config.js
├── babel.config.js
├── vuese.config.js
├── src
├── style
│ ├── vue-tut-anim.scss
│ ├── vue-tut-section.scss
│ ├── reset.scss
│ ├── vue-tut.scss
│ ├── code-theme
│ │ └── vue.css
│ ├── prism-editor.scss
│ ├── vue-tut-step.scss
│ ├── vue-tut-mobile.scss
│ ├── vue-tut-highlighter.scss
│ └── utilities.scss
├── packages
│ ├── TutorialAside
│ │ ├── TutorialAside.vue
│ │ └── index.js
│ ├── Tutorial
│ │ ├── index.js
│ │ └── Tutorial.vue
│ ├── TutorialStep
│ │ ├── index.js
│ │ └── TutorialStep.vue
│ ├── TutorialSection
│ │ ├── index.js
│ │ └── TutorialSection.vue
│ └── TutorialHighlighter
│ │ ├── index.js
│ │ └── TutorialHighlighter.vue
└── index.js
├── dist
├── themes
│ ├── azure.css.map
│ ├── vue.css.map
│ ├── azure.css
│ └── vue.css
├── code-themes
│ ├── vue.css
│ ├── tomorrow.css
│ ├── dracula.css
│ ├── okaidia.css
│ ├── nord.css
│ ├── hopscotch.css
│ ├── atom-dark.css
│ ├── dark.css
│ ├── ghcolors.css
│ ├── prism.css
│ ├── funky.css
│ ├── synthwave84.css
│ ├── a11y-dark.css
│ ├── solarizedlight.css
│ ├── darcula.css
│ ├── material-dark.css
│ ├── material-light.css
│ ├── material-oceanic.css
│ ├── vs.css
│ ├── cb.css
│ ├── xonokai.css
│ ├── base16-ateliersulphurpool.light.css
│ ├── duotone-light.css
│ ├── duotone-dark.css
│ ├── duotone-earth.css
│ ├── duotone-space.css
│ ├── duotone-forest.css
│ ├── duotone-sea.css
│ ├── vsc-dark-plus.css
│ ├── shades-of-purple.css
│ ├── pojoaque.css
│ ├── twilight.css
│ └── coy.css
└── vue-tut.esm.css
├── markdown
├── Tutorial.md
├── TutorialHighlighter.md
├── TutorialSection.md
└── TutorialStep.md
├── .gitignore
├── scripts
├── buildDocs.sh
└── buildThemes.sh
├── themes
├── azure.scss
└── vue.scss
├── .eslintrc.js
├── package.json
└── README.md
/docs/.nojekyll:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | lintOnSave: false
3 | };
4 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/cli-plugin-babel/preset'
4 | ],
5 | plugins: ['wildcard']
6 | };
7 |
--------------------------------------------------------------------------------
/vuese.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | outDir: 'docs',
3 | genType: 'markdown',
4 | exclude: ['**/TutorialAside.vue']
5 | };
6 |
--------------------------------------------------------------------------------
/docs/_sidebar.md:
--------------------------------------------------------------------------------
1 | * [Tutorial](/components/Tutorial.md)
2 | * [TutorialSection](/components/TutorialSection.md)
3 | * [TutorialStep](/components/TutorialStep.md)
4 | * [TutorialHighlighter](/components/TutorialHighlighter.md)
5 |
6 |
--------------------------------------------------------------------------------
/src/style/vue-tut-anim.scss:
--------------------------------------------------------------------------------
1 | .vue-tut {
2 | .fade-enter-active {
3 | transition: opacity .75s;
4 | }
5 |
6 | .fade-leave-active {
7 | transition: opacity .75s;
8 | }
9 |
10 | .fade-enter, .fade-leave-to {
11 | opacity: 0;
12 | }
13 | }
--------------------------------------------------------------------------------
/dist/themes/azure.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sourceRoot":"","sources":["../../themes/azure.scss"],"names":[],"mappings":"AACE;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAIJ;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA","file":"azure.css"}
--------------------------------------------------------------------------------
/markdown/Tutorial.md:
--------------------------------------------------------------------------------
1 | # Tutorial
2 |
3 | ```
4 | ...
5 | ```
6 |
7 | The tutorial component is the main component for VueTut.
8 | It represents a single tutorial made up of sections.
9 | The following slots are available to customize the overall tutorial.
10 |
--------------------------------------------------------------------------------
/dist/themes/vue.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sourceRoot":"","sources":["../../themes/vue.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE","file":"vue.css"}
--------------------------------------------------------------------------------
/src/packages/TutorialAside/TutorialAside.vue:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 |
4 | # local env files
5 | .env.local
6 | .env.*.local
7 |
8 | # Log files
9 | npm-debug.log*
10 | yarn-debug.log*
11 | yarn-error.log*
12 | pnpm-debug.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw?
22 |
--------------------------------------------------------------------------------
/src/style/vue-tut-section.scss:
--------------------------------------------------------------------------------
1 | .vue-tut {
2 | .tutorial-section {
3 | margin: 50px;
4 |
5 | header {
6 | p {
7 | font-size: 16px;
8 | line-height: 1.4;
9 | }
10 |
11 | h1 {
12 | font-size: 20px;
13 | }
14 |
15 | h2 {
16 | font-size: 26px;
17 | }
18 | }
19 |
20 | &:last-child {
21 | margin-bottom: 0;
22 | }
23 | }
24 | }
--------------------------------------------------------------------------------
/markdown/TutorialHighlighter.md:
--------------------------------------------------------------------------------
1 | # TutorialHighlighter
2 |
3 | ```
4 |
5 |
6 |
7 | ...
8 |
13 |
14 |
15 |
16 | ```
17 |
18 | Highlight lines of text with line numbers or regexes.
19 |
--------------------------------------------------------------------------------
/src/style/reset.scss:
--------------------------------------------------------------------------------
1 | .vue-tut {
2 | font-family: sans-serif;
3 | min-height: 100%;
4 |
5 | h1, h2, h3, h4, h5, h6, p {
6 | margin: 0;
7 | padding: 0;
8 | line-height: 1.15;
9 | }
10 |
11 | hr {
12 | height: 0;
13 | border: 0;
14 | border-bottom: 1px solid #e8e8e8;
15 | }
16 |
17 | * {
18 | box-sizing: border-box;
19 | }
20 |
21 | *:before,
22 | *:after {
23 | box-sizing: border-box;
24 | }
25 | }
--------------------------------------------------------------------------------
/markdown/TutorialSection.md:
--------------------------------------------------------------------------------
1 | # TutorialSection
2 |
3 | ```
4 |
5 | ...
6 |
7 | ```
8 |
9 | The tutorial-section component is a way to group a tutorial into sections - like chapters in a book.
10 |
11 | A tutorial needs at least one section, but you should try to have multiple to make the tutorial easier to consume for readers.
12 |
13 | The following slots are available to customize a section.
14 |
--------------------------------------------------------------------------------
/scripts/buildDocs.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | cp README.md docs/
4 |
5 | npm run docs:vuese
6 |
7 | for name in docs/components/*
8 | do
9 | tail -n +3 "$name" > "$name.tmp" && mv "$name.tmp" "$name"
10 | done
11 |
12 | for value in Tutorial TutorialSection TutorialStep TutorialHighlighter
13 | do
14 | cat markdown/$value.md docs/components/$value.md > docs/components/$value.md.tmp
15 | mv docs/components/$value.md.tmp docs/components/$value.md
16 | done
17 |
18 |
19 |
--------------------------------------------------------------------------------
/scripts/buildThemes.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | sass themes/vue.scss dist/themes/vue.css
4 | sass themes/azure.scss dist/themes/azure.css
5 | mkdir -p dist/code-themes
6 | cp src/style/code-theme/vue.css dist/code-themes
7 | cp node_modules/prismjs/themes/*.css dist/code-themes
8 | cp node_modules/prism-themes/themes/prism-*.css dist/code-themes/
9 |
10 | cd dist/code-themes
11 |
12 | for name in prism-*
13 | do
14 | newname="$(echo "$name" | cut -c7-)"
15 | mv "$name" "$newname"
16 | done
17 |
18 | cd ../..
19 |
20 |
--------------------------------------------------------------------------------
/src/packages/Tutorial/index.js:
--------------------------------------------------------------------------------
1 | import component from './Tutorial.vue';
2 |
3 | export function install(Vue) {
4 | if (install.installed) return;
5 | install.installed = true;
6 | Vue.component('Tutorial', component);
7 | }
8 |
9 | const plugin = {
10 | install
11 | };
12 |
13 | let GlobalVue = null;
14 | if (typeof window !== 'undefined') {
15 | GlobalVue = window.Vue;
16 | } else if (typeof global !== 'undefined') {
17 | GlobalVue = global.Vue;
18 | }
19 | if (GlobalVue) {
20 | GlobalVue.use(plugin);
21 | }
22 |
23 | export default component;
24 |
--------------------------------------------------------------------------------
/src/packages/TutorialStep/index.js:
--------------------------------------------------------------------------------
1 | import component from './TutorialStep.vue';
2 |
3 | export function install(Vue) {
4 | if (install.installed) return;
5 | install.installed = true;
6 | Vue.component('TutorialStep', component);
7 | }
8 |
9 | const plugin = {
10 | install
11 | };
12 |
13 | let GlobalVue = null;
14 | if (typeof window !== 'undefined') {
15 | GlobalVue = window.Vue;
16 | } else if (typeof global !== 'undefined') {
17 | GlobalVue = global.Vue;
18 | }
19 | if (GlobalVue) {
20 | GlobalVue.use(plugin);
21 | }
22 |
23 | export default component;
24 |
--------------------------------------------------------------------------------
/src/packages/TutorialAside/index.js:
--------------------------------------------------------------------------------
1 | import component from './TutorialAside.vue';
2 |
3 | export function install(Vue) {
4 | if (install.installed) return;
5 | install.installed = true;
6 | Vue.component('TutorialAside', component);
7 | }
8 |
9 | const plugin = {
10 | install
11 | };
12 |
13 | let GlobalVue = null;
14 | if (typeof window !== 'undefined') {
15 | GlobalVue = window.Vue;
16 | } else if (typeof global !== 'undefined') {
17 | GlobalVue = global.Vue;
18 | }
19 | if (GlobalVue) {
20 | GlobalVue.use(plugin);
21 | }
22 |
23 | export default component;
24 |
--------------------------------------------------------------------------------
/src/packages/TutorialSection/index.js:
--------------------------------------------------------------------------------
1 | import component from './TutorialSection.vue';
2 |
3 | export function install(Vue) {
4 | if (install.installed) return;
5 | install.installed = true;
6 | Vue.component('TutorialSection', component);
7 | }
8 |
9 | const plugin = {
10 | install
11 | };
12 |
13 | let GlobalVue = null;
14 | if (typeof window !== 'undefined') {
15 | GlobalVue = window.Vue;
16 | } else if (typeof global !== 'undefined') {
17 | GlobalVue = global.Vue;
18 | }
19 | if (GlobalVue) {
20 | GlobalVue.use(plugin);
21 | }
22 |
23 | export default component;
24 |
--------------------------------------------------------------------------------
/src/packages/TutorialHighlighter/index.js:
--------------------------------------------------------------------------------
1 | import component from './TutorialHighlighter.vue';
2 |
3 | export function install(Vue) {
4 | if (install.installed) return;
5 | install.installed = true;
6 | Vue.component('TutorialHighlighter', component);
7 | }
8 |
9 | const plugin = {
10 | install
11 | };
12 |
13 | let GlobalVue = null;
14 | if (typeof window !== 'undefined') {
15 | GlobalVue = window.Vue;
16 | } else if (typeof global !== 'undefined') {
17 | GlobalVue = global.Vue;
18 | }
19 | if (GlobalVue) {
20 | GlobalVue.use(plugin);
21 | }
22 |
23 | export default component;
24 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import Tutorial from './packages/Tutorial';
2 | import TutorialSection from './packages/TutorialSection';
3 | import TutorialStep from './packages/TutorialStep';
4 | import TutorialHighlighter from './packages/TutorialHighlighter';
5 |
6 | function install(Vue) {
7 | Vue.component('Tutorial', Tutorial);
8 | Vue.component('TutorialSection', TutorialSection);
9 | Vue.component('TutorialStep', TutorialStep);
10 | Vue.component('TutorialHighlighter', TutorialHighlighter);
11 | }
12 |
13 | export default {
14 | install
15 | };
16 |
17 | export {
18 | Tutorial,
19 | TutorialSection,
20 | TutorialStep,
21 | TutorialHighlighter
22 | };
23 |
--------------------------------------------------------------------------------
/docs/components/Tutorial.md:
--------------------------------------------------------------------------------
1 | # Tutorial
2 |
3 | ```
4 | ...
5 | ```
6 |
7 | The tutorial component is the main component for VueTut.
8 | It represents a single tutorial made up of sections.
9 | The following slots are available to customize the overall tutorial.
10 | ## Slots
11 |
12 |
13 | |Name|Description|Default Slot Content|
14 | |---|---|---|
15 | |eyebrow|Category/summary/group of the tutorial that is placed above the title|-|
16 | |title|The name of the tutorial|-|
17 | |intro|Paragraph intro text under the title|-|
18 | |default|Should be a series of TutorialSection components|-|
19 | |footer|Content to put below the tutorial|-|
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/style/vue-tut.scss:
--------------------------------------------------------------------------------
1 | .vue-tut {
2 | background-color: #fff;
3 | color: #333;
4 | font-family: "Helvetica Neue", Arial, sans-serif;
5 | -webkit-font-smoothing: antialiased;
6 | text-align: left;
7 |
8 | .tutorial-header, .tutorial-footer {
9 | padding: 50px;
10 |
11 | h1 {
12 | font-size: 22px;
13 | margin-bottom: 10px;
14 | }
15 |
16 | h2 {
17 | font-size: 32px;
18 | margin-bottom: 25px;
19 | }
20 |
21 | p {
22 | line-height: 1.4;
23 | }
24 | }
25 |
26 | .tutorial-footer {
27 | min-height: 100vh;
28 | }
29 |
30 | .tutorial-footer:empty {
31 | display: none;
32 | }
33 |
34 | // On desktop, we hide the asides in the contents
35 | .step-contents .step-aside {
36 | display: none;
37 | }
38 |
39 | .step-assets .step-after {
40 | display: none;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/docs/components/TutorialSection.md:
--------------------------------------------------------------------------------
1 | # TutorialSection
2 |
3 | ```
4 |
5 | ...
6 |
7 | ```
8 |
9 | The tutorial-section component is a way to group a tutorial into sections - like chapters in a book.
10 |
11 | A tutorial needs at least one section, but you should try to have multiple to make the tutorial easier to consume for readers.
12 |
13 | The following slots are available to customize a section.
14 | ## Slots
15 |
16 |
17 | |Name|Description|Default Slot Content|
18 | |---|---|---|
19 | |name|The name of the section, displayed in a smaller font above the title|"Section #""|
20 | |title|The title of the section|-|
21 | |intro|The introduction paragraph for the section|-|
22 | |step|Add one or more `TutorialStep` components to this slot|-|
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/markdown/TutorialStep.md:
--------------------------------------------------------------------------------
1 | # TutorialStep
2 |
3 | ```
4 |
5 |
6 | ...
7 |
8 |
9 | ```
10 |
11 | The tutorial-step component represents a single step in your tutorial.
12 |
13 | 
14 |
15 | _Pictured above: An example step_
16 |
17 | On the left side of the screen, the current step's `default` slot content is shown in a highlighted box (1), with the number of the step within the section displayed above (2).
18 |
19 | On the right side of the screen, the current step's `aside` slot content is shown (3). This aside often contains a tutorial-highlighter component, but can hold anything. Using the html tag aside for this slot is recommended to get centered content. E.g. ``.
20 |
21 | The slot `after` can be used to display content below the step box, i.e. notes etc (4).
22 |
--------------------------------------------------------------------------------
/themes/azure.scss:
--------------------------------------------------------------------------------
1 | .vue-tut {
2 | .tutorial-header, .tutorial-footer {
3 | background-color: #000;
4 | color: #fff;
5 |
6 | p {
7 | font-size: 17px;
8 | }
9 |
10 | h1, h2 {
11 | letter-spacing: 0.6px;
12 | font-weight: 400;
13 | }
14 | }
15 |
16 | .step {
17 | border-radius: 10px;
18 | }
19 |
20 | .step p {
21 | font-size: 15px;
22 | }
23 |
24 | .sections > section > header > h1 {
25 | font-weight: 400;
26 | }
27 |
28 | .sections > section > header > h2 {
29 | font-weight: 400;
30 | }
31 |
32 | .prism-editor-wrapper .prism-editor__line-number.highlight-line {
33 | border-left: 5px solid #0173fe;
34 | background: #0173fe38;
35 | }
36 |
37 | .prism-editor-wrapper .prism-editor__line-number.highlight-line:after {
38 | background: #0173fe38;
39 | }
40 |
41 | .step-intersected .step {
42 | border-left: 10px solid #0173fe;
43 | }
44 |
45 | .step-after {
46 | background: #e1daf1;
47 | border-radius: 10px;
48 | padding: 20px 15px;
49 | font-size: 15px;
50 | line-height: 1.3;
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/dist/themes/azure.css:
--------------------------------------------------------------------------------
1 | .vue-tut .tutorial-header, .vue-tut .tutorial-footer {
2 | background-color: #000;
3 | color: #fff;
4 | }
5 | .vue-tut .tutorial-header p, .vue-tut .tutorial-footer p {
6 | font-size: 17px;
7 | }
8 | .vue-tut .tutorial-header h1, .vue-tut .tutorial-header h2, .vue-tut .tutorial-footer h1, .vue-tut .tutorial-footer h2 {
9 | letter-spacing: 0.6px;
10 | font-weight: 400;
11 | }
12 | .vue-tut .step {
13 | border-radius: 10px;
14 | }
15 | .vue-tut .step p {
16 | font-size: 15px;
17 | }
18 | .vue-tut .sections > section > header > h1 {
19 | font-weight: 400;
20 | }
21 | .vue-tut .sections > section > header > h2 {
22 | font-weight: 400;
23 | }
24 | .vue-tut .prism-editor-wrapper .prism-editor__line-number.highlight-line {
25 | border-left: 5px solid #0173fe;
26 | background: #0173fe38;
27 | }
28 | .vue-tut .prism-editor-wrapper .prism-editor__line-number.highlight-line:after {
29 | background: #0173fe38;
30 | }
31 | .vue-tut .step-intersected .step {
32 | border-left: 10px solid #0173fe;
33 | }
34 | .vue-tut .step-after {
35 | background: #e1daf1;
36 | border-radius: 10px;
37 | padding: 20px 15px;
38 | font-size: 15px;
39 | line-height: 1.3;
40 | }
41 |
42 | /*# sourceMappingURL=azure.css.map */
43 |
--------------------------------------------------------------------------------
/docs/components/TutorialStep.md:
--------------------------------------------------------------------------------
1 | # TutorialStep
2 |
3 | ```
4 |
5 |
6 | ...
7 |
8 |
9 | ```
10 |
11 | The tutorial-step component represents a single step in your tutorial.
12 |
13 | 
14 |
15 | _Pictured above: An example step_
16 |
17 | On the left side of the screen, the current step's `default` slot content is shown in a highlighted box (1), with the number of the step within the section displayed above (2).
18 |
19 | On the right side of the screen, the current step's `aside` slot content is shown (3). This aside often contains a tutorial-highlighter component, but can hold anything. Using the html tag aside for this slot is recommended to get centered content. E.g. ``.
20 |
21 | The slot `after` can be used to display content below the step box, i.e. notes etc (4).
22 | ## Slots
23 |
24 |
25 | |Name|Description|Default Slot Content|
26 | |---|---|---|
27 | |name|The name of the step|"Step #"|
28 | |default|The content of the step box|-|
29 | |aside|The content to put aside the step box (or below on mobile)|-|
30 | |after|Content to display after and outside the step box|-|
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/themes/vue.scss:
--------------------------------------------------------------------------------
1 | :root {
2 | --tut-color-accent: #42b983;
3 | --tut-color-body: #304455;
4 | --tut-color-headers: #273849;
5 | --tut-color-gray-dark: #4f5959;
6 | }
7 |
8 | .vue-tut {
9 | background-color: #fff;
10 | color: var(--tut-color-body);
11 | font-family: "Source Sans Pro", "Helvetica Neue", Arial, sans-serif;
12 | font-size: 16px;
13 |
14 | a, a:visited {
15 | color: var(--tut-color-accent);
16 | }
17 |
18 | h1, h2, h3, h4 {
19 | font-weight: 600;
20 | }
21 |
22 | .sections > section > header > h1 {
23 | font-weight: 600;
24 | }
25 |
26 | .sections > section > header > h2 {
27 | font-weight: 600;
28 | border-bottom: 1px solid #ddd;
29 | padding-bottom: 17px;
30 | }
31 |
32 | h1, h2, h3, h4, h5, h6 {
33 | color: var(--tut-color-headers);
34 | }
35 |
36 | h1 {
37 | color: var(--tut-color-gray-dark);
38 | }
39 |
40 | p {
41 | color: var(--tut-color-body);
42 | line-height: 1.4;
43 | }
44 |
45 | .step {
46 | background-color: #f8f8f8;
47 | }
48 |
49 | .step hr {
50 | border-color: #ddd;
51 | }
52 |
53 | .prism-editor-wrapper .prism-editor__line-number.highlight-line {
54 | border-left: 5px solid var(--tut-color-accent);
55 | background: #42b9832a;
56 | }
57 |
58 | .prism-editor-wrapper .prism-editor__line-number.highlight-line:after {
59 | background: #42b9832a;
60 | }
61 |
62 | .step-intersected .step {
63 | border-left: 10px solid var(--tut-color-accent);
64 | }
65 | }
--------------------------------------------------------------------------------
/dist/themes/vue.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --tut-color-accent: #42b983;
3 | --tut-color-body: #304455;
4 | --tut-color-headers: #273849;
5 | --tut-color-gray-dark: #4f5959;
6 | }
7 |
8 | .vue-tut {
9 | background-color: #fff;
10 | color: var(--tut-color-body);
11 | font-family: "Source Sans Pro", "Helvetica Neue", Arial, sans-serif;
12 | font-size: 16px;
13 | }
14 | .vue-tut a, .vue-tut a:visited {
15 | color: var(--tut-color-accent);
16 | }
17 | .vue-tut h1, .vue-tut h2, .vue-tut h3, .vue-tut h4 {
18 | font-weight: 600;
19 | }
20 | .vue-tut .sections > section > header > h1 {
21 | font-weight: 600;
22 | }
23 | .vue-tut .sections > section > header > h2 {
24 | font-weight: 600;
25 | border-bottom: 1px solid #ddd;
26 | padding-bottom: 17px;
27 | }
28 | .vue-tut h1, .vue-tut h2, .vue-tut h3, .vue-tut h4, .vue-tut h5, .vue-tut h6 {
29 | color: var(--tut-color-headers);
30 | }
31 | .vue-tut h1 {
32 | color: var(--tut-color-gray-dark);
33 | }
34 | .vue-tut p {
35 | color: var(--tut-color-body);
36 | line-height: 1.4;
37 | }
38 | .vue-tut .step {
39 | background-color: #f8f8f8;
40 | }
41 | .vue-tut .step hr {
42 | border-color: #ddd;
43 | }
44 | .vue-tut .prism-editor-wrapper .prism-editor__line-number.highlight-line {
45 | border-left: 5px solid var(--tut-color-accent);
46 | background: #42b9832a;
47 | }
48 | .vue-tut .prism-editor-wrapper .prism-editor__line-number.highlight-line:after {
49 | background: #42b9832a;
50 | }
51 | .vue-tut .step-intersected .step {
52 | border-left: 10px solid var(--tut-color-accent);
53 | }
54 |
55 | /*# sourceMappingURL=vue.css.map */
56 |
--------------------------------------------------------------------------------
/src/packages/TutorialStep/TutorialStep.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
65 |
--------------------------------------------------------------------------------
/src/packages/Tutorial/Tutorial.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
27 |
28 |
29 |
30 |
64 |
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | VueTut
5 |
6 |
7 |
8 |
9 |
54 |
55 |
56 |
57 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/dist/code-themes/vue.css:
--------------------------------------------------------------------------------
1 | pre {
2 | font-family: "Source Sans Pro", "Helvetica Neue", Arial, sans-serif;
3 | color: #525252;
4 | background: #f8f8f8;
5 | }
6 |
7 | .token.selector,
8 | .token.tag,
9 | .token.tag .token.title,
10 | .token.change,
11 | .token.winutils,
12 | .token.flow,
13 | .token.tex .token.special {
14 | color: #2973b7;
15 | }
16 |
17 | .token.symbol,
18 | .token.symbol .token.string,
19 | .token.attr-value,
20 | .token.value,
21 | .token.regex,
22 | .token.string,
23 | .token.subst,
24 | .token.haskell .token.type,
25 | .token.preprocessor,
26 | .token.ruby .token.class .token.parent,
27 | .token.built_in,
28 | .token.sql .token.aggregate,
29 | .token.django .token.template_tag,
30 | .token.django .token.variable,
31 | .token.smalltalk .token.class,
32 | .token.javadoc,
33 | .token.django .token.filter .token.argument,
34 | .token.smalltalk .token.localvars,
35 | .token.smalltalk .token.array,
36 | .token.attr_selector,
37 | .token.pseudo,
38 | .token.addition,
39 | .token.stream,
40 | .token.envvar,
41 | .token.apache .token.tag,
42 | .token.apache .token.cbracket,
43 | .token.tex .token.command,
44 | .token.prompt {
45 | color: #42b983;
46 | }
47 | .token.function .token.keyword,
48 | .token.constant {
49 | color: #0092db;
50 | }
51 |
52 | .token.property,
53 | .token.keyword,
54 | .token.attribute {
55 | color: #d63200;
56 | }
57 | .token.number,
58 | .token.literal {
59 | color: #a32eff;
60 | }
61 | .token.class .token.title {
62 | color: #fff;
63 | }
64 | .token.title {
65 | color: #a6e22e;
66 | }
67 | .token.tag .token.value,
68 | .token.comment,
69 | .token.java .token.annotation,
70 | .token.python .token.decorator,
71 | .token.template_comment,
72 | .token.pi,
73 | .token.doctype,
74 | .token.deletion,
75 | .token.shebang,
76 | .token.apache .token.sqbracket,
77 | .token.tex .token.formula {
78 | color: #707070;
79 | }
80 |
81 | .tutorial-highlighter-title {
82 | color: #676767;
83 | }
84 |
85 |
--------------------------------------------------------------------------------
/src/style/code-theme/vue.css:
--------------------------------------------------------------------------------
1 | pre {
2 | font-family: "Source Sans Pro", "Helvetica Neue", Arial, sans-serif;
3 | color: #525252;
4 | background: #f8f8f8;
5 | }
6 |
7 | .token.selector,
8 | .token.tag,
9 | .token.tag .token.title,
10 | .token.change,
11 | .token.winutils,
12 | .token.flow,
13 | .token.tex .token.special {
14 | color: #2973b7;
15 | }
16 |
17 | .token.symbol,
18 | .token.symbol .token.string,
19 | .token.attr-value,
20 | .token.value,
21 | .token.regex,
22 | .token.string,
23 | .token.subst,
24 | .token.haskell .token.type,
25 | .token.preprocessor,
26 | .token.ruby .token.class .token.parent,
27 | .token.built_in,
28 | .token.sql .token.aggregate,
29 | .token.django .token.template_tag,
30 | .token.django .token.variable,
31 | .token.smalltalk .token.class,
32 | .token.javadoc,
33 | .token.django .token.filter .token.argument,
34 | .token.smalltalk .token.localvars,
35 | .token.smalltalk .token.array,
36 | .token.attr_selector,
37 | .token.pseudo,
38 | .token.addition,
39 | .token.stream,
40 | .token.envvar,
41 | .token.apache .token.tag,
42 | .token.apache .token.cbracket,
43 | .token.tex .token.command,
44 | .token.prompt {
45 | color: #42b983;
46 | }
47 | .token.function .token.keyword,
48 | .token.constant {
49 | color: #0092db;
50 | }
51 |
52 | .token.property,
53 | .token.keyword,
54 | .token.attribute {
55 | color: #d63200;
56 | }
57 | .token.number,
58 | .token.literal {
59 | color: #a32eff;
60 | }
61 | .token.class .token.title {
62 | color: #fff;
63 | }
64 | .token.title {
65 | color: #a6e22e;
66 | }
67 | .token.tag .token.value,
68 | .token.comment,
69 | .token.java .token.annotation,
70 | .token.python .token.decorator,
71 | .token.template_comment,
72 | .token.pi,
73 | .token.doctype,
74 | .token.deletion,
75 | .token.shebang,
76 | .token.apache .token.sqbracket,
77 | .token.tex .token.formula {
78 | color: #707070;
79 | }
80 |
81 | .tutorial-highlighter-title {
82 | color: #676767;
83 | }
84 |
85 |
--------------------------------------------------------------------------------
/src/style/prism-editor.scss:
--------------------------------------------------------------------------------
1 | .prism-editor-wrapper {
2 | width: 100%;
3 | height: 100%;
4 | display: flex;
5 | align-items: flex-start;
6 | overflow: auto;
7 | tab-size: 1.5em;
8 | -moz-tab-size: 1.5em;
9 |
10 | @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
11 | .prism-editor__textarea {
12 | color: transparent !important;
13 | }
14 | .prism-editor__textarea::selection {
15 | background-color: #accef7 !important;
16 | color: transparent !important;
17 | }
18 | }
19 |
20 | .prism-editor__container {
21 | position: relative;
22 | text-align: left;
23 | box-sizing: border-box;
24 | padding: 0;
25 | overflow: hidden;
26 | width: 100%;
27 | }
28 |
29 | .prism-editor__line-numbers {
30 | height: 100%;
31 | overflow: hidden;
32 | flex-shrink: 0;
33 | padding-top: 4px;
34 | margin-top: 0;
35 | margin-right: 10px;
36 | }
37 | .prism-editor__line-number {
38 | /* padding: 0 3px 0 5px; */
39 | text-align: right;
40 | white-space: nowrap;
41 | }
42 |
43 | .prism-editor__textarea {
44 | position: absolute;
45 | top: 0;
46 | left: 0;
47 | height: 100%;
48 | width: 100%;
49 | resize: none;
50 | color: inherit;
51 | overflow: hidden;
52 | -moz-osx-font-smoothing: grayscale;
53 | -webkit-font-smoothing: antialiased;
54 | -webkit-text-fill-color: transparent;
55 | }
56 |
57 | .prism-editor__textarea,
58 | .prism-editor__editor {
59 | margin: 0;
60 | border: 0;
61 | box-sizing: inherit;
62 | display: inherit;
63 | font-family: inherit;
64 | font-size: inherit;
65 | font-style: inherit;
66 | font-variant-ligatures: inherit;
67 | font-weight: inherit;
68 | letter-spacing: inherit;
69 | line-height: inherit;
70 | tab-size: inherit;
71 | text-indent: inherit;
72 | text-rendering: inherit;
73 | text-transform: inherit;
74 | white-space: pre;
75 | word-wrap: keep-all;
76 | overflow-wrap: break-word;
77 | padding: 0;
78 | }
79 |
80 | .prism-editor__textarea--empty {
81 | -webkit-text-fill-color: inherit !important;
82 | }
83 |
84 | .prism-editor__editor {
85 | position: relative;
86 | pointer-events: auto;
87 | overflow-x: auto;
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/dist/code-themes/tomorrow.css:
--------------------------------------------------------------------------------
1 | /**
2 | * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML
3 | * Based on https://github.com/chriskempson/tomorrow-theme
4 | * @author Rose Pritchard
5 | */
6 |
7 | code[class*="language-"],
8 | pre[class*="language-"] {
9 | color: #ccc;
10 | background: none;
11 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
12 | font-size: 1em;
13 | text-align: left;
14 | white-space: pre;
15 | word-spacing: normal;
16 | word-break: normal;
17 | word-wrap: normal;
18 | line-height: 1.5;
19 |
20 | -moz-tab-size: 4;
21 | -o-tab-size: 4;
22 | tab-size: 4;
23 |
24 | -webkit-hyphens: none;
25 | -moz-hyphens: none;
26 | -ms-hyphens: none;
27 | hyphens: none;
28 |
29 | }
30 |
31 | /* Code blocks */
32 | pre[class*="language-"] {
33 | padding: 1em;
34 | margin: .5em 0;
35 | overflow: auto;
36 | }
37 |
38 | :not(pre) > code[class*="language-"],
39 | pre[class*="language-"] {
40 | background: #2d2d2d;
41 | }
42 |
43 | /* Inline code */
44 | :not(pre) > code[class*="language-"] {
45 | padding: .1em;
46 | border-radius: .3em;
47 | white-space: normal;
48 | }
49 |
50 | .token.comment,
51 | .token.block-comment,
52 | .token.prolog,
53 | .token.doctype,
54 | .token.cdata {
55 | color: #999;
56 | }
57 |
58 | .token.punctuation {
59 | color: #ccc;
60 | }
61 |
62 | .token.tag,
63 | .token.attr-name,
64 | .token.namespace,
65 | .token.deleted {
66 | color: #e2777a;
67 | }
68 |
69 | .token.function-name {
70 | color: #6196cc;
71 | }
72 |
73 | .token.boolean,
74 | .token.number,
75 | .token.function {
76 | color: #f08d49;
77 | }
78 |
79 | .token.property,
80 | .token.class-name,
81 | .token.constant,
82 | .token.symbol {
83 | color: #f8c555;
84 | }
85 |
86 | .token.selector,
87 | .token.important,
88 | .token.atrule,
89 | .token.keyword,
90 | .token.builtin {
91 | color: #cc99cd;
92 | }
93 |
94 | .token.string,
95 | .token.char,
96 | .token.attr-value,
97 | .token.regex,
98 | .token.variable {
99 | color: #7ec699;
100 | }
101 |
102 | .token.operator,
103 | .token.entity,
104 | .token.url {
105 | color: #67cdcc;
106 | }
107 |
108 | .token.important,
109 | .token.bold {
110 | font-weight: bold;
111 | }
112 | .token.italic {
113 | font-style: italic;
114 | }
115 |
116 | .token.entity {
117 | cursor: help;
118 | }
119 |
120 | .token.inserted {
121 | color: green;
122 | }
123 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true,
5 | mocha: true
6 | },
7 | globals: {
8 | BigInt: true,
9 | BigUint64Array: true
10 | },
11 | extends: [
12 | 'plugin:vue/recommended',
13 | '@vue/airbnb'
14 | ],
15 | parserOptions: {
16 | parser: 'babel-eslint'
17 | },
18 | rules: {
19 | 'no-underscore-dangle': 'off',
20 | 'no-extend-native': 'off',
21 | 'no-empty': 'off',
22 | radix: 'off',
23 | 'no-cond-assign': 'off',
24 | 'no-plusplus': 'off',
25 | 'default-case': 'off',
26 | 'no-use-before-define': 'off',
27 | 'no-labels': 'off',
28 | 'no-restricted-syntax': 'off',
29 | 'consistent-return': 'off',
30 | 'func-names': 'off',
31 | 'arrow-parens': 'off',
32 | camelcase: 'off',
33 | 'no-console': 'off',
34 | 'no-continue': 'off',
35 | 'prefer-const': 'off',
36 | 'comma-dangle': [
37 | 'error', {
38 | arrays: 'never',
39 | objects: 'never',
40 | imports: 'never',
41 | exports: 'never',
42 | functions: 'ignore'
43 | }
44 | ],
45 | 'prefer-destructuring': 'off',
46 | 'space-before-function-paren': 'off',
47 | 'no-new': 'off',
48 | 'max-len': ['error', {
49 | ignoreStrings: true,
50 | ignorePattern: ' code[class*="language-"],
38 | pre[class*="language-"] {
39 | background: #282a36;
40 | }
41 |
42 | /* Inline code */
43 | :not(pre) > code[class*="language-"] {
44 | padding: .1em;
45 | border-radius: .3em;
46 | white-space: normal;
47 | }
48 |
49 | .token.comment,
50 | .token.prolog,
51 | .token.doctype,
52 | .token.cdata {
53 | color: #6272a4;
54 | }
55 |
56 | .token.punctuation {
57 | color: #f8f8f2;
58 | }
59 |
60 | .namespace {
61 | opacity: .7;
62 | }
63 |
64 | .token.property,
65 | .token.tag,
66 | .token.constant,
67 | .token.symbol,
68 | .token.deleted {
69 | color: #ff79c6;
70 | }
71 |
72 | .token.boolean,
73 | .token.number {
74 | color: #bd93f9;
75 | }
76 |
77 | .token.selector,
78 | .token.attr-name,
79 | .token.string,
80 | .token.char,
81 | .token.builtin,
82 | .token.inserted {
83 | color: #50fa7b;
84 | }
85 |
86 | .token.operator,
87 | .token.entity,
88 | .token.url,
89 | .language-css .token.string,
90 | .style .token.string,
91 | .token.variable {
92 | color: #f8f8f2;
93 | }
94 |
95 | .token.atrule,
96 | .token.attr-value,
97 | .token.function,
98 | .token.class-name {
99 | color: #f1fa8c;
100 | }
101 |
102 | .token.keyword {
103 | color: #8be9fd;
104 | }
105 |
106 | .token.regex,
107 | .token.important {
108 | color: #ffb86c;
109 | }
110 |
111 | .token.important,
112 | .token.bold {
113 | font-weight: bold;
114 | }
115 |
116 | .token.italic {
117 | font-style: italic;
118 | }
119 |
120 | .token.entity {
121 | cursor: help;
122 | }
123 |
--------------------------------------------------------------------------------
/dist/code-themes/okaidia.css:
--------------------------------------------------------------------------------
1 | /**
2 | * okaidia theme for JavaScript, CSS and HTML
3 | * Loosely based on Monokai textmate theme by http://www.monokai.nl/
4 | * @author ocodia
5 | */
6 |
7 | code[class*="language-"],
8 | pre[class*="language-"] {
9 | color: #f8f8f2;
10 | background: none;
11 | text-shadow: 0 1px rgba(0, 0, 0, 0.3);
12 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
13 | font-size: 1em;
14 | text-align: left;
15 | white-space: pre;
16 | word-spacing: normal;
17 | word-break: normal;
18 | word-wrap: normal;
19 | line-height: 1.5;
20 |
21 | -moz-tab-size: 4;
22 | -o-tab-size: 4;
23 | tab-size: 4;
24 |
25 | -webkit-hyphens: none;
26 | -moz-hyphens: none;
27 | -ms-hyphens: none;
28 | hyphens: none;
29 | }
30 |
31 | /* Code blocks */
32 | pre[class*="language-"] {
33 | padding: 1em;
34 | margin: .5em 0;
35 | overflow: auto;
36 | border-radius: 0.3em;
37 | }
38 |
39 | :not(pre) > code[class*="language-"],
40 | pre[class*="language-"] {
41 | background: #272822;
42 | }
43 |
44 | /* Inline code */
45 | :not(pre) > code[class*="language-"] {
46 | padding: .1em;
47 | border-radius: .3em;
48 | white-space: normal;
49 | }
50 |
51 | .token.comment,
52 | .token.prolog,
53 | .token.doctype,
54 | .token.cdata {
55 | color: #8292a2;
56 | }
57 |
58 | .token.punctuation {
59 | color: #f8f8f2;
60 | }
61 |
62 | .token.namespace {
63 | opacity: .7;
64 | }
65 |
66 | .token.property,
67 | .token.tag,
68 | .token.constant,
69 | .token.symbol,
70 | .token.deleted {
71 | color: #f92672;
72 | }
73 |
74 | .token.boolean,
75 | .token.number {
76 | color: #ae81ff;
77 | }
78 |
79 | .token.selector,
80 | .token.attr-name,
81 | .token.string,
82 | .token.char,
83 | .token.builtin,
84 | .token.inserted {
85 | color: #a6e22e;
86 | }
87 |
88 | .token.operator,
89 | .token.entity,
90 | .token.url,
91 | .language-css .token.string,
92 | .style .token.string,
93 | .token.variable {
94 | color: #f8f8f2;
95 | }
96 |
97 | .token.atrule,
98 | .token.attr-value,
99 | .token.function,
100 | .token.class-name {
101 | color: #e6db74;
102 | }
103 |
104 | .token.keyword {
105 | color: #66d9ef;
106 | }
107 |
108 | .token.regex,
109 | .token.important {
110 | color: #fd971f;
111 | }
112 |
113 | .token.important,
114 | .token.bold {
115 | font-weight: bold;
116 | }
117 | .token.italic {
118 | font-style: italic;
119 | }
120 |
121 | .token.entity {
122 | cursor: help;
123 | }
124 |
--------------------------------------------------------------------------------
/dist/code-themes/nord.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Nord Theme Originally by Arctic Ice Studio
3 | * https://nordtheme.com
4 | *
5 | * Ported for PrismJS by Zane Hitchcoxc (@zwhitchcox) and Gabriel Ramos (@gabrieluizramos)
6 | */
7 |
8 | code[class*="language-"],
9 | pre[class*="language-"] {
10 | color: #f8f8f2;
11 | background: none;
12 | font-family: "Fira Code", Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
13 | text-align: left;
14 | white-space: pre;
15 | word-spacing: normal;
16 | word-break: normal;
17 | word-wrap: normal;
18 | line-height: 1.5;
19 | -moz-tab-size: 4;
20 | -o-tab-size: 4;
21 | tab-size: 4;
22 | -webkit-hyphens: none;
23 | -moz-hyphens: none;
24 | -ms-hyphens: none;
25 | hyphens: none;
26 | }
27 |
28 | /* Code blocks */
29 | pre[class*="language-"] {
30 | padding: 1em;
31 | margin: .5em 0;
32 | overflow: auto;
33 | border-radius: 0.3em;
34 | }
35 |
36 | :not(pre) > code[class*="language-"],
37 | pre[class*="language-"] {
38 | background: #2E3440;
39 | }
40 |
41 | /* Inline code */
42 | :not(pre) > code[class*="language-"] {
43 | padding: .1em;
44 | border-radius: .3em;
45 | white-space: normal;
46 | }
47 |
48 | .token.comment,
49 | .token.prolog,
50 | .token.doctype,
51 | .token.cdata {
52 | color: #636f88;
53 | }
54 |
55 | .token.punctuation {
56 | color: #81A1C1;
57 | }
58 |
59 | .namespace {
60 | opacity: .7;
61 | }
62 |
63 | .token.property,
64 | .token.tag,
65 | .token.constant,
66 | .token.symbol,
67 | .token.deleted {
68 | color: #81A1C1;
69 | }
70 |
71 | .token.number {
72 | color: #B48EAD;
73 | }
74 |
75 | .token.boolean {
76 | color: #81A1C1;
77 | }
78 |
79 | .token.selector,
80 | .token.attr-name,
81 | .token.string,
82 | .token.char,
83 | .token.builtin,
84 | .token.inserted {
85 | color: #A3BE8C;
86 | }
87 |
88 | .token.operator,
89 | .token.entity,
90 | .token.url,
91 | .language-css .token.string,
92 | .style .token.string,
93 | .token.variable {
94 | color: #81A1C1;
95 | }
96 |
97 | .token.atrule,
98 | .token.attr-value,
99 | .token.function,
100 | .token.class-name {
101 | color: #88C0D0;
102 | }
103 |
104 | .token.keyword {
105 | color: #81A1C1;
106 | }
107 |
108 | .token.regex,
109 | .token.important {
110 | color: #EBCB8B;
111 | }
112 |
113 | .token.important,
114 | .token.bold {
115 | font-weight: bold;
116 | }
117 |
118 | .token.italic {
119 | font-style: italic;
120 | }
121 |
122 | .token.entity {
123 | cursor: help;
124 | }
125 |
--------------------------------------------------------------------------------
/src/style/vue-tut-step.scss:
--------------------------------------------------------------------------------
1 | .vue-tut {
2 | .steps {
3 | padding-top: 50px;
4 | }
5 |
6 | //
7 | // A step
8 | //
9 |
10 | // .step-wrapper:not(:last-child) {
11 | // margin-bottom: 100px;
12 | // }
13 |
14 | .step-wrapper {
15 | padding-bottom: 140px;
16 | }
17 |
18 | .step-assets .step-wrapper {
19 | padding-bottom: 0;
20 | }
21 |
22 | .step {
23 | border-left: 10px solid transparent;
24 | background-color: #f3f1f1;
25 | }
26 |
27 | .step-after {
28 | padding: 0 15px;
29 | }
30 |
31 | .step-intersected .step {
32 | border-left: 10px solid gray;
33 | }
34 |
35 | .step-intersected ~ .step-intersected .step {
36 | border-left: 10px solid transparent;
37 | }
38 |
39 | .step-contents {
40 | width: 39%;
41 | margin-right: 4%;
42 | margin-top: 140px;
43 | margin-bottom: 94vh;
44 | }
45 |
46 | .step-aside img {
47 | object-fit: contain;
48 | max-width: 100%;
49 | max-height: 100%;
50 | }
51 |
52 | .step-label {
53 | display: block;
54 | font-weight: 600;
55 | letter-spacing: 0.1px;
56 | }
57 |
58 | .step hr {
59 | border-color: #ddd;
60 | margin: 16px 0 15px 0;
61 | }
62 |
63 | .step p {
64 | line-height: 1.3;
65 | }
66 |
67 | //
68 | // Assets sidebar
69 | //
70 |
71 | .step-assets {
72 | margin-right: -50px;
73 | top: 0;
74 | max-width: 920px;
75 | width: calc(50vw + 8.33333%) !important;
76 | height: calc(100vh);
77 | max-height: 100%;
78 | overflow-y: auto;
79 | position: sticky;
80 | }
81 |
82 | .step-assets .step {
83 | display: none;
84 | }
85 |
86 | .step-assets .step-wrapper {
87 | height: 100%;
88 |
89 | .step-container {
90 | height: 100%;
91 |
92 | .step-aside {
93 | height: 100%;
94 |
95 | aside {
96 | height: 100%;
97 | display: flex;
98 | justify-content: center;
99 | align-items: center;
100 | }
101 | }
102 | }
103 | }
104 |
105 | .step-after {
106 | margin-top: 40px;
107 | }
108 |
109 | .step-after:empty {
110 | display: none;
111 | }
112 |
113 | .step-assets-inner {
114 | position: relative;
115 | height: 100%;
116 | }
117 |
118 | .step-assets-inner .asset-aside-wrapper {
119 | position: absolute;
120 | top: 0;
121 | left: 0;
122 | right: 0;
123 | bottom: 0;
124 | }
125 | }
--------------------------------------------------------------------------------
/src/style/vue-tut-mobile.scss:
--------------------------------------------------------------------------------
1 | main.vue-tut {
2 | @media only screen
3 | and (max-device-width: 600px)
4 | and (-webkit-min-device-pixel-ratio: 2)
5 | and (orientation: landscape) {
6 | .prism-editor-wrapper {
7 | .prism-editor__line-numbers {
8 | .prism-editor__line-number {
9 | font-size: 16px !important;
10 | line-height: 27px !important;
11 | &:after {
12 | height: 27px !important;
13 | }
14 | }
15 | }
16 |
17 | .prism-editor__editor {
18 | font-size: 18px !important;
19 | line-height: 27px !important;
20 | }
21 |
22 | .token {
23 | font-size: 10px !important;
24 | line-height: 6px !important;
25 | }
26 | }
27 | }
28 |
29 | @media only screen
30 | and (max-device-width: 600px)
31 | and (-webkit-min-device-pixel-ratio: 2)
32 | and (orientation: portrait) {
33 | .prism-editor-wrapper {
34 | .prism-editor__line-numbers {
35 | .prism-editor__line-number {
36 | line-height: 21px !important;
37 | height: 21px !important;
38 | }
39 | }
40 | }
41 | }
42 |
43 | @media all and (max-width: 980px) {
44 | .tutorial-header {
45 | padding: 15px;
46 | margin-bottom: 5px;
47 |
48 | > h1.m-s-sm {
49 | margin-bottom: 5px;
50 | }
51 |
52 | > h2.m-s-xl {
53 | margin-bottom: 15px;
54 | }
55 | }
56 |
57 | .sections .tutorial-section {
58 | margin: 15px;
59 | }
60 |
61 | .step {
62 | margin-top: 40px;
63 | margin-bottom: 20px;
64 | }
65 |
66 | .steps {
67 | padding-top: 0;
68 | }
69 |
70 | .steps > .step-contents {
71 | width: 100%;
72 | margin: 0;
73 | }
74 |
75 | .step-contents .step-aside {
76 | display: block;
77 |
78 | aside {
79 | display: flex;
80 | align-items: center;
81 | justify-content: center;
82 | }
83 |
84 | pre {
85 | word-wrap: inherit;
86 | white-space: pre;
87 | }
88 |
89 | .highlight-line:after {
90 | width: calc(100vw - 62px) !important;
91 | }
92 | }
93 |
94 | .step-assets {
95 | display: none;
96 | }
97 |
98 | .step-wrapper {
99 | padding-bottom: 70px;
100 | }
101 |
102 | .step-wrapper:first-child .step {
103 | margin-top: 40px;
104 | }
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/src/style/vue-tut-highlighter.scss:
--------------------------------------------------------------------------------
1 | .vue-tut {
2 | .tutorial-highlighter {
3 | font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
4 | font-size: 14px;
5 | line-height: 1.5;
6 | padding: 10px 5px 5px 0;
7 |
8 |
9 | cursor: text;
10 | }
11 |
12 | .tutorial-highlighter-title {
13 | padding: 13px 15px 0px 62px;
14 | font-size: 18px;
15 | font-weight: bold;
16 | height: 36px;
17 | }
18 |
19 | .prism-editor-wrapper .prism-editor__container {
20 | overflow-x: auto;
21 | }
22 |
23 | .prism-editor__textarea:focus {
24 | outline: none;
25 | }
26 |
27 | .prism-editor__editor {
28 | white-space: pre;
29 | word-wrap: inherit;
30 | }
31 |
32 | .prism-editor-wrapper {
33 | height: calc(100% - 36px);
34 | font-size: 14px !important;
35 |
36 | * {
37 | font-size: 14px !important;
38 | }
39 | }
40 |
41 | .prism-editor__line-numbers {
42 | user-select: none;
43 | cursor: default;
44 | margin-right: 20px;
45 | min-width: 42px;
46 | background: transparent !important;
47 | overflow: visible;
48 | }
49 |
50 | .prism-editor__line-number {
51 | border-left: 5px solid transparent;
52 | padding-left: 10px;
53 | position: relative;
54 | }
55 |
56 | .prism-editor__line-number.highlight-line {
57 | border-left: 5px solid gray;
58 | background: rgba(128, 128, 128, 0.384);
59 | }
60 |
61 | .prism-editor__line-number.highlight-line:after {
62 | content: "";
63 | height: 21px;
64 | background: rgba(128, 128, 128, 0.384);
65 | pointer-events: none;
66 | position: absolute;
67 | z-index: 1;
68 | max-width: 920px;
69 | width: calc(50vw + 58px) !important;
70 | }
71 |
72 | textarea {
73 | display: none !important;
74 | }
75 |
76 | pre > span {
77 | position: relative;
78 | z-index: 1;
79 | }
80 |
81 | .no-line-numbers {
82 | .prism-editor__line-numbers {
83 | width: 15px;
84 | min-width: 0;
85 | padding: 0;
86 | margin: 0;
87 |
88 | .prism-editor__line-number {
89 | width: 15px;
90 | padding-left: 0 !important;
91 | color: transparent !important;
92 | }
93 | }
94 |
95 | .prism-editor__line-number.highlight-line:after {
96 | width: calc(50vw + 64px) !important;
97 | }
98 |
99 | .tutorial-highlighter-title {
100 | padding-left: 17px;
101 | }
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/dist/code-themes/hopscotch.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Fira+Mono);
2 | /*
3 | * Hopscotch
4 | * by Jan T. Sott
5 | * https://github.com/idleberg/Hopscotch
6 | *
7 | * This work is licensed under the Creative Commons CC0 1.0 Universal License
8 | */
9 |
10 | code[class*="language-"],
11 | pre[class*="language-"] {
12 | font-family: "Fira Mono", Menlo, Monaco, "Lucida Console", "Courier New", Courier, monospace;
13 | font-size: 16px;
14 | line-height: 1.375;
15 | direction: ltr;
16 | text-align: left;
17 | word-spacing: normal;
18 |
19 | -moz-tab-size: 4;
20 | -o-tab-size: 4;
21 | tab-size: 4;
22 |
23 | -webkit-hyphens: none;
24 | -moz-hyphens: none;
25 | -ms-hyphens: none;
26 | hyphens: none;
27 | white-space: pre;
28 | white-space: pre-wrap;
29 | word-break: break-all;
30 | word-wrap: break-word;
31 | background: #322931;
32 | color: #b9b5b8;
33 | }
34 |
35 | pre > code[class*="language-"] {
36 | font-size: 1em;
37 | }
38 |
39 | /* Code blocks */
40 | pre[class*="language-"] {
41 | padding: 1em;
42 | margin: .5em 0;
43 | overflow: auto;
44 | }
45 |
46 | /* Inline code */
47 | :not(pre) > code[class*="language-"] {
48 | padding: .1em;
49 | border-radius: .3em;
50 | }
51 |
52 | .token.comment,
53 | .token.prolog,
54 | .token.doctype,
55 | .token.cdata {
56 | color: #797379;
57 | }
58 |
59 | .token.punctuation {
60 | color: #b9b5b8;
61 | }
62 |
63 | .namespace {
64 | opacity: .7;
65 | }
66 |
67 | .token.null,
68 | .token.operator,
69 | .token.boolean,
70 | .token.number {
71 | color: #fd8b19;
72 | }
73 |
74 | .token.property {
75 | color: #fdcc59;
76 | }
77 |
78 | .token.tag {
79 | color: #1290bf;
80 | }
81 |
82 | .token.string {
83 | color: #149b93;
84 | }
85 |
86 | .token.selector {
87 | color: #c85e7c;
88 | }
89 |
90 | .token.attr-name {
91 | color: #fd8b19;
92 | }
93 |
94 | .token.entity,
95 | .token.url,
96 | .language-css .token.string,
97 | .style .token.string {
98 | color: #149b93;
99 | }
100 |
101 | .token.attr-value,
102 | .token.keyword,
103 | .token.control,
104 | .token.directive,
105 | .token.unit {
106 | color: #8fc13e;
107 | }
108 |
109 | .token.statement,
110 | .token.regex,
111 | .token.atrule {
112 | color: #149b93;
113 | }
114 |
115 | .token.placeholder,
116 | .token.variable {
117 | color: #1290bf;
118 | }
119 |
120 | .token.important {
121 | color: #dd464c;
122 | font-weight: bold;
123 | }
124 |
125 | .token.entity {
126 | cursor: help;
127 | }
128 |
129 | pre > code.highlight {
130 | outline: .4em solid red;
131 | outline-offset: .4em;
132 | }
133 |
--------------------------------------------------------------------------------
/dist/code-themes/atom-dark.css:
--------------------------------------------------------------------------------
1 | /**
2 | * atom-dark theme for `prism.js`
3 | * Based on Atom's `atom-dark` theme: https://github.com/atom/atom-dark-syntax
4 | * @author Joe Gibson (@gibsjose)
5 | */
6 |
7 | code[class*="language-"],
8 | pre[class*="language-"] {
9 | color: #c5c8c6;
10 | text-shadow: 0 1px rgba(0, 0, 0, 0.3);
11 | font-family: Inconsolata, Monaco, Consolas, 'Courier New', Courier, monospace;
12 | direction: ltr;
13 | text-align: left;
14 | white-space: pre;
15 | word-spacing: normal;
16 | word-break: normal;
17 | line-height: 1.5;
18 |
19 | -moz-tab-size: 4;
20 | -o-tab-size: 4;
21 | tab-size: 4;
22 |
23 | -webkit-hyphens: none;
24 | -moz-hyphens: none;
25 | -ms-hyphens: none;
26 | hyphens: none;
27 | }
28 |
29 | /* Code blocks */
30 | pre[class*="language-"] {
31 | padding: 1em;
32 | margin: .5em 0;
33 | overflow: auto;
34 | border-radius: 0.3em;
35 | }
36 |
37 | :not(pre) > code[class*="language-"],
38 | pre[class*="language-"] {
39 | background: #1d1f21;
40 | }
41 |
42 | /* Inline code */
43 | :not(pre) > code[class*="language-"] {
44 | padding: .1em;
45 | border-radius: .3em;
46 | }
47 |
48 | .token.comment,
49 | .token.prolog,
50 | .token.doctype,
51 | .token.cdata {
52 | color: #7C7C7C;
53 | }
54 |
55 | .token.punctuation {
56 | color: #c5c8c6;
57 | }
58 |
59 | .namespace {
60 | opacity: .7;
61 | }
62 |
63 | .token.property,
64 | .token.keyword,
65 | .token.tag {
66 | color: #96CBFE;
67 | }
68 |
69 | .token.class-name {
70 | color: #FFFFB6;
71 | text-decoration: underline;
72 | }
73 |
74 | .token.boolean,
75 | .token.constant {
76 | color: #99CC99;
77 | }
78 |
79 | .token.symbol,
80 | .token.deleted {
81 | color: #f92672;
82 | }
83 |
84 | .token.number {
85 | color: #FF73FD;
86 | }
87 |
88 | .token.selector,
89 | .token.attr-name,
90 | .token.string,
91 | .token.char,
92 | .token.builtin,
93 | .token.inserted {
94 | color: #A8FF60;
95 | }
96 |
97 | .token.variable {
98 | color: #C6C5FE;
99 | }
100 |
101 | .token.operator {
102 | color: #EDEDED;
103 | }
104 |
105 | .token.entity {
106 | color: #FFFFB6;
107 | cursor: help;
108 | }
109 |
110 | .token.url {
111 | color: #96CBFE;
112 | }
113 |
114 | .language-css .token.string,
115 | .style .token.string {
116 | color: #87C38A;
117 | }
118 |
119 | .token.atrule,
120 | .token.attr-value {
121 | color: #F9EE98;
122 | }
123 |
124 | .token.function {
125 | color: #DAD085;
126 | }
127 |
128 | .token.regex {
129 | color: #E9C062;
130 | }
131 |
132 | .token.important {
133 | color: #fd971f;
134 | }
135 |
136 | .token.important,
137 | .token.bold {
138 | font-weight: bold;
139 | }
140 |
141 | .token.italic {
142 | font-style: italic;
143 | }
144 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-tut",
3 | "description": "Easily build beautiful tutorials with Vue",
4 | "version": "0.2.14",
5 | "main": "dist/vue-tut.umd.js",
6 | "module": "dist/vue-tut.esm.js",
7 | "unpkg": "dist/vue-tut.min.js",
8 | "browser": {
9 | "./sfc": "src/vue-tut.vue"
10 | },
11 | "license": "Apache-2.0",
12 | "author": {
13 | "name": "John Susek",
14 | "email": "john@johnsolo.net"
15 | },
16 | "bugs": {
17 | "url": "https://github.com/evwt/vue-tut/issues"
18 | },
19 | "homepage": "https://github.com/evwt/vue-tut",
20 | "repository": {
21 | "url": "https://github.com/evwt/vue-tut"
22 | },
23 | "keywords": [
24 | "vue",
25 | "tutorial",
26 | "documentation",
27 | "builder"
28 | ],
29 | "scripts": {
30 | "docs:vuese": "vuese gen",
31 | "docs:build": "./scripts/buildDocs.sh",
32 | "docs:watch": "nodemon --ignore docs/ --exec npm run docs:build -e scss,js,vue,md",
33 | "build": "npm run build:css & npm run docs:build & npm run build:umd & npm run build:es & npm run build:unpkg",
34 | "build:umd": "rollup --config build/rollup.config.js --format umd --file dist/vue-tut.umd.js",
35 | "build:es": "rollup --config build/rollup.config.js --format es --file dist/vue-tut.esm.js",
36 | "build:unpkg": "rollup --config build/rollup.config.js --format iife --file dist/vue-tut.min.js",
37 | "build:watch": "nodemon --ignore dist/ -e scss,js,vue --exec npm run build",
38 | "build:watch:css": "nodemon --ignore dist/ --exec ./scripts/buildThemes.sh",
39 | "build:css": "./scripts/buildThemes.sh"
40 | },
41 | "dependencies": {
42 | "core-js": "^3.6.5",
43 | "lodash": "^4.17.20",
44 | "prism-themes": "^1.4.0",
45 | "vue-intersect": "^1.1.6",
46 | "vue-prism-component": "^1.2.0",
47 | "vue-prism-editor": "^1.2.2",
48 | "webfontloader": "^1.6.28"
49 | },
50 | "devDependencies": {
51 | "@rollup/plugin-alias": "^3.1.1",
52 | "@rollup/plugin-buble": "^0.21.3",
53 | "@rollup/plugin-commonjs": "^15.0.0",
54 | "@rollup/plugin-node-resolve": "^9.0.0",
55 | "@vue/cli-plugin-babel": "~4.5.0",
56 | "@vue/cli-plugin-eslint": "~4.5.0",
57 | "@vue/cli-service": "~4.5.0",
58 | "@vue/eslint-config-airbnb": "^5.0.2",
59 | "babel-eslint": "^10.1.0",
60 | "eslint": "^6.7.2",
61 | "eslint-plugin-import": "^2.20.2",
62 | "eslint-plugin-vue": "^6.2.2",
63 | "rollup": "^2.26.4",
64 | "rollup-plugin-alias": "^2.2.0",
65 | "rollup-plugin-css-only": "^2.1.0",
66 | "rollup-plugin-postcss": "^3.1.5",
67 | "rollup-plugin-scss": "^2.6.0",
68 | "rollup-plugin-vue": "^5.1.9",
69 | "sass": "^1.26.5",
70 | "sass-loader": "^8.0.2",
71 | "vue": "2.6.11",
72 | "vue-template-compiler": "^2.6.11"
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/dist/code-themes/dark.css:
--------------------------------------------------------------------------------
1 | /**
2 | * prism.js Dark theme for JavaScript, CSS and HTML
3 | * Based on the slides of the talk “/Reg(exp){2}lained/”
4 | * @author Lea Verou
5 | */
6 |
7 | code[class*="language-"],
8 | pre[class*="language-"] {
9 | color: white;
10 | background: none;
11 | text-shadow: 0 -.1em .2em black;
12 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
13 | font-size: 1em;
14 | text-align: left;
15 | white-space: pre;
16 | word-spacing: normal;
17 | word-break: normal;
18 | word-wrap: normal;
19 | line-height: 1.5;
20 |
21 | -moz-tab-size: 4;
22 | -o-tab-size: 4;
23 | tab-size: 4;
24 |
25 | -webkit-hyphens: none;
26 | -moz-hyphens: none;
27 | -ms-hyphens: none;
28 | hyphens: none;
29 | }
30 |
31 | @media print {
32 | code[class*="language-"],
33 | pre[class*="language-"] {
34 | text-shadow: none;
35 | }
36 | }
37 |
38 | pre[class*="language-"],
39 | :not(pre) > code[class*="language-"] {
40 | background: hsl(30, 20%, 25%);
41 | }
42 |
43 | /* Code blocks */
44 | pre[class*="language-"] {
45 | padding: 1em;
46 | margin: .5em 0;
47 | overflow: auto;
48 | border: .3em solid hsl(30, 20%, 40%);
49 | border-radius: .5em;
50 | box-shadow: 1px 1px .5em black inset;
51 | }
52 |
53 | /* Inline code */
54 | :not(pre) > code[class*="language-"] {
55 | padding: .15em .2em .05em;
56 | border-radius: .3em;
57 | border: .13em solid hsl(30, 20%, 40%);
58 | box-shadow: 1px 1px .3em -.1em black inset;
59 | white-space: normal;
60 | }
61 |
62 | .token.comment,
63 | .token.prolog,
64 | .token.doctype,
65 | .token.cdata {
66 | color: hsl(30, 20%, 50%);
67 | }
68 |
69 | .token.punctuation {
70 | opacity: .7;
71 | }
72 |
73 | .token.namespace {
74 | opacity: .7;
75 | }
76 |
77 | .token.property,
78 | .token.tag,
79 | .token.boolean,
80 | .token.number,
81 | .token.constant,
82 | .token.symbol {
83 | color: hsl(350, 40%, 70%);
84 | }
85 |
86 | .token.selector,
87 | .token.attr-name,
88 | .token.string,
89 | .token.char,
90 | .token.builtin,
91 | .token.inserted {
92 | color: hsl(75, 70%, 60%);
93 | }
94 |
95 | .token.operator,
96 | .token.entity,
97 | .token.url,
98 | .language-css .token.string,
99 | .style .token.string,
100 | .token.variable {
101 | color: hsl(40, 90%, 60%);
102 | }
103 |
104 | .token.atrule,
105 | .token.attr-value,
106 | .token.keyword {
107 | color: hsl(350, 40%, 70%);
108 | }
109 |
110 | .token.regex,
111 | .token.important {
112 | color: #e90;
113 | }
114 |
115 | .token.important,
116 | .token.bold {
117 | font-weight: bold;
118 | }
119 | .token.italic {
120 | font-style: italic;
121 | }
122 |
123 | .token.entity {
124 | cursor: help;
125 | }
126 |
127 | .token.deleted {
128 | color: red;
129 | }
130 |
--------------------------------------------------------------------------------
/dist/code-themes/ghcolors.css:
--------------------------------------------------------------------------------
1 | /**
2 | * GHColors theme by Avi Aryan (http://aviaryan.in)
3 | * Inspired by Github syntax coloring
4 | */
5 |
6 | code[class*="language-"],
7 | pre[class*="language-"] {
8 | color: #393A34;
9 | font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;
10 | direction: ltr;
11 | text-align: left;
12 | white-space: pre;
13 | word-spacing: normal;
14 | word-break: normal;
15 | font-size: .9em;
16 | line-height: 1.2em;
17 |
18 | -moz-tab-size: 4;
19 | -o-tab-size: 4;
20 | tab-size: 4;
21 |
22 | -webkit-hyphens: none;
23 | -moz-hyphens: none;
24 | -ms-hyphens: none;
25 | hyphens: none;
26 | }
27 |
28 | pre > code[class*="language-"] {
29 | font-size: 1em;
30 | }
31 |
32 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
33 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
34 | background: #b3d4fc;
35 | }
36 |
37 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
38 | code[class*="language-"]::selection, code[class*="language-"] ::selection {
39 | background: #b3d4fc;
40 | }
41 |
42 | /* Code blocks */
43 | pre[class*="language-"] {
44 | padding: 1em;
45 | margin: .5em 0;
46 | overflow: auto;
47 | border: 1px solid #dddddd;
48 | background-color: white;
49 | }
50 |
51 | /* Inline code */
52 | :not(pre) > code[class*="language-"] {
53 | padding: .2em;
54 | padding-top: 1px;
55 | padding-bottom: 1px;
56 | background: #f8f8f8;
57 | border: 1px solid #dddddd;
58 | }
59 |
60 | .token.comment,
61 | .token.prolog,
62 | .token.doctype,
63 | .token.cdata {
64 | color: #999988;
65 | font-style: italic;
66 | }
67 |
68 | .token.namespace {
69 | opacity: .7;
70 | }
71 |
72 | .token.string,
73 | .token.attr-value {
74 | color: #e3116c;
75 | }
76 |
77 | .token.punctuation,
78 | .token.operator {
79 | color: #393A34; /* no highlight */
80 | }
81 |
82 | .token.entity,
83 | .token.url,
84 | .token.symbol,
85 | .token.number,
86 | .token.boolean,
87 | .token.variable,
88 | .token.constant,
89 | .token.property,
90 | .token.regex,
91 | .token.inserted {
92 | color: #36acaa;
93 | }
94 |
95 | .token.atrule,
96 | .token.keyword,
97 | .token.attr-name,
98 | .language-autohotkey .token.selector {
99 | color: #00a4db;
100 | }
101 |
102 | .token.function,
103 | .token.deleted,
104 | .language-autohotkey .token.tag {
105 | color: #9a050f;
106 | }
107 |
108 | .token.tag,
109 | .token.selector,
110 | .language-autohotkey .token.keyword {
111 | color: #00009f;
112 | }
113 |
114 | .token.important,
115 | .token.function,
116 | .token.bold {
117 | font-weight: bold;
118 | }
119 |
120 | .token.italic {
121 | font-style: italic;
122 | }
123 |
--------------------------------------------------------------------------------
/src/packages/TutorialSection/TutorialSection.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Section {{ index }}
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
97 |
--------------------------------------------------------------------------------
/dist/code-themes/prism.css:
--------------------------------------------------------------------------------
1 | /**
2 | * prism.js default theme for JavaScript, CSS and HTML
3 | * Based on dabblet (http://dabblet.com)
4 | * @author Lea Verou
5 | */
6 |
7 | code[class*="language-"],
8 | pre[class*="language-"] {
9 | color: black;
10 | background: none;
11 | text-shadow: 0 1px white;
12 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
13 | font-size: 1em;
14 | text-align: left;
15 | white-space: pre;
16 | word-spacing: normal;
17 | word-break: normal;
18 | word-wrap: normal;
19 | line-height: 1.5;
20 |
21 | -moz-tab-size: 4;
22 | -o-tab-size: 4;
23 | tab-size: 4;
24 |
25 | -webkit-hyphens: none;
26 | -moz-hyphens: none;
27 | -ms-hyphens: none;
28 | hyphens: none;
29 | }
30 |
31 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
32 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
33 | text-shadow: none;
34 | background: #b3d4fc;
35 | }
36 |
37 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
38 | code[class*="language-"]::selection, code[class*="language-"] ::selection {
39 | text-shadow: none;
40 | background: #b3d4fc;
41 | }
42 |
43 | @media print {
44 | code[class*="language-"],
45 | pre[class*="language-"] {
46 | text-shadow: none;
47 | }
48 | }
49 |
50 | /* Code blocks */
51 | pre[class*="language-"] {
52 | padding: 1em;
53 | margin: .5em 0;
54 | overflow: auto;
55 | }
56 |
57 | :not(pre) > code[class*="language-"],
58 | pre[class*="language-"] {
59 | background: #f5f2f0;
60 | }
61 |
62 | /* Inline code */
63 | :not(pre) > code[class*="language-"] {
64 | padding: .1em;
65 | border-radius: .3em;
66 | white-space: normal;
67 | }
68 |
69 | .token.comment,
70 | .token.prolog,
71 | .token.doctype,
72 | .token.cdata {
73 | color: slategray;
74 | }
75 |
76 | .token.punctuation {
77 | color: #999;
78 | }
79 |
80 | .token.namespace {
81 | opacity: .7;
82 | }
83 |
84 | .token.property,
85 | .token.tag,
86 | .token.boolean,
87 | .token.number,
88 | .token.constant,
89 | .token.symbol,
90 | .token.deleted {
91 | color: #905;
92 | }
93 |
94 | .token.selector,
95 | .token.attr-name,
96 | .token.string,
97 | .token.char,
98 | .token.builtin,
99 | .token.inserted {
100 | color: #690;
101 | }
102 |
103 | .token.operator,
104 | .token.entity,
105 | .token.url,
106 | .language-css .token.string,
107 | .style .token.string {
108 | color: #9a6e3a;
109 | /* This background color was intended by the author of this theme. */
110 | background: hsla(0, 0%, 100%, .5);
111 | }
112 |
113 | .token.atrule,
114 | .token.attr-value,
115 | .token.keyword {
116 | color: #07a;
117 | }
118 |
119 | .token.function,
120 | .token.class-name {
121 | color: #DD4A68;
122 | }
123 |
124 | .token.regex,
125 | .token.important,
126 | .token.variable {
127 | color: #e90;
128 | }
129 |
130 | .token.important,
131 | .token.bold {
132 | font-weight: bold;
133 | }
134 | .token.italic {
135 | font-style: italic;
136 | }
137 |
138 | .token.entity {
139 | cursor: help;
140 | }
141 |
--------------------------------------------------------------------------------
/dist/code-themes/funky.css:
--------------------------------------------------------------------------------
1 | /**
2 | * prism.js Funky theme
3 | * Based on “Polyfilling the gaps” talk slides http://lea.verou.me/polyfilling-the-gaps/
4 | * @author Lea Verou
5 | */
6 |
7 | code[class*="language-"],
8 | pre[class*="language-"] {
9 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
10 | font-size: 1em;
11 | text-align: left;
12 | white-space: pre;
13 | word-spacing: normal;
14 | word-break: normal;
15 | word-wrap: normal;
16 | line-height: 1.5;
17 |
18 | -moz-tab-size: 4;
19 | -o-tab-size: 4;
20 | tab-size: 4;
21 |
22 | -webkit-hyphens: none;
23 | -moz-hyphens: none;
24 | -ms-hyphens: none;
25 | hyphens: none;
26 | }
27 |
28 | /* Code blocks */
29 | pre[class*="language-"] {
30 | padding: .4em .8em;
31 | margin: .5em 0;
32 | overflow: auto;
33 | background: url('data:image/svg+xml;charset=utf-8,