├── .gitignore ├── .gitmodules ├── README.md ├── gatsbyjs ├── .gitignore ├── .prettierignore ├── .prettierrc ├── LICENSE ├── README.md ├── gatsby-browser.js ├── gatsby-config.js ├── gatsby-node.js ├── gatsby-ssr.js ├── package-lock.json ├── package.json ├── sandbox.config.json ├── src │ ├── components │ │ ├── Feature.js │ │ ├── Grid.js │ │ ├── Layout.js │ │ ├── Teaser.js │ │ └── seo.js │ ├── images │ │ ├── example.png │ │ └── gatsby-icon.png │ ├── pages │ │ ├── 404.js │ │ ├── home.js │ │ ├── index.js │ │ ├── page-2.js │ │ ├── using-ssr.js │ │ └── using-typescript.tsx │ ├── styles │ │ └── global.css │ └── templates │ │ └── using-dsg.js └── tailwind.config.js ├── nuxtjs ├── README.md ├── components │ └── storyblok │ │ ├── Feature.vue │ │ ├── Grid.vue │ │ ├── Page.vue │ │ └── Teaser.vue ├── nuxt.config.js ├── package-lock.json ├── package.json ├── pages │ └── index.vue └── static │ └── favicon.ico ├── package-lock.json ├── package.json ├── remix ├── .eslintrc.js ├── .gitignore ├── README.md ├── app │ ├── components │ │ ├── Feature.jsx │ │ ├── Grid.jsx │ │ ├── Layout.jsx │ │ ├── Page.jsx │ │ └── Teaser.jsx │ ├── entry.client.jsx │ ├── entry.server.jsx │ ├── root.jsx │ └── routes │ │ ├── home.jsx │ │ └── index.jsx ├── package-lock.json ├── package.json ├── public │ └── favicon.ico ├── remix.config.js └── tsconfig.json └── vuejs ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── src ├── App.vue ├── components │ ├── Feature.vue │ ├── Grid.vue │ ├── Page.vue │ └── Teaser.vue ├── main.js └── pages │ └── Home.vue └── vite.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Node template 3 | # Logs 4 | /logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | 10 | # Runtime data 11 | pids 12 | *.pid 13 | *.seed 14 | *.pid.lock 15 | 16 | # Directory for instrumented libs generated by jscoverage/JSCover 17 | lib-cov 18 | 19 | # Coverage directory used by tools like istanbul 20 | coverage 21 | 22 | # nyc test coverage 23 | .nyc_output 24 | 25 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 26 | .grunt 27 | 28 | # Bower dependency directory (https://bower.io/) 29 | bower_components 30 | 31 | # node-waf configuration 32 | .lock-wscript 33 | 34 | # Compiled binary addons (https://nodejs.org/api/addons.html) 35 | build/Release 36 | 37 | # Dependency directories 38 | node_modules/ 39 | jspm_packages/ 40 | 41 | # TypeScript v1 declaration files 42 | typings/ 43 | 44 | # Optional npm cache directory 45 | .npm 46 | 47 | # Optional eslint cache 48 | .eslintcache 49 | 50 | # Optional REPL history 51 | .node_repl_history 52 | 53 | # Output of 'npm pack' 54 | *.tgz 55 | 56 | # Yarn Integrity file 57 | .yarn-integrity 58 | 59 | # dotenv environment variables file 60 | .env 61 | 62 | # parcel-bundler cache (https://parceljs.org/) 63 | .cache 64 | 65 | # next.js build output 66 | .next 67 | 68 | # nuxt.js build output 69 | .nuxt 70 | 71 | # Nuxt generate 72 | dist 73 | 74 | # vuepress build output 75 | .vuepress/dist 76 | 77 | # sveltekit build output 78 | .svelte-kit 79 | 80 | # Serverless directories 81 | .serverless 82 | 83 | # IDE / Editor 84 | .idea 85 | 86 | # Service worker 87 | sw.* 88 | 89 | # macOS 90 | .DS_Store 91 | 92 | # Vim swap files 93 | *.swp 94 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "sveltekit"] 2 | path = sveltekit 3 | url = https://github.com/storyblok/sveltekit-ultimate-tutorial-series.git 4 | branch = part-1-sveltekit-ut 5 | [submodule "nuxtjs-3"] 6 | path = nuxtjs-3 7 | url = https://github.com/storyblok/nuxt-ultimate-tutorial.git 8 | branch = part-1 9 | [submodule "reactjs"] 10 | path = reactjs 11 | url = https://github.com/storyblok/storyblok-react-boilerplate.git 12 | branch = master 13 | [submodule "nextjs"] 14 | path = nextjs 15 | url = https://github.com/storyblok/next.js-ultimate-tutorial.git 16 | branch = part-1 17 | [submodule "astro"] 18 | path = astro 19 | url = https://github.com/storyblok/astro-ultimate-tutorial.git 20 | branch = part-1 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ⛔️ DEPRECATED: Getting Started 2 | [![No Maintenance Intended](http://unmaintained.tech/badge.svg)](http://unmaintained.tech/) 3 | 4 | This project has been deprecated in favor of the [Storyblok Technologies](https://www.storyblok.com/technologies) page, allowing you to kickstart a new project within minutes. 5 | ___ 6 | 7 | > Repository of the Getting Started (Hello World) projects built with Storyblok and various frontend frameworks. 8 | 9 | Follow the instruction on [Storyblok Getting Started Page](https://www.storyblok.com/docs/guide/getting-started) to correctly configure your space and understand the basics of headless CMS approach. 10 | 11 | **Our Getting Started covers following frameworks:** 12 | 13 | - Next.js 14 | - Gatsby.js 15 | - Nuxt 2 16 | - Nuxt 3 17 | - React 18 | - SvelteKit 19 | - Remix 20 | - Vue js 21 | 22 | 23 | ## Submodules Scaffolding 24 | 25 | To get the code from the submodules, run the following command 26 | 27 | ``` 28 | npm run prepare 29 | ``` 30 | 31 | ### Resources 32 | 33 | Visit our technology hubs for more tutorials and videos how to use Storyblok together with your favorite technology. 34 | 35 | - [Next.js Hub](https://www.storyblok.com/tc/nextjs) 36 | - [Gatsby.js Hub](https://www.storyblok.com/tc/gatsbyjs) 37 | - [Nuxt Hub](https://www.storyblok.com/tc/nuxtjs) 38 | - [React Hub](https://www.storyblok.com/tc/react) 39 | - For other languages/frameworks check the tutorial on our [technology page overview](https://www.storyblok.com/technologies) 40 | -------------------------------------------------------------------------------- /gatsbyjs/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # dotenv environment variable files 55 | .env* 56 | 57 | # gatsby files 58 | .cache/ 59 | public 60 | 61 | # Mac files 62 | .DS_Store 63 | 64 | # Yarn 65 | yarn-error.log 66 | .pnp/ 67 | .pnp.js 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | -------------------------------------------------------------------------------- /gatsbyjs/.prettierignore: -------------------------------------------------------------------------------- 1 | .cache 2 | package.json 3 | package-lock.json 4 | public 5 | -------------------------------------------------------------------------------- /gatsbyjs/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "semi": false 4 | } 5 | -------------------------------------------------------------------------------- /gatsbyjs/LICENSE: -------------------------------------------------------------------------------- 1 | The BSD Zero Clause License (0BSD) 2 | 3 | Copyright (c) 2020 Gatsby Inc. 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 9 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 10 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 11 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 12 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 13 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14 | PERFORMANCE OF THIS SOFTWARE. 15 | -------------------------------------------------------------------------------- /gatsbyjs/README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Gatsby 4 | 5 |

6 |

7 | Gatsby minimal starter 8 |

9 | 10 | ## 🚀 Quick start 11 | 12 | 1. **Create a Gatsby site.** 13 | 14 | Use the Gatsby CLI to create a new site, specifying the minimal starter. 15 | 16 | ```shell 17 | # create a new Gatsby site using the minimal starter 18 | npm init gatsby 19 | ``` 20 | 21 | 2. **Start developing.** 22 | 23 | Navigate into your new site’s directory and start it up. 24 | 25 | ```shell 26 | cd my-gatsby-site/ 27 | npm run develop 28 | ``` 29 | 30 | 3. **Open the code and start customizing!** 31 | 32 | Your site is now running at http://localhost:8000! 33 | 34 | Edit `src/pages/index.js` to see your site update in real-time! 35 | 36 | 4. **Learn more** 37 | 38 | - [Documentation](https://www.gatsbyjs.com/docs/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter) 39 | 40 | - [Tutorials](https://www.gatsbyjs.com/tutorial/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter) 41 | 42 | - [Guides](https://www.gatsbyjs.com/tutorial/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter) 43 | 44 | - [API Reference](https://www.gatsbyjs.com/docs/api-reference/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter) 45 | 46 | - [Plugin Library](https://www.gatsbyjs.com/plugins?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter) 47 | 48 | - [Cheat Sheet](https://www.gatsbyjs.com/docs/cheat-sheet/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter) 49 | -------------------------------------------------------------------------------- /gatsbyjs/gatsby-browser.js: -------------------------------------------------------------------------------- 1 | import './src/styles/global.css' -------------------------------------------------------------------------------- /gatsbyjs/gatsby-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | siteMetadata: { 3 | title: `Gatsby Default Starter`, 4 | description: `Kick off your next, great Gatsby project with this default starter. This barebones starter ships with the main Gatsby configuration files you might need.`, 5 | author: `@gatsbyjs`, 6 | siteUrl: `https://gatsbystarterdefaultsource.gatsbyjs.io/`, 7 | }, 8 | plugins: [ 9 | 'gatsby-plugin-postcss', 10 | `gatsby-plugin-react-helmet`, 11 | `gatsby-plugin-image`, 12 | { 13 | resolve: `gatsby-source-filesystem`, 14 | options: { 15 | name: `images`, 16 | path: `${__dirname}/src/images`, 17 | }, 18 | }, 19 | `gatsby-transformer-sharp`, 20 | `gatsby-plugin-sharp`, 21 | { 22 | resolve: `gatsby-plugin-manifest`, 23 | options: { 24 | name: `gatsby-starter-default`, 25 | short_name: `starter`, 26 | start_url: `/`, 27 | background_color: `#663399`, 28 | // This will impact how browsers show your PWA/website 29 | // https://css-tricks.com/meta-theme-color-and-trickery/ 30 | // theme_color: `#663399`, 31 | display: `minimal-ui`, 32 | icon: `src/images/gatsby-icon.png`, // This path is relative to the root of the site. 33 | }, 34 | }, 35 | { 36 | resolve: 'gatsby-source-storyblok', 37 | options: { 38 | accessToken: 'd6IKUtAUDiKyAhpJtrLFcwtt', 39 | region: '', 40 | version: process.env.NODE_ENV === 'production' ? 'published' : 'draft', 41 | localAssets: true, // Optional parameter to download the images to use with Gatsby Image Plugin 42 | // languages: ['de', 'at'] // Optional parameter. Omission will retrieve all languages by default. 43 | } 44 | }, 45 | // this (optional) plugin enables Progressive Web App + Offline functionality 46 | // To learn more, visit: https://gatsby.dev/offline 47 | // `gatsby-plugin-offline`, 48 | ], 49 | } 50 | -------------------------------------------------------------------------------- /gatsbyjs/gatsby-node.js: -------------------------------------------------------------------------------- 1 | exports.createPages = async ({ actions }) => { 2 | const { createPage } = actions 3 | createPage({ 4 | path: "/using-dsg", 5 | component: require.resolve("./src/templates/using-dsg.js"), 6 | context: {}, 7 | defer: true, 8 | }) 9 | } 10 | -------------------------------------------------------------------------------- /gatsbyjs/gatsby-ssr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Implement Gatsby's SSR (Server Side Rendering) APIs in this file. 3 | * 4 | * See: https://www.gatsbyjs.com/docs/ssr-apis/ 5 | */ 6 | 7 | // You can delete this file if you're not using it 8 | -------------------------------------------------------------------------------- /gatsbyjs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gatsby-starter-default", 3 | "private": true, 4 | "description": "A simple starter to get up and developing quickly with Gatsby", 5 | "version": "0.1.0", 6 | "author": "Kyle Mathews ", 7 | "dependencies": { 8 | "gatsby": "^4.15.2", 9 | "gatsby-plugin-gatsby-cloud": "^4.15.0", 10 | "gatsby-plugin-image": "^2.15.1", 11 | "gatsby-plugin-manifest": "^4.15.1", 12 | "gatsby-plugin-offline": "^5.15.1", 13 | "gatsby-plugin-react-helmet": "^5.15.0", 14 | "gatsby-plugin-sharp": "^4.15.1", 15 | "gatsby-source-filesystem": "^4.15.0", 16 | "gatsby-source-storyblok": "^4.0.1", 17 | "gatsby-transformer-sharp": "^4.15.1", 18 | "prop-types": "^15.8.1", 19 | "react": "^18.1.0", 20 | "react-dom": "^18.1.0", 21 | "react-helmet": "^6.1.0" 22 | }, 23 | "devDependencies": { 24 | "autoprefixer": "^10.4.7", 25 | "gatsby-plugin-postcss": "^5.16.0", 26 | "postcss": "^8.4.14", 27 | "prettier": "^2.6.2", 28 | "tailwindcss": "^3.0.24" 29 | }, 30 | "keywords": [ 31 | "gatsby" 32 | ], 33 | "license": "0BSD", 34 | "scripts": { 35 | "build": "gatsby build", 36 | "develop": "ENABLE_GATSBY_REFRESH_ENDPOINT=true gatsby develop", 37 | "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md,css}\"", 38 | "start": "gatsby develop", 39 | "serve": "gatsby serve", 40 | "clean": "gatsby clean", 41 | "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1" 42 | }, 43 | "repository": { 44 | "type": "git", 45 | "url": "https://github.com/gatsbyjs/gatsby-starter-default" 46 | }, 47 | "bugs": { 48 | "url": "https://github.com/gatsbyjs/gatsby/issues" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /gatsbyjs/sandbox.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "container": { 3 | "port": 8000 4 | } 5 | } -------------------------------------------------------------------------------- /gatsbyjs/src/components/Feature.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { storyblokEditable } from "gatsby-source-storyblok"; 3 | 4 | const Feature = ({ blok }) => { 5 | return ( 6 |
7 |

{blok.name}

8 |

{blok.description}

9 |
10 | ); 11 | }; 12 | 13 | export default Feature; -------------------------------------------------------------------------------- /gatsbyjs/src/components/Grid.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { StoryblokComponent, storyblokEditable } from "gatsby-source-storyblok"; 3 | 4 | const Grid = ({ blok }) => ( 5 | 12 | ); 13 | 14 | export default Grid; -------------------------------------------------------------------------------- /gatsbyjs/src/components/Layout.js: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import PropTypes from "prop-types" 3 | import { storyblokInit, apiPlugin } from "gatsby-source-storyblok" 4 | import Teaser from './Teaser' 5 | import configuration from '../../gatsby-config' 6 | import Grid from "./grid" 7 | import Feature from "./feature" 8 | 9 | const sbConfig = configuration.plugins.find((item) => item.resolve === 'gatsby-source-storyblok') 10 | 11 | storyblokInit({ 12 | accessToken: sbConfig.options.accessToken, 13 | use: [apiPlugin], 14 | components: { 15 | teaser: Teaser, 16 | grid: Grid, 17 | feature: Feature 18 | }, 19 | apiOptions: { 20 | region: sbConfig.options.region 21 | } 22 | }); 23 | 24 | const Layout = ({ children }) => { 25 | return ( 26 |
27 |
{children}
28 |
29 | ) 30 | } 31 | 32 | Layout.propTypes = { 33 | children: PropTypes.node.isRequired, 34 | } 35 | 36 | export default Layout 37 | -------------------------------------------------------------------------------- /gatsbyjs/src/components/Teaser.js: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import { storyblokEditable } from "gatsby-source-storyblok"; 3 | 4 | const Teaser = ({ blok }) => { 5 | return ( 6 |
7 |

{blok.headline}

8 |
9 | ) 10 | } 11 | 12 | export default Teaser -------------------------------------------------------------------------------- /gatsbyjs/src/components/seo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SEO component that queries for data with 3 | * Gatsby's useStaticQuery React hook 4 | * 5 | * See: https://www.gatsbyjs.com/docs/use-static-query/ 6 | */ 7 | 8 | import * as React from "react" 9 | import PropTypes from "prop-types" 10 | import { Helmet } from "react-helmet" 11 | import { useStaticQuery, graphql } from "gatsby" 12 | 13 | function Seo({ description, lang, meta, title }) { 14 | const { site } = useStaticQuery( 15 | graphql` 16 | query { 17 | site { 18 | siteMetadata { 19 | title 20 | description 21 | author 22 | } 23 | } 24 | } 25 | ` 26 | ) 27 | 28 | const metaDescription = description || site.siteMetadata.description 29 | const defaultTitle = site.siteMetadata?.title 30 | 31 | return ( 32 | 73 | ) 74 | } 75 | 76 | Seo.defaultProps = { 77 | lang: `en`, 78 | meta: [], 79 | description: ``, 80 | } 81 | 82 | Seo.propTypes = { 83 | description: PropTypes.string, 84 | lang: PropTypes.string, 85 | meta: PropTypes.arrayOf(PropTypes.object), 86 | title: PropTypes.string.isRequired, 87 | } 88 | 89 | export default Seo 90 | -------------------------------------------------------------------------------- /gatsbyjs/src/images/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/storyblok/getting-started/4704029ba0f22ee8f6806ab250f774f708c0cab6/gatsbyjs/src/images/example.png -------------------------------------------------------------------------------- /gatsbyjs/src/images/gatsby-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/storyblok/getting-started/4704029ba0f22ee8f6806ab250f774f708c0cab6/gatsbyjs/src/images/gatsby-icon.png -------------------------------------------------------------------------------- /gatsbyjs/src/pages/404.js: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import Layout from "../components/layout" 4 | 5 | const NotFoundPage = () => ( 6 | 7 |

404: Not Found

8 |

You just hit a route that doesn't exist... the sadness.

9 |
10 | ) 11 | 12 | export default NotFoundPage -------------------------------------------------------------------------------- /gatsbyjs/src/pages/home.js: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import { graphql } from "gatsby" 3 | 4 | import { StoryblokComponent, storyblokEditable, useStoryblokState } from "gatsby-source-storyblok" 5 | 6 | import Layout from "../components/Layout" 7 | 8 | const IndexPage = ({ data }) => { 9 | let story = data.storyblokEntry 10 | story = useStoryblokState(story) 11 | 12 | const components = story.content.body.map(blok => ()) 13 | 14 | return ( 15 | 16 |
17 |

{story.name}

18 | {components} 19 |
20 |
21 | ) 22 | } 23 | 24 | export default IndexPage 25 | 26 | export const query = graphql` 27 | query HomeQuery { 28 | storyblokEntry(full_slug: { eq: "home" }) { 29 | content 30 | name 31 | full_slug 32 | uuid 33 | id 34 | internalId 35 | } 36 | } 37 | ` -------------------------------------------------------------------------------- /gatsbyjs/src/pages/index.js: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import { graphql } from "gatsby" 3 | 4 | import { StoryblokComponent, storyblokEditable, useStoryblokState } from "gatsby-source-storyblok" 5 | 6 | import Layout from "../components/layout" 7 | 8 | const IndexPage = ({ data }) => { 9 | let story = data.storyblokEntry 10 | story = useStoryblokState(story) 11 | 12 | const components = story.content.body.map(blok => ()) 13 | 14 | return ( 15 | 16 |
17 |

{story.name}

18 | {components} 19 |
20 |
21 | ) 22 | } 23 | 24 | export default IndexPage 25 | 26 | export const query = graphql` 27 | query HomeQuery { 28 | storyblokEntry(full_slug: { eq: "home" }) { 29 | content 30 | name 31 | full_slug 32 | uuid 33 | id 34 | internalId 35 | } 36 | } 37 | ` -------------------------------------------------------------------------------- /gatsbyjs/src/pages/page-2.js: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import { Link } from "gatsby" 3 | 4 | import Layout from "../components/layout" 5 | import Seo from "../components/seo" 6 | 7 | const SecondPage = () => ( 8 | 9 | 10 |

Hi from the second page

11 |

Welcome to page 2

12 | Go back to the homepage 13 |
14 | ) 15 | 16 | export default SecondPage 17 | -------------------------------------------------------------------------------- /gatsbyjs/src/pages/using-ssr.js: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import { Link } from "gatsby" 3 | 4 | import Layout from "../components/layout" 5 | import Seo from "../components/seo" 6 | 7 | const UsingSSR = ({ serverData }) => { 8 | return ( 9 | 10 | 11 |

12 | This page is rendered server-side 13 |

14 |

15 | This page is rendered server side every time the page is requested. 16 | Reload it to see a(nother) random photo from{" "} 17 | dog.ceo/api/breed/shiba/images/random: 18 |

19 | A random dog 24 |

25 | To learn more, head over to our{" "} 26 | 27 | documentation about Server Side Rendering 28 | 29 | . 30 |

31 | Go back to the homepage 32 |
33 | ) 34 | } 35 | 36 | export default UsingSSR 37 | 38 | export async function getServerData() { 39 | try { 40 | const res = await fetch(`https://dog.ceo/api/breed/shiba/images/random`) 41 | if (!res.ok) { 42 | throw new Error(`Response failed`) 43 | } 44 | return { 45 | props: await res.json(), 46 | } 47 | } catch (error) { 48 | return { 49 | status: 500, 50 | headers: {}, 51 | props: {}, 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /gatsbyjs/src/pages/using-typescript.tsx: -------------------------------------------------------------------------------- 1 | // If you don't want to use TypeScript you can delete this file! 2 | import * as React from "react" 3 | import { PageProps, Link, graphql } from "gatsby" 4 | 5 | import Layout from "../components/layout" 6 | import Seo from "../components/seo" 7 | 8 | type DataProps = { 9 | site: { 10 | buildTime: string 11 | } 12 | } 13 | 14 | const UsingTypescript: React.FC> = ({ 15 | data, 16 | location, 17 | }) => ( 18 | 19 | 20 |

21 | Gatsby supports TypeScript by default 22 |

23 |

24 | This means that you can create and write .ts/.tsx files for 25 | your pages, components, and gatsby-* configuration files (for 26 | example gatsby-config.ts). 27 |

28 |

29 | For type checking you'll want to install typescript via npm 30 | and run tsc --init to create a tsconfig file. 31 |

32 |

33 | You're currently on the page {location.pathname} which was 34 | built on {data.site.buildTime}. 35 |

36 |

37 | To learn more, head over to our{" "} 38 | 39 | documentation about TypeScript 40 | 41 | . 42 |

43 | Go back to the homepage 44 |
45 | ) 46 | 47 | export default UsingTypescript 48 | 49 | export const query = graphql` 50 | { 51 | site { 52 | buildTime(formatString: "YYYY-MM-DD hh:mm a z") 53 | } 54 | } 55 | ` 56 | -------------------------------------------------------------------------------- /gatsbyjs/src/styles/global.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /gatsbyjs/src/templates/using-dsg.js: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import { Link } from "gatsby" 3 | 4 | import Layout from "../components/layout" 5 | 6 | const UsingDSG = () => ( 7 | 8 |

9 | Hello from a DSG Page 10 |

11 |

This page is not created until requested by a user.

12 |

13 | To learn more, head over to our{" "} 14 | 15 | documentation about Deferred Static Generation 16 | 17 | . 18 |

19 | Go back to the homepage 20 |
21 | ) 22 | 23 | export default UsingDSG 24 | -------------------------------------------------------------------------------- /gatsbyjs/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: [ 3 | "./src/**/*.{js,jsx,ts,tsx}", 4 | ], 5 | theme: { 6 | extend: {}, 7 | }, 8 | plugins: [], 9 | } 10 | -------------------------------------------------------------------------------- /nuxtjs/README.md: -------------------------------------------------------------------------------- 1 | # Getting Started - Nuxt 2 edition 2 | 3 | This is an example `Hello World` project built with Storyblok and Nuxt 2. 4 | 5 | > To get better understanding of this project and how it works, read our [Getting Started guide](https://www.storyblok.com/docs/guide/getting-started). 6 | 7 | ## Stackblitz 8 | 9 | [Storyblok SDK for Nuxt 2 Demo](https://stackblitz.com/edit/nuxt-2-sdk-demo) 10 | 11 | 12 | ## Configuration Steps 13 | 14 | 1. Create new Space in Storyblok 15 | 2. Obtain the Preview Token from the Settings of the Space. 16 | 3. Replace the `accessToken` value in `nuxt.config.js` file with your Preview Token. 17 | 4. Your Nuxt project can be started and will consume data from your Storyblok Space. 18 | 19 | > For a more detailed article on how to integrate Storyblok in Nuxt, check out [Add a headless CMS to Nuxt in 5 minutes](https://www.storyblok.com/tp/headless-cms-nuxtjs). 20 | 21 | ## Build Setup 22 | 23 | ```bash 24 | # install dependencies 25 | $ npm install 26 | 27 | # serve with hot reload at localhost:3000 28 | $ npm run dev 29 | 30 | # build for production 31 | $ npm run build 32 | ``` 33 | 34 | > For detailed explanation on how Nuxt works, check out the [Nuxt docs](https://nuxtjs.org/docs/get-started/installation). -------------------------------------------------------------------------------- /nuxtjs/components/storyblok/Feature.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /nuxtjs/components/storyblok/Grid.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 17 | -------------------------------------------------------------------------------- /nuxtjs/components/storyblok/Page.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /nuxtjs/components/storyblok/Teaser.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /nuxtjs/nuxt.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | head: { 3 | title: 'playground', 4 | htmlAttrs: { 5 | lang: 'en', 6 | }, 7 | meta: [ 8 | { charset: 'utf-8' }, 9 | { name: 'viewport', content: 'width=device-width, initial-scale=1' }, 10 | { hid: 'description', name: 'description', content: '' }, 11 | { name: 'format-detection', content: 'telephone=no' }, 12 | ], 13 | link: [{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }], 14 | script: [{ src: 'https://cdn.tailwindcss.com' }], 15 | }, 16 | 17 | buildModules: [ 18 | ['@storyblok/nuxt-2/module', { accessToken: 'd6IKUtAUDiKyAhpJtrLFcwtt', 19 | apiOptions: { 20 | region: '' 21 | } 22 | }], 23 | ], 24 | }; 25 | -------------------------------------------------------------------------------- /nuxtjs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nuxt-2-getting-started", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "nuxt", 7 | "build": "nuxt build", 8 | "start": "nuxt start", 9 | "generate": "nuxt generate" 10 | }, 11 | "devDependencies": { 12 | "@storyblok/nuxt-2": "^1.2.2", 13 | "axios": "^0.26.0", 14 | "core-js": "^3.25.2", 15 | "nuxt": "^2.15.8" 16 | } 17 | } -------------------------------------------------------------------------------- /nuxtjs/pages/index.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 11 | -------------------------------------------------------------------------------- /nuxtjs/static/favicon.ico: -------------------------------------------------------------------------------- 1 | https://cdn.jsdelivr.net/gh/manuelschroederdev/nuxt-5-min-demo@df9367b0917de7f1e9ebd757e71b81f6b210832c/static/favicon.ico -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "getting-started", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "getting-started", 9 | "version": "1.0.0", 10 | "license": "ISC" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "getting-started", 3 | "version": "1.0.0", 4 | "description": "framework demos for storyblok", 5 | "main": "index.js", 6 | "scripts": { 7 | "prepare": "git submodule update --init --recursive --remote" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/storyblok/getting-started.git" 12 | }, 13 | "author": "", 14 | "license": "ISC", 15 | "bugs": { 16 | "url": "https://github.com/storyblok/getting-started/issues" 17 | }, 18 | "homepage": "https://github.com/storyblok/getting-started#readme" 19 | } 20 | -------------------------------------------------------------------------------- /remix/.eslintrc.js: -------------------------------------------------------------------------------- 1 | /** @type {import('eslint').Linter.Config} */ 2 | module.exports = { 3 | extends: ["@remix-run/eslint-config", "@remix-run/eslint-config/node"], 4 | }; 5 | -------------------------------------------------------------------------------- /remix/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /.cache 4 | /build 5 | /public/build 6 | .env 7 | -------------------------------------------------------------------------------- /remix/README.md: -------------------------------------------------------------------------------- 1 | # Getting Started - Remix edition 2 | 3 | This is a `Hello World` example project built with Storyblok and Remix. 4 | 5 | > To get better understanding of this project and how it works, read our [Getting Started guide](https://www.storyblok.com/docs/guide/getting-started/?utm_source=github.com&utm_medium=readme&utm_campaign=getting-started). 6 | 7 | ## Configuration Steps 8 | 9 | 1. [Create a new Space](https://app.storyblok.com/#!/me/spaces/new) in Storyblok 10 | 2. Obtain a Preview Token from the Settings of the Space. 11 | 3. Replace the `accessToken` value in the `app/root.jsx` file with your Preview Token. 12 | 4. You can start a Dev Server with your Remix project, and it will consume data from your Storyblok Space. 13 | 14 | > For a more advanced article, check [Add a headless CMS to Remix in 5 minutes](https://www.storyblok.com/tp/headless-cms-remix/?utm_source=github.com&utm_medium=readme&utm_campaign=getting-started). 15 | 16 | ## Learn More 17 | 18 | To learn more about Remix, take a look at the [Remix Documentation](https://remix.run/docs). 19 | -------------------------------------------------------------------------------- /remix/app/components/Feature.jsx: -------------------------------------------------------------------------------- 1 | import { storyblokEditable } from "@storyblok/react"; 2 | 3 | const Feature = ({ blok }) => { 4 | return ( 5 |
6 |

{blok.name}

7 |
8 | ); 9 | }; 10 | 11 | export default Feature; 12 | -------------------------------------------------------------------------------- /remix/app/components/Grid.jsx: -------------------------------------------------------------------------------- 1 | import { storyblokEditable, StoryblokComponent } from "@storyblok/react"; 2 | 3 | const Grid = ({ blok }) => ( 4 |
    5 | {blok.columns.map((blok) => ( 6 |
  • 7 | 8 |
  • 9 | ))} 10 |
11 | ); 12 | 13 | export default Grid; 14 | -------------------------------------------------------------------------------- /remix/app/components/Layout.jsx: -------------------------------------------------------------------------------- 1 | const Layout = ({ children }) => ( 2 |
3 |
{children}
4 |
5 | ); 6 | 7 | export default Layout; 8 | -------------------------------------------------------------------------------- /remix/app/components/Page.jsx: -------------------------------------------------------------------------------- 1 | import { storyblokEditable, StoryblokComponent } from "@storyblok/react"; 2 | 3 | const Page = ({ blok }) => ( 4 |
5 | {blok.body.map((nestedBlok) => ( 6 | 7 | ))} 8 |
9 | ); 10 | 11 | export default Page; 12 | -------------------------------------------------------------------------------- /remix/app/components/Teaser.jsx: -------------------------------------------------------------------------------- 1 | import { storyblokEditable } from "@storyblok/react"; 2 | 3 | const Teaser = ({ blok }) => { 4 | return ( 5 |
6 |

{blok.headline}

7 |
8 | ); 9 | }; 10 | 11 | export default Teaser; 12 | -------------------------------------------------------------------------------- /remix/app/entry.client.jsx: -------------------------------------------------------------------------------- 1 | import { RemixBrowser } from "@remix-run/react"; 2 | import { startTransition, StrictMode } from "react"; 3 | import { hydrateRoot } from "react-dom/client"; 4 | 5 | function hydrate() { 6 | startTransition(() => { 7 | hydrateRoot( 8 | document, 9 | 10 | 11 | 12 | ); 13 | }); 14 | } 15 | 16 | if (typeof requestIdleCallback === "function") { 17 | requestIdleCallback(hydrate); 18 | } else { 19 | // Safari doesn't support requestIdleCallback 20 | // https://caniuse.com/requestidlecallback 21 | setTimeout(hydrate, 1); 22 | } 23 | -------------------------------------------------------------------------------- /remix/app/entry.server.jsx: -------------------------------------------------------------------------------- 1 | import { PassThrough } from "stream"; 2 | 3 | import { Response } from "@remix-run/node"; 4 | import { RemixServer } from "@remix-run/react"; 5 | import isbot from "isbot"; 6 | import { renderToPipeableStream } from "react-dom/server"; 7 | 8 | const ABORT_DELAY = 5000; 9 | 10 | export default function handleRequest( 11 | request, 12 | responseStatusCode, 13 | responseHeaders, 14 | remixContext 15 | ) { 16 | return isbot(request.headers.get("user-agent")) 17 | ? handleBotRequest( 18 | request, 19 | responseStatusCode, 20 | responseHeaders, 21 | remixContext 22 | ) 23 | : handleBrowserRequest( 24 | request, 25 | responseStatusCode, 26 | responseHeaders, 27 | remixContext 28 | ); 29 | } 30 | 31 | function handleBotRequest( 32 | request, 33 | responseStatusCode, 34 | responseHeaders, 35 | remixContext 36 | ) { 37 | return new Promise((resolve, reject) => { 38 | let didError = false; 39 | 40 | const { pipe, abort } = renderToPipeableStream( 41 | , 42 | { 43 | onAllReady() { 44 | const body = new PassThrough(); 45 | 46 | responseHeaders.set("Content-Type", "text/html"); 47 | 48 | resolve( 49 | new Response(body, { 50 | headers: responseHeaders, 51 | status: didError ? 500 : responseStatusCode, 52 | }) 53 | ); 54 | 55 | pipe(body); 56 | }, 57 | onShellError(error) { 58 | reject(error); 59 | }, 60 | onError(error) { 61 | didError = true; 62 | 63 | console.error(error); 64 | }, 65 | } 66 | ); 67 | 68 | setTimeout(abort, ABORT_DELAY); 69 | }); 70 | } 71 | 72 | function handleBrowserRequest( 73 | request, 74 | responseStatusCode, 75 | responseHeaders, 76 | remixContext 77 | ) { 78 | return new Promise((resolve, reject) => { 79 | let didError = false; 80 | 81 | const { pipe, abort } = renderToPipeableStream( 82 | , 83 | { 84 | onShellReady() { 85 | const body = new PassThrough(); 86 | 87 | responseHeaders.set("Content-Type", "text/html"); 88 | 89 | resolve( 90 | new Response(body, { 91 | headers: responseHeaders, 92 | status: didError ? 500 : responseStatusCode, 93 | }) 94 | ); 95 | 96 | pipe(body); 97 | }, 98 | onShellError(err) { 99 | reject(err); 100 | }, 101 | onError(error) { 102 | didError = true; 103 | 104 | console.error(error); 105 | }, 106 | } 107 | ); 108 | 109 | setTimeout(abort, ABORT_DELAY); 110 | }); 111 | } 112 | -------------------------------------------------------------------------------- /remix/app/root.jsx: -------------------------------------------------------------------------------- 1 | import { 2 | Links, 3 | LiveReload, 4 | Meta, 5 | Outlet, 6 | Scripts, 7 | ScrollRestoration, 8 | } from "@remix-run/react"; 9 | 10 | import { storyblokInit, apiPlugin } from "@storyblok/react"; 11 | import Feature from "./components/Feature"; 12 | import Grid from "./components/Grid"; 13 | import Page from "./components/Page"; 14 | import Teaser from "./components/Teaser"; 15 | 16 | const components = { 17 | feature: Feature, 18 | grid: Grid, 19 | teaser: Teaser, 20 | page: Page, 21 | }; 22 | 23 | storyblokInit({ 24 | accessToken: "d6IKUtAUDiKyAhpJtrLFcwtt", 25 | use: [apiPlugin], 26 | components, 27 | apiOptions: { 28 | region: '' 29 | } 30 | }); 31 | 32 | export const meta = () => ({ 33 | charset: "utf-8", 34 | title: "New Remix App", 35 | viewport: "width=device-width,initial-scale=1", 36 | }); 37 | 38 | export default function App() { 39 | return ( 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /remix/app/routes/home.jsx: -------------------------------------------------------------------------------- 1 | import { json } from "@remix-run/node"; 2 | import { useLoaderData } from "@remix-run/react"; 3 | 4 | import Layout from "../components/Layout"; 5 | import { 6 | useStoryblokState, 7 | getStoryblokApi, 8 | StoryblokComponent, 9 | } from "@storyblok/react"; 10 | 11 | export const loader = async () => { 12 | // the slug of the story 13 | let slug = "home"; 14 | 15 | let params = { 16 | version: "draft", // or 'published' 17 | }; 18 | 19 | const storyblokApi = getStoryblokApi(); 20 | let { data } = await storyblokApi.get(`cdn/stories/${slug}`, params); 21 | 22 | return json(data?.story); 23 | }; 24 | 25 | export default function Page() { 26 | let story = useLoaderData(); 27 | 28 | story = useStoryblokState(story); 29 | 30 | return ( 31 | 32 | 33 | 34 | ); 35 | } 36 | -------------------------------------------------------------------------------- /remix/app/routes/index.jsx: -------------------------------------------------------------------------------- 1 | import { json } from "@remix-run/node"; 2 | import { useLoaderData } from "@remix-run/react"; 3 | 4 | import Layout from "../components/Layout"; 5 | import { 6 | useStoryblokState, 7 | getStoryblokApi, 8 | StoryblokComponent, 9 | } from "@storyblok/react"; 10 | 11 | export const loader = async () => { 12 | // the slug of the story 13 | let slug = "home"; 14 | 15 | let params = { 16 | version: "draft", // or 'published' 17 | }; 18 | 19 | const storyblokApi = getStoryblokApi(); 20 | let { data } = await storyblokApi.get(`cdn/stories/${slug}`, params); 21 | 22 | return json(data?.story); 23 | }; 24 | 25 | export default function Page() { 26 | let story = useLoaderData(); 27 | 28 | story = useStoryblokState(story); 29 | 30 | return ( 31 | 32 | 33 | 34 | ); 35 | } 36 | -------------------------------------------------------------------------------- /remix/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "sideEffects": false, 4 | "scripts": { 5 | "build": "remix build", 6 | "dev": "remix dev", 7 | "start": "remix-serve build", 8 | "typecheck": "tsc" 9 | }, 10 | "dependencies": { 11 | "@remix-run/node": "^1.13.0", 12 | "@remix-run/react": "^1.13.0", 13 | "@remix-run/serve": "^1.13.0", 14 | "@storyblok/react": "^2.0.13", 15 | "isbot": "^3.6.5", 16 | "react": "^18.2.0", 17 | "react-dom": "^18.2.0" 18 | }, 19 | "devDependencies": { 20 | "@remix-run/dev": "^1.13.0", 21 | "@remix-run/eslint-config": "^1.13.0", 22 | "@types/react": "^18.0.25", 23 | "@types/react-dom": "^18.0.8", 24 | "eslint": "^8.27.0", 25 | "typescript": "^4.8.4" 26 | }, 27 | "engines": { 28 | "node": ">=14" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /remix/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/storyblok/getting-started/4704029ba0f22ee8f6806ab250f774f708c0cab6/remix/public/favicon.ico -------------------------------------------------------------------------------- /remix/remix.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('@remix-run/dev').AppConfig} */ 2 | module.exports = { 3 | ignoredRouteFiles: ["**/.*"], 4 | // appDirectory: "app", 5 | // assetsBuildDirectory: "public/build", 6 | // serverBuildPath: "build/index.js", 7 | // publicPath: "/build/", 8 | }; 9 | -------------------------------------------------------------------------------- /remix/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["remix.env.d.ts", "**/*.ts", "**/*.tsx"], 3 | "compilerOptions": { 4 | "lib": ["DOM", "DOM.Iterable", "ES2019"], 5 | "isolatedModules": true, 6 | "esModuleInterop": true, 7 | "jsx": "react-jsx", 8 | "moduleResolution": "node", 9 | "resolveJsonModule": true, 10 | "target": "ES2019", 11 | "strict": true, 12 | "allowJs": true, 13 | "forceConsistentCasingInFileNames": true, 14 | "baseUrl": ".", 15 | "paths": { 16 | "~/*": ["./app/*"] 17 | }, 18 | 19 | // Remix takes care of building everything in `remix build`. 20 | "noEmit": true 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vuejs/README.md: -------------------------------------------------------------------------------- 1 | # Getting Started - Vue edition 2 | 3 | This is an example `Hello World` project built with Storyblok and Vue. 4 | 5 | > To get better understanding of this project and how it works, read our [Getting Started guide](https://www.storyblok.com/docs/guide/getting-started). 6 | 7 | ## Stackblitz 8 | 9 | [Edit on Stackblitz](https://stackblitz.com/edit/vue-5-minutes) 10 | 11 | 12 | ## Configuration Steps 13 | 14 | 1. Create new Space in Storyblok 15 | 2. Obtain the Preview Token from the Settings of the Space. 16 | 3. Replace the `accessToken` value in `src/main.js` file with your Preview Token. 17 | 4. Your Vue project can be started and will consume data from your Storyblok Space. 18 | 19 | > For a more detailed article on how to integrate Storyblok in Vue, check out [Add a headless CMS to VueJS in 5 minutes](https://www.storyblok.com/tp/add-a-headless-CMS-to-vuejs-in-5-minutes). 20 | 21 | ## Build Setup 22 | 23 | ```bash 24 | # install dependencies 25 | $ npm install 26 | 27 | # serve with hot reload at localhost:3000 28 | $ npm run dev 29 | 30 | # build for production 31 | $ npm run build 32 | ``` 33 | 34 | > For detailed explanation on how Vue works, check out the [Vue docs](https://vuejs.org/guide/introduction.html). -------------------------------------------------------------------------------- /vuejs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 9 | 10 | 11 |
12 | 13 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /vuejs/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "-vuejs-5-minutes", 3 | "version": "0.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "-vuejs-5-minutes", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "@storyblok/vue": "^6.0.0", 12 | "axios": "^0.26.0", 13 | "vue": "^3.2.26" 14 | }, 15 | "devDependencies": { 16 | "@vitejs/plugin-vue": "^2.0.0", 17 | "vite": "^2.7.1" 18 | } 19 | }, 20 | "node_modules/@babel/parser": { 21 | "version": "7.17.3", 22 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", 23 | "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", 24 | "bin": { 25 | "parser": "bin/babel-parser.js" 26 | }, 27 | "engines": { 28 | "node": ">=6.0.0" 29 | } 30 | }, 31 | "node_modules/@storyblok/js": { 32 | "version": "1.0.3", 33 | "resolved": "https://registry.npmjs.org/@storyblok/js/-/js-1.0.3.tgz", 34 | "integrity": "sha512-pZR835iffl27YkNfc6ntLDl7HOqFkzzXF5PQHsnZSZVLlUtAmy2BDMDShmuLMgLIZNsGLb8rzbKhSdHjB/+woA==", 35 | "dependencies": { 36 | "storyblok-js-client": "^4.2.0" 37 | } 38 | }, 39 | "node_modules/@storyblok/vue": { 40 | "version": "6.0.0", 41 | "resolved": "https://registry.npmjs.org/@storyblok/vue/-/vue-6.0.0.tgz", 42 | "integrity": "sha512-So2sj0G+TIeazIV8wpip9W+Cp6MGJi1twHt3lUJAqPHHk9wROh51NCaJ/xRBcIY2wADWH6As5zIR+u2YvXMgkw==", 43 | "dependencies": { 44 | "@storyblok/js": "^1.0.3" 45 | } 46 | }, 47 | "node_modules/@vitejs/plugin-vue": { 48 | "version": "2.2.2", 49 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.2.2.tgz", 50 | "integrity": "sha512-3C0s45VOwIFEDU+2ownJOpb0zD5fnjXWaHVOLID2R1mYOlAx3doNBFnNbVjaZvpke/L7IdPJXjpyYpXZToDKig==", 51 | "dev": true, 52 | "engines": { 53 | "node": ">=12.0.0" 54 | }, 55 | "peerDependencies": { 56 | "vite": "^2.5.10", 57 | "vue": "^3.2.25" 58 | } 59 | }, 60 | "node_modules/@vue/compiler-core": { 61 | "version": "3.2.31", 62 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.31.tgz", 63 | "integrity": "sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==", 64 | "dependencies": { 65 | "@babel/parser": "^7.16.4", 66 | "@vue/shared": "3.2.31", 67 | "estree-walker": "^2.0.2", 68 | "source-map": "^0.6.1" 69 | } 70 | }, 71 | "node_modules/@vue/compiler-dom": { 72 | "version": "3.2.31", 73 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz", 74 | "integrity": "sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==", 75 | "dependencies": { 76 | "@vue/compiler-core": "3.2.31", 77 | "@vue/shared": "3.2.31" 78 | } 79 | }, 80 | "node_modules/@vue/compiler-sfc": { 81 | "version": "3.2.31", 82 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz", 83 | "integrity": "sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==", 84 | "dependencies": { 85 | "@babel/parser": "^7.16.4", 86 | "@vue/compiler-core": "3.2.31", 87 | "@vue/compiler-dom": "3.2.31", 88 | "@vue/compiler-ssr": "3.2.31", 89 | "@vue/reactivity-transform": "3.2.31", 90 | "@vue/shared": "3.2.31", 91 | "estree-walker": "^2.0.2", 92 | "magic-string": "^0.25.7", 93 | "postcss": "^8.1.10", 94 | "source-map": "^0.6.1" 95 | } 96 | }, 97 | "node_modules/@vue/compiler-ssr": { 98 | "version": "3.2.31", 99 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz", 100 | "integrity": "sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==", 101 | "dependencies": { 102 | "@vue/compiler-dom": "3.2.31", 103 | "@vue/shared": "3.2.31" 104 | } 105 | }, 106 | "node_modules/@vue/reactivity": { 107 | "version": "3.2.31", 108 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.31.tgz", 109 | "integrity": "sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==", 110 | "dependencies": { 111 | "@vue/shared": "3.2.31" 112 | } 113 | }, 114 | "node_modules/@vue/reactivity-transform": { 115 | "version": "3.2.31", 116 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz", 117 | "integrity": "sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==", 118 | "dependencies": { 119 | "@babel/parser": "^7.16.4", 120 | "@vue/compiler-core": "3.2.31", 121 | "@vue/shared": "3.2.31", 122 | "estree-walker": "^2.0.2", 123 | "magic-string": "^0.25.7" 124 | } 125 | }, 126 | "node_modules/@vue/runtime-core": { 127 | "version": "3.2.31", 128 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.31.tgz", 129 | "integrity": "sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==", 130 | "dependencies": { 131 | "@vue/reactivity": "3.2.31", 132 | "@vue/shared": "3.2.31" 133 | } 134 | }, 135 | "node_modules/@vue/runtime-dom": { 136 | "version": "3.2.31", 137 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz", 138 | "integrity": "sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==", 139 | "dependencies": { 140 | "@vue/runtime-core": "3.2.31", 141 | "@vue/shared": "3.2.31", 142 | "csstype": "^2.6.8" 143 | } 144 | }, 145 | "node_modules/@vue/server-renderer": { 146 | "version": "3.2.31", 147 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.31.tgz", 148 | "integrity": "sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==", 149 | "dependencies": { 150 | "@vue/compiler-ssr": "3.2.31", 151 | "@vue/shared": "3.2.31" 152 | }, 153 | "peerDependencies": { 154 | "vue": "3.2.31" 155 | } 156 | }, 157 | "node_modules/@vue/shared": { 158 | "version": "3.2.31", 159 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.31.tgz", 160 | "integrity": "sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==" 161 | }, 162 | "node_modules/axios": { 163 | "version": "0.26.0", 164 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz", 165 | "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==", 166 | "dependencies": { 167 | "follow-redirects": "^1.14.8" 168 | } 169 | }, 170 | "node_modules/csstype": { 171 | "version": "2.6.19", 172 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", 173 | "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==" 174 | }, 175 | "node_modules/esbuild": { 176 | "version": "0.14.23", 177 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", 178 | "integrity": "sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==", 179 | "dev": true, 180 | "hasInstallScript": true, 181 | "bin": { 182 | "esbuild": "bin/esbuild" 183 | }, 184 | "engines": { 185 | "node": ">=12" 186 | }, 187 | "optionalDependencies": { 188 | "esbuild-android-arm64": "0.14.23", 189 | "esbuild-darwin-64": "0.14.23", 190 | "esbuild-darwin-arm64": "0.14.23", 191 | "esbuild-freebsd-64": "0.14.23", 192 | "esbuild-freebsd-arm64": "0.14.23", 193 | "esbuild-linux-32": "0.14.23", 194 | "esbuild-linux-64": "0.14.23", 195 | "esbuild-linux-arm": "0.14.23", 196 | "esbuild-linux-arm64": "0.14.23", 197 | "esbuild-linux-mips64le": "0.14.23", 198 | "esbuild-linux-ppc64le": "0.14.23", 199 | "esbuild-linux-riscv64": "0.14.23", 200 | "esbuild-linux-s390x": "0.14.23", 201 | "esbuild-netbsd-64": "0.14.23", 202 | "esbuild-openbsd-64": "0.14.23", 203 | "esbuild-sunos-64": "0.14.23", 204 | "esbuild-windows-32": "0.14.23", 205 | "esbuild-windows-64": "0.14.23", 206 | "esbuild-windows-arm64": "0.14.23" 207 | } 208 | }, 209 | "node_modules/esbuild-android-arm64": { 210 | "version": "0.14.23", 211 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz", 212 | "integrity": "sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==", 213 | "cpu": [ 214 | "arm64" 215 | ], 216 | "dev": true, 217 | "optional": true, 218 | "os": [ 219 | "android" 220 | ], 221 | "engines": { 222 | "node": ">=12" 223 | } 224 | }, 225 | "node_modules/esbuild-darwin-64": { 226 | "version": "0.14.23", 227 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz", 228 | "integrity": "sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==", 229 | "cpu": [ 230 | "x64" 231 | ], 232 | "dev": true, 233 | "optional": true, 234 | "os": [ 235 | "darwin" 236 | ], 237 | "engines": { 238 | "node": ">=12" 239 | } 240 | }, 241 | "node_modules/esbuild-darwin-arm64": { 242 | "version": "0.14.23", 243 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz", 244 | "integrity": "sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==", 245 | "cpu": [ 246 | "arm64" 247 | ], 248 | "dev": true, 249 | "optional": true, 250 | "os": [ 251 | "darwin" 252 | ], 253 | "engines": { 254 | "node": ">=12" 255 | } 256 | }, 257 | "node_modules/esbuild-freebsd-64": { 258 | "version": "0.14.23", 259 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz", 260 | "integrity": "sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==", 261 | "cpu": [ 262 | "x64" 263 | ], 264 | "dev": true, 265 | "optional": true, 266 | "os": [ 267 | "freebsd" 268 | ], 269 | "engines": { 270 | "node": ">=12" 271 | } 272 | }, 273 | "node_modules/esbuild-freebsd-arm64": { 274 | "version": "0.14.23", 275 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz", 276 | "integrity": "sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==", 277 | "cpu": [ 278 | "arm64" 279 | ], 280 | "dev": true, 281 | "optional": true, 282 | "os": [ 283 | "freebsd" 284 | ], 285 | "engines": { 286 | "node": ">=12" 287 | } 288 | }, 289 | "node_modules/esbuild-linux-32": { 290 | "version": "0.14.23", 291 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz", 292 | "integrity": "sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==", 293 | "cpu": [ 294 | "ia32" 295 | ], 296 | "dev": true, 297 | "optional": true, 298 | "os": [ 299 | "linux" 300 | ], 301 | "engines": { 302 | "node": ">=12" 303 | } 304 | }, 305 | "node_modules/esbuild-linux-64": { 306 | "version": "0.14.23", 307 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz", 308 | "integrity": "sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==", 309 | "cpu": [ 310 | "x64" 311 | ], 312 | "dev": true, 313 | "optional": true, 314 | "os": [ 315 | "linux" 316 | ], 317 | "engines": { 318 | "node": ">=12" 319 | } 320 | }, 321 | "node_modules/esbuild-linux-arm": { 322 | "version": "0.14.23", 323 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz", 324 | "integrity": "sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==", 325 | "cpu": [ 326 | "arm" 327 | ], 328 | "dev": true, 329 | "optional": true, 330 | "os": [ 331 | "linux" 332 | ], 333 | "engines": { 334 | "node": ">=12" 335 | } 336 | }, 337 | "node_modules/esbuild-linux-arm64": { 338 | "version": "0.14.23", 339 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz", 340 | "integrity": "sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==", 341 | "cpu": [ 342 | "arm64" 343 | ], 344 | "dev": true, 345 | "optional": true, 346 | "os": [ 347 | "linux" 348 | ], 349 | "engines": { 350 | "node": ">=12" 351 | } 352 | }, 353 | "node_modules/esbuild-linux-mips64le": { 354 | "version": "0.14.23", 355 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz", 356 | "integrity": "sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==", 357 | "cpu": [ 358 | "mips64el" 359 | ], 360 | "dev": true, 361 | "optional": true, 362 | "os": [ 363 | "linux" 364 | ], 365 | "engines": { 366 | "node": ">=12" 367 | } 368 | }, 369 | "node_modules/esbuild-linux-ppc64le": { 370 | "version": "0.14.23", 371 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz", 372 | "integrity": "sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==", 373 | "cpu": [ 374 | "ppc64" 375 | ], 376 | "dev": true, 377 | "optional": true, 378 | "os": [ 379 | "linux" 380 | ], 381 | "engines": { 382 | "node": ">=12" 383 | } 384 | }, 385 | "node_modules/esbuild-linux-riscv64": { 386 | "version": "0.14.23", 387 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz", 388 | "integrity": "sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==", 389 | "cpu": [ 390 | "riscv64" 391 | ], 392 | "dev": true, 393 | "optional": true, 394 | "os": [ 395 | "linux" 396 | ], 397 | "engines": { 398 | "node": ">=12" 399 | } 400 | }, 401 | "node_modules/esbuild-linux-s390x": { 402 | "version": "0.14.23", 403 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz", 404 | "integrity": "sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==", 405 | "cpu": [ 406 | "s390x" 407 | ], 408 | "dev": true, 409 | "optional": true, 410 | "os": [ 411 | "linux" 412 | ], 413 | "engines": { 414 | "node": ">=12" 415 | } 416 | }, 417 | "node_modules/esbuild-netbsd-64": { 418 | "version": "0.14.23", 419 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz", 420 | "integrity": "sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==", 421 | "cpu": [ 422 | "x64" 423 | ], 424 | "dev": true, 425 | "optional": true, 426 | "os": [ 427 | "netbsd" 428 | ], 429 | "engines": { 430 | "node": ">=12" 431 | } 432 | }, 433 | "node_modules/esbuild-openbsd-64": { 434 | "version": "0.14.23", 435 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz", 436 | "integrity": "sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==", 437 | "cpu": [ 438 | "x64" 439 | ], 440 | "dev": true, 441 | "optional": true, 442 | "os": [ 443 | "openbsd" 444 | ], 445 | "engines": { 446 | "node": ">=12" 447 | } 448 | }, 449 | "node_modules/esbuild-sunos-64": { 450 | "version": "0.14.23", 451 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz", 452 | "integrity": "sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==", 453 | "cpu": [ 454 | "x64" 455 | ], 456 | "dev": true, 457 | "optional": true, 458 | "os": [ 459 | "sunos" 460 | ], 461 | "engines": { 462 | "node": ">=12" 463 | } 464 | }, 465 | "node_modules/esbuild-windows-32": { 466 | "version": "0.14.23", 467 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz", 468 | "integrity": "sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==", 469 | "cpu": [ 470 | "ia32" 471 | ], 472 | "dev": true, 473 | "optional": true, 474 | "os": [ 475 | "win32" 476 | ], 477 | "engines": { 478 | "node": ">=12" 479 | } 480 | }, 481 | "node_modules/esbuild-windows-64": { 482 | "version": "0.14.23", 483 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz", 484 | "integrity": "sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==", 485 | "cpu": [ 486 | "x64" 487 | ], 488 | "dev": true, 489 | "optional": true, 490 | "os": [ 491 | "win32" 492 | ], 493 | "engines": { 494 | "node": ">=12" 495 | } 496 | }, 497 | "node_modules/esbuild-windows-arm64": { 498 | "version": "0.14.23", 499 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz", 500 | "integrity": "sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==", 501 | "cpu": [ 502 | "arm64" 503 | ], 504 | "dev": true, 505 | "optional": true, 506 | "os": [ 507 | "win32" 508 | ], 509 | "engines": { 510 | "node": ">=12" 511 | } 512 | }, 513 | "node_modules/estree-walker": { 514 | "version": "2.0.2", 515 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 516 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 517 | }, 518 | "node_modules/follow-redirects": { 519 | "version": "1.14.9", 520 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", 521 | "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", 522 | "funding": [ 523 | { 524 | "type": "individual", 525 | "url": "https://github.com/sponsors/RubenVerborgh" 526 | } 527 | ], 528 | "engines": { 529 | "node": ">=4.0" 530 | }, 531 | "peerDependenciesMeta": { 532 | "debug": { 533 | "optional": true 534 | } 535 | } 536 | }, 537 | "node_modules/fsevents": { 538 | "version": "2.3.2", 539 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 540 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 541 | "dev": true, 542 | "hasInstallScript": true, 543 | "optional": true, 544 | "os": [ 545 | "darwin" 546 | ], 547 | "engines": { 548 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 549 | } 550 | }, 551 | "node_modules/function-bind": { 552 | "version": "1.1.1", 553 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 554 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 555 | "dev": true 556 | }, 557 | "node_modules/has": { 558 | "version": "1.0.3", 559 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 560 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 561 | "dev": true, 562 | "dependencies": { 563 | "function-bind": "^1.1.1" 564 | }, 565 | "engines": { 566 | "node": ">= 0.4.0" 567 | } 568 | }, 569 | "node_modules/is-core-module": { 570 | "version": "2.8.1", 571 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", 572 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", 573 | "dev": true, 574 | "dependencies": { 575 | "has": "^1.0.3" 576 | }, 577 | "funding": { 578 | "url": "https://github.com/sponsors/ljharb" 579 | } 580 | }, 581 | "node_modules/magic-string": { 582 | "version": "0.25.7", 583 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 584 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 585 | "dependencies": { 586 | "sourcemap-codec": "^1.4.4" 587 | } 588 | }, 589 | "node_modules/nanoid": { 590 | "version": "3.3.1", 591 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", 592 | "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", 593 | "bin": { 594 | "nanoid": "bin/nanoid.cjs" 595 | }, 596 | "engines": { 597 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 598 | } 599 | }, 600 | "node_modules/path-parse": { 601 | "version": "1.0.7", 602 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 603 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 604 | "dev": true 605 | }, 606 | "node_modules/picocolors": { 607 | "version": "1.0.0", 608 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 609 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 610 | }, 611 | "node_modules/postcss": { 612 | "version": "8.4.6", 613 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", 614 | "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", 615 | "dependencies": { 616 | "nanoid": "^3.2.0", 617 | "picocolors": "^1.0.0", 618 | "source-map-js": "^1.0.2" 619 | }, 620 | "engines": { 621 | "node": "^10 || ^12 || >=14" 622 | }, 623 | "funding": { 624 | "type": "opencollective", 625 | "url": "https://opencollective.com/postcss/" 626 | } 627 | }, 628 | "node_modules/resolve": { 629 | "version": "1.22.0", 630 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 631 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 632 | "dev": true, 633 | "dependencies": { 634 | "is-core-module": "^2.8.1", 635 | "path-parse": "^1.0.7", 636 | "supports-preserve-symlinks-flag": "^1.0.0" 637 | }, 638 | "bin": { 639 | "resolve": "bin/resolve" 640 | }, 641 | "funding": { 642 | "url": "https://github.com/sponsors/ljharb" 643 | } 644 | }, 645 | "node_modules/rollup": { 646 | "version": "2.68.0", 647 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.68.0.tgz", 648 | "integrity": "sha512-XrMKOYK7oQcTio4wyTz466mucnd8LzkiZLozZ4Rz0zQD+HeX4nUK4B8GrTX/2EvN2/vBF/i2WnaXboPxo0JylA==", 649 | "dev": true, 650 | "bin": { 651 | "rollup": "dist/bin/rollup" 652 | }, 653 | "engines": { 654 | "node": ">=10.0.0" 655 | }, 656 | "optionalDependencies": { 657 | "fsevents": "~2.3.2" 658 | } 659 | }, 660 | "node_modules/source-map": { 661 | "version": "0.6.1", 662 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 663 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 664 | "engines": { 665 | "node": ">=0.10.0" 666 | } 667 | }, 668 | "node_modules/source-map-js": { 669 | "version": "1.0.2", 670 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 671 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 672 | "engines": { 673 | "node": ">=0.10.0" 674 | } 675 | }, 676 | "node_modules/sourcemap-codec": { 677 | "version": "1.4.8", 678 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 679 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" 680 | }, 681 | "node_modules/storyblok-js-client": { 682 | "version": "4.2.1", 683 | "resolved": "https://registry.npmjs.org/storyblok-js-client/-/storyblok-js-client-4.2.1.tgz", 684 | "integrity": "sha512-TQfsyBJ6WcjpHFGKYXHy5kef4jXOI/j54wrJmw4Ld13e76dr81EvqZIrwehKPTcRID9+a4rbA0ykn3r3aBpArw==", 685 | "peerDependencies": { 686 | "axios": "^0.21.1" 687 | } 688 | }, 689 | "node_modules/supports-preserve-symlinks-flag": { 690 | "version": "1.0.0", 691 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 692 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 693 | "dev": true, 694 | "engines": { 695 | "node": ">= 0.4" 696 | }, 697 | "funding": { 698 | "url": "https://github.com/sponsors/ljharb" 699 | } 700 | }, 701 | "node_modules/vite": { 702 | "version": "2.8.4", 703 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.4.tgz", 704 | "integrity": "sha512-GwtOkkaT2LDI82uWZKcrpRQxP5tymLnC7hVHHqNkhFNknYr0hJUlDLfhVRgngJvAy3RwypkDCWtTKn1BjO96Dw==", 705 | "dev": true, 706 | "dependencies": { 707 | "esbuild": "^0.14.14", 708 | "postcss": "^8.4.6", 709 | "resolve": "^1.22.0", 710 | "rollup": "^2.59.0" 711 | }, 712 | "bin": { 713 | "vite": "bin/vite.js" 714 | }, 715 | "engines": { 716 | "node": ">=12.2.0" 717 | }, 718 | "optionalDependencies": { 719 | "fsevents": "~2.3.2" 720 | }, 721 | "peerDependencies": { 722 | "less": "*", 723 | "sass": "*", 724 | "stylus": "*" 725 | }, 726 | "peerDependenciesMeta": { 727 | "less": { 728 | "optional": true 729 | }, 730 | "sass": { 731 | "optional": true 732 | }, 733 | "stylus": { 734 | "optional": true 735 | } 736 | } 737 | }, 738 | "node_modules/vue": { 739 | "version": "3.2.31", 740 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.31.tgz", 741 | "integrity": "sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==", 742 | "dependencies": { 743 | "@vue/compiler-dom": "3.2.31", 744 | "@vue/compiler-sfc": "3.2.31", 745 | "@vue/runtime-dom": "3.2.31", 746 | "@vue/server-renderer": "3.2.31", 747 | "@vue/shared": "3.2.31" 748 | } 749 | } 750 | }, 751 | "dependencies": { 752 | "@babel/parser": { 753 | "version": "7.17.3", 754 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", 755 | "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==" 756 | }, 757 | "@storyblok/js": { 758 | "version": "1.0.3", 759 | "resolved": "https://registry.npmjs.org/@storyblok/js/-/js-1.0.3.tgz", 760 | "integrity": "sha512-pZR835iffl27YkNfc6ntLDl7HOqFkzzXF5PQHsnZSZVLlUtAmy2BDMDShmuLMgLIZNsGLb8rzbKhSdHjB/+woA==", 761 | "requires": { 762 | "storyblok-js-client": "^4.2.0" 763 | } 764 | }, 765 | "@storyblok/vue": { 766 | "version": "6.0.0", 767 | "resolved": "https://registry.npmjs.org/@storyblok/vue/-/vue-6.0.0.tgz", 768 | "integrity": "sha512-So2sj0G+TIeazIV8wpip9W+Cp6MGJi1twHt3lUJAqPHHk9wROh51NCaJ/xRBcIY2wADWH6As5zIR+u2YvXMgkw==", 769 | "requires": { 770 | "@storyblok/js": "^1.0.3" 771 | } 772 | }, 773 | "@vitejs/plugin-vue": { 774 | "version": "2.2.2", 775 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.2.2.tgz", 776 | "integrity": "sha512-3C0s45VOwIFEDU+2ownJOpb0zD5fnjXWaHVOLID2R1mYOlAx3doNBFnNbVjaZvpke/L7IdPJXjpyYpXZToDKig==", 777 | "dev": true, 778 | "requires": {} 779 | }, 780 | "@vue/compiler-core": { 781 | "version": "3.2.31", 782 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.31.tgz", 783 | "integrity": "sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==", 784 | "requires": { 785 | "@babel/parser": "^7.16.4", 786 | "@vue/shared": "3.2.31", 787 | "estree-walker": "^2.0.2", 788 | "source-map": "^0.6.1" 789 | } 790 | }, 791 | "@vue/compiler-dom": { 792 | "version": "3.2.31", 793 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz", 794 | "integrity": "sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==", 795 | "requires": { 796 | "@vue/compiler-core": "3.2.31", 797 | "@vue/shared": "3.2.31" 798 | } 799 | }, 800 | "@vue/compiler-sfc": { 801 | "version": "3.2.31", 802 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz", 803 | "integrity": "sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==", 804 | "requires": { 805 | "@babel/parser": "^7.16.4", 806 | "@vue/compiler-core": "3.2.31", 807 | "@vue/compiler-dom": "3.2.31", 808 | "@vue/compiler-ssr": "3.2.31", 809 | "@vue/reactivity-transform": "3.2.31", 810 | "@vue/shared": "3.2.31", 811 | "estree-walker": "^2.0.2", 812 | "magic-string": "^0.25.7", 813 | "postcss": "^8.1.10", 814 | "source-map": "^0.6.1" 815 | } 816 | }, 817 | "@vue/compiler-ssr": { 818 | "version": "3.2.31", 819 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz", 820 | "integrity": "sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==", 821 | "requires": { 822 | "@vue/compiler-dom": "3.2.31", 823 | "@vue/shared": "3.2.31" 824 | } 825 | }, 826 | "@vue/reactivity": { 827 | "version": "3.2.31", 828 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.31.tgz", 829 | "integrity": "sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==", 830 | "requires": { 831 | "@vue/shared": "3.2.31" 832 | } 833 | }, 834 | "@vue/reactivity-transform": { 835 | "version": "3.2.31", 836 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz", 837 | "integrity": "sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==", 838 | "requires": { 839 | "@babel/parser": "^7.16.4", 840 | "@vue/compiler-core": "3.2.31", 841 | "@vue/shared": "3.2.31", 842 | "estree-walker": "^2.0.2", 843 | "magic-string": "^0.25.7" 844 | } 845 | }, 846 | "@vue/runtime-core": { 847 | "version": "3.2.31", 848 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.31.tgz", 849 | "integrity": "sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==", 850 | "requires": { 851 | "@vue/reactivity": "3.2.31", 852 | "@vue/shared": "3.2.31" 853 | } 854 | }, 855 | "@vue/runtime-dom": { 856 | "version": "3.2.31", 857 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz", 858 | "integrity": "sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==", 859 | "requires": { 860 | "@vue/runtime-core": "3.2.31", 861 | "@vue/shared": "3.2.31", 862 | "csstype": "^2.6.8" 863 | } 864 | }, 865 | "@vue/server-renderer": { 866 | "version": "3.2.31", 867 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.31.tgz", 868 | "integrity": "sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==", 869 | "requires": { 870 | "@vue/compiler-ssr": "3.2.31", 871 | "@vue/shared": "3.2.31" 872 | } 873 | }, 874 | "@vue/shared": { 875 | "version": "3.2.31", 876 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.31.tgz", 877 | "integrity": "sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==" 878 | }, 879 | "axios": { 880 | "version": "0.26.0", 881 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz", 882 | "integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==", 883 | "requires": { 884 | "follow-redirects": "^1.14.8" 885 | } 886 | }, 887 | "csstype": { 888 | "version": "2.6.19", 889 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", 890 | "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==" 891 | }, 892 | "esbuild": { 893 | "version": "0.14.23", 894 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", 895 | "integrity": "sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==", 896 | "dev": true, 897 | "requires": { 898 | "esbuild-android-arm64": "0.14.23", 899 | "esbuild-darwin-64": "0.14.23", 900 | "esbuild-darwin-arm64": "0.14.23", 901 | "esbuild-freebsd-64": "0.14.23", 902 | "esbuild-freebsd-arm64": "0.14.23", 903 | "esbuild-linux-32": "0.14.23", 904 | "esbuild-linux-64": "0.14.23", 905 | "esbuild-linux-arm": "0.14.23", 906 | "esbuild-linux-arm64": "0.14.23", 907 | "esbuild-linux-mips64le": "0.14.23", 908 | "esbuild-linux-ppc64le": "0.14.23", 909 | "esbuild-linux-riscv64": "0.14.23", 910 | "esbuild-linux-s390x": "0.14.23", 911 | "esbuild-netbsd-64": "0.14.23", 912 | "esbuild-openbsd-64": "0.14.23", 913 | "esbuild-sunos-64": "0.14.23", 914 | "esbuild-windows-32": "0.14.23", 915 | "esbuild-windows-64": "0.14.23", 916 | "esbuild-windows-arm64": "0.14.23" 917 | } 918 | }, 919 | "esbuild-android-arm64": { 920 | "version": "0.14.23", 921 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz", 922 | "integrity": "sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==", 923 | "dev": true, 924 | "optional": true 925 | }, 926 | "esbuild-darwin-64": { 927 | "version": "0.14.23", 928 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz", 929 | "integrity": "sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==", 930 | "dev": true, 931 | "optional": true 932 | }, 933 | "esbuild-darwin-arm64": { 934 | "version": "0.14.23", 935 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz", 936 | "integrity": "sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==", 937 | "dev": true, 938 | "optional": true 939 | }, 940 | "esbuild-freebsd-64": { 941 | "version": "0.14.23", 942 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz", 943 | "integrity": "sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==", 944 | "dev": true, 945 | "optional": true 946 | }, 947 | "esbuild-freebsd-arm64": { 948 | "version": "0.14.23", 949 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz", 950 | "integrity": "sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==", 951 | "dev": true, 952 | "optional": true 953 | }, 954 | "esbuild-linux-32": { 955 | "version": "0.14.23", 956 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz", 957 | "integrity": "sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==", 958 | "dev": true, 959 | "optional": true 960 | }, 961 | "esbuild-linux-64": { 962 | "version": "0.14.23", 963 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz", 964 | "integrity": "sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==", 965 | "dev": true, 966 | "optional": true 967 | }, 968 | "esbuild-linux-arm": { 969 | "version": "0.14.23", 970 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz", 971 | "integrity": "sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==", 972 | "dev": true, 973 | "optional": true 974 | }, 975 | "esbuild-linux-arm64": { 976 | "version": "0.14.23", 977 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz", 978 | "integrity": "sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==", 979 | "dev": true, 980 | "optional": true 981 | }, 982 | "esbuild-linux-mips64le": { 983 | "version": "0.14.23", 984 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz", 985 | "integrity": "sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==", 986 | "dev": true, 987 | "optional": true 988 | }, 989 | "esbuild-linux-ppc64le": { 990 | "version": "0.14.23", 991 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz", 992 | "integrity": "sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==", 993 | "dev": true, 994 | "optional": true 995 | }, 996 | "esbuild-linux-riscv64": { 997 | "version": "0.14.23", 998 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz", 999 | "integrity": "sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==", 1000 | "dev": true, 1001 | "optional": true 1002 | }, 1003 | "esbuild-linux-s390x": { 1004 | "version": "0.14.23", 1005 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz", 1006 | "integrity": "sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==", 1007 | "dev": true, 1008 | "optional": true 1009 | }, 1010 | "esbuild-netbsd-64": { 1011 | "version": "0.14.23", 1012 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz", 1013 | "integrity": "sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==", 1014 | "dev": true, 1015 | "optional": true 1016 | }, 1017 | "esbuild-openbsd-64": { 1018 | "version": "0.14.23", 1019 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz", 1020 | "integrity": "sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==", 1021 | "dev": true, 1022 | "optional": true 1023 | }, 1024 | "esbuild-sunos-64": { 1025 | "version": "0.14.23", 1026 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz", 1027 | "integrity": "sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==", 1028 | "dev": true, 1029 | "optional": true 1030 | }, 1031 | "esbuild-windows-32": { 1032 | "version": "0.14.23", 1033 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz", 1034 | "integrity": "sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==", 1035 | "dev": true, 1036 | "optional": true 1037 | }, 1038 | "esbuild-windows-64": { 1039 | "version": "0.14.23", 1040 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz", 1041 | "integrity": "sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==", 1042 | "dev": true, 1043 | "optional": true 1044 | }, 1045 | "esbuild-windows-arm64": { 1046 | "version": "0.14.23", 1047 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz", 1048 | "integrity": "sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==", 1049 | "dev": true, 1050 | "optional": true 1051 | }, 1052 | "estree-walker": { 1053 | "version": "2.0.2", 1054 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1055 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 1056 | }, 1057 | "follow-redirects": { 1058 | "version": "1.14.9", 1059 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", 1060 | "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" 1061 | }, 1062 | "fsevents": { 1063 | "version": "2.3.2", 1064 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1065 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1066 | "dev": true, 1067 | "optional": true 1068 | }, 1069 | "function-bind": { 1070 | "version": "1.1.1", 1071 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1072 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1073 | "dev": true 1074 | }, 1075 | "has": { 1076 | "version": "1.0.3", 1077 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1078 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1079 | "dev": true, 1080 | "requires": { 1081 | "function-bind": "^1.1.1" 1082 | } 1083 | }, 1084 | "is-core-module": { 1085 | "version": "2.8.1", 1086 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", 1087 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", 1088 | "dev": true, 1089 | "requires": { 1090 | "has": "^1.0.3" 1091 | } 1092 | }, 1093 | "magic-string": { 1094 | "version": "0.25.7", 1095 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 1096 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 1097 | "requires": { 1098 | "sourcemap-codec": "^1.4.4" 1099 | } 1100 | }, 1101 | "nanoid": { 1102 | "version": "3.3.1", 1103 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", 1104 | "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" 1105 | }, 1106 | "path-parse": { 1107 | "version": "1.0.7", 1108 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1109 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1110 | "dev": true 1111 | }, 1112 | "picocolors": { 1113 | "version": "1.0.0", 1114 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1115 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 1116 | }, 1117 | "postcss": { 1118 | "version": "8.4.6", 1119 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", 1120 | "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", 1121 | "requires": { 1122 | "nanoid": "^3.2.0", 1123 | "picocolors": "^1.0.0", 1124 | "source-map-js": "^1.0.2" 1125 | } 1126 | }, 1127 | "resolve": { 1128 | "version": "1.22.0", 1129 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 1130 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 1131 | "dev": true, 1132 | "requires": { 1133 | "is-core-module": "^2.8.1", 1134 | "path-parse": "^1.0.7", 1135 | "supports-preserve-symlinks-flag": "^1.0.0" 1136 | } 1137 | }, 1138 | "rollup": { 1139 | "version": "2.68.0", 1140 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.68.0.tgz", 1141 | "integrity": "sha512-XrMKOYK7oQcTio4wyTz466mucnd8LzkiZLozZ4Rz0zQD+HeX4nUK4B8GrTX/2EvN2/vBF/i2WnaXboPxo0JylA==", 1142 | "dev": true, 1143 | "requires": { 1144 | "fsevents": "~2.3.2" 1145 | } 1146 | }, 1147 | "source-map": { 1148 | "version": "0.6.1", 1149 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1150 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 1151 | }, 1152 | "source-map-js": { 1153 | "version": "1.0.2", 1154 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1155 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" 1156 | }, 1157 | "sourcemap-codec": { 1158 | "version": "1.4.8", 1159 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1160 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" 1161 | }, 1162 | "storyblok-js-client": { 1163 | "version": "4.2.1", 1164 | "resolved": "https://registry.npmjs.org/storyblok-js-client/-/storyblok-js-client-4.2.1.tgz", 1165 | "integrity": "sha512-TQfsyBJ6WcjpHFGKYXHy5kef4jXOI/j54wrJmw4Ld13e76dr81EvqZIrwehKPTcRID9+a4rbA0ykn3r3aBpArw==", 1166 | "requires": {} 1167 | }, 1168 | "supports-preserve-symlinks-flag": { 1169 | "version": "1.0.0", 1170 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1171 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1172 | "dev": true 1173 | }, 1174 | "vite": { 1175 | "version": "2.8.4", 1176 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.4.tgz", 1177 | "integrity": "sha512-GwtOkkaT2LDI82uWZKcrpRQxP5tymLnC7hVHHqNkhFNknYr0hJUlDLfhVRgngJvAy3RwypkDCWtTKn1BjO96Dw==", 1178 | "dev": true, 1179 | "requires": { 1180 | "esbuild": "^0.14.14", 1181 | "fsevents": "~2.3.2", 1182 | "postcss": "^8.4.6", 1183 | "resolve": "^1.22.0", 1184 | "rollup": "^2.59.0" 1185 | } 1186 | }, 1187 | "vue": { 1188 | "version": "3.2.31", 1189 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.31.tgz", 1190 | "integrity": "sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==", 1191 | "requires": { 1192 | "@vue/compiler-dom": "3.2.31", 1193 | "@vue/compiler-sfc": "3.2.31", 1194 | "@vue/runtime-dom": "3.2.31", 1195 | "@vue/server-renderer": "3.2.31", 1196 | "@vue/shared": "3.2.31" 1197 | } 1198 | } 1199 | } 1200 | } 1201 | -------------------------------------------------------------------------------- /vuejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "-vuejs-5-minutes", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vite build", 7 | "preview": "vite preview --port 3000" 8 | }, 9 | "dependencies": { 10 | "@storyblok/vue": "^6.0.0", 11 | "axios": "^0.26.0", 12 | "vue": "^3.2.26" 13 | }, 14 | "devDependencies": { 15 | "@vitejs/plugin-vue": "^2.0.0", 16 | "vite": "^2.7.1" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /vuejs/src/App.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /vuejs/src/components/Feature.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /vuejs/src/components/Grid.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /vuejs/src/components/Page.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /vuejs/src/components/Teaser.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /vuejs/src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue'; 2 | import { StoryblokVue, apiPlugin } from '@storyblok/vue'; 3 | import App from './App.vue'; 4 | import Grid from './components/Grid.vue'; 5 | import Page from './components/Page.vue'; 6 | import Teaser from './components/Teaser.vue'; 7 | import Feature from './components/Feature.vue'; 8 | 9 | const app = createApp(App); 10 | 11 | app.use(StoryblokVue, { 12 | accessToken: 'd6IKUtAUDiKyAhpJtrLFcwtt', 13 | use: [apiPlugin], 14 | apiOptions: { 15 | region: '' 16 | } 17 | }); 18 | 19 | app.component('Grid', Grid); 20 | app.component('Page', Page); 21 | app.component('Teaser', Teaser); 22 | app.component('Feature', Feature); 23 | 24 | app.mount('#app'); 25 | -------------------------------------------------------------------------------- /vuejs/src/pages/Home.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 9 | -------------------------------------------------------------------------------- /vuejs/vite.config.js: -------------------------------------------------------------------------------- 1 | import { fileURLToPath } from 'url' 2 | 3 | import { defineConfig } from 'vite' 4 | import vue from '@vitejs/plugin-vue' 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | plugins: [vue()], 9 | resolve: { 10 | alias: { 11 | '@': fileURLToPath(new URL('./src', import.meta.url)) 12 | } 13 | } 14 | }) 15 | --------------------------------------------------------------------------------