diff --git a/CHANGELOG.md b/CHANGELOG.md index 283ffe5fc..67a53caca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,27 +9,54 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ... +## 1.0.0.beta1 — 2022-01-13 + +### General + +- Brand new [website](https://edge.bridgetownrb.com) and refreshed documentation. _Yowza!_ Special thanks to [@adrianvalenz](https://github.com/adrianvalenz) for contributing refreshed branding and content enhancements and to [Whitefusion](https://www.whitefusion.studio) for overall design & development of the new site. + +### Added + +- Native esbuild integration, default site template switched to use esbuild + postcss [#461](https://github.com/bridgetownrb/bridgetown/pull/461) ([jaredcwhite](https://github.com/jaredcwhite)) + - **BREAKING CHANGE:** you will need to run `bin/bridgetown webpack update` so the build process can find the relocated assets manifest file. +- New site template design along with ERB and Serbea support via CLI flags [#475](https://github.com/bridgetownrb/bridgetown/pull/461) ([jaredcwhite](https://github.com/jaredcwhite)) + +### Changed + +- Refactor how Rake tasks are loaded or displayed ([jaredcwhite](https://github.com/jaredcwhite)) +- Clean up listener and watcher, resolves #467 ([jaredcwhite](https://github.com/jaredcwhite)) +- Update Stimulus and Turbo configurations to latest versions ([jaredcwhite](https://github.com/jaredcwhite)) +- Permit Rails 7 versions of Active Support & Active Model ([jaredcwhite](https://github.com/jaredcwhite)) +- Improve the display of build errors [#479](https://github.com/bridgetownrb/bridgetown/pull/479) ([jaredcwhite](https://github.com/jaredcwhite)) +- Remove the Swup bundled configuration and enhance Turbo instead [#471](https://github.com/bridgetownrb/bridgetown/pull/471) ([jaredcwhite](https://github.com/jaredcwhite)) + +### Fixed + +- Switch routes to path from absolute_path for Ruby 3.1 compatibility ([jaredcwhite](https://github.com/jaredcwhite)) +- Fix origins autoload issue in #472 ([jaredcwhite](https://github.com/jaredcwhite)) +- Add `.ruby-version` file to new sites ([jaredcwhite](https://github.com/jaredcwhite)) + ## 1.0.0.alpha11 - 2021-11-29 -- Allow saving of models with repo origin [#452](https://github.com/bridgetownrb/bridgetown/pull/452) ([jaredcwhite](https://github.com/jaredcwhite) -- Normalize previous/next resource API between Ruby and Liquid [#466](https://github.com/bridgetownrb/bridgetown/pull/466) ([jaredcwhite](https://github.com/jaredcwhite) +- Allow saving of models with repo origin [#452](https://github.com/bridgetownrb/bridgetown/pull/452) ([jaredcwhite](https://github.com/jaredcwhite)) +- Normalize previous/next resource API between Ruby and Liquid [#466](https://github.com/bridgetownrb/bridgetown/pull/466) ([jaredcwhite](https://github.com/jaredcwhite)) - Docs: Add a nginx section in deployment [#447](https://github.com/bridgetownrb/bridgetown/pull/447) ([Eric-Guo](https://github.com/Eric-Guo)) -- Switch to streaming/event source mechanism for live reload [#458](https://github.com/bridgetownrb/bridgetown/pull/458) ([jaredcwhite](https://github.com/jaredcwhite) -- Hooks refactor & cleaning up SSR reload hook [#457](https://github.com/bridgetownrb/bridgetown/pull/457) ([jaredcwhite](https://github.com/jaredcwhite) +- Switch to streaming/event source mechanism for live reload [#458](https://github.com/bridgetownrb/bridgetown/pull/458) ([jaredcwhite](https://github.com/jaredcwhite)) +- Hooks refactor & cleaning up SSR reload hook [#457](https://github.com/bridgetownrb/bridgetown/pull/457) ([jaredcwhite](https://github.com/jaredcwhite)) - Add `BRIDGETOWN_ENV` to render config [#460](https://github.com/bridgetownrb/bridgetown/pull/460) ([ayushn21](https://github.com/ayushn21)) - Fix production ENV issue with Roda file-based routes - Move `Collection#sort_resources!` to a public method ## 1.0.0.alpha10 - 2021-11-15 -- Fix class duplication bug with reloads and `ActiveSupport::DescendantsTracker` [#450](https://github.com/bridgetownrb/bridgetown/pull/450) ([jaredcwhite](https://github.com/jaredcwhite) -- Remove extra space from plugins command output [#449](https://github.com/bridgetownrb/bridgetown/pull/449) ([jacobherrington](https://github.com/jacobherrington) +- Fix class duplication bug with reloads and `ActiveSupport::DescendantsTracker` [#450](https://github.com/bridgetownrb/bridgetown/pull/450) ([jaredcwhite](https://github.com/jaredcwhite)) +- Remove extra space from plugins command output [#449](https://github.com/bridgetownrb/bridgetown/pull/449) ([jacobherrington](https://github.com/jacobherrington)) ## 1.0.0.alpha9 - 2021-11-11 - Remove the Liquid Component gem dependency - Add support for environment CLI flags (`-e production` or `--environment=production`) -- Integrate Serbea 1.0 into Bridgetown [#440](https://github.com/bridgetownrb/bridgetown/pull/440) ([jaredcwhite](https://github.com/jaredcwhite) +- Integrate Serbea 1.0 into Bridgetown [#440](https://github.com/bridgetownrb/bridgetown/pull/440) ([jaredcwhite](https://github.com/jaredcwhite)) - Add new console commands via ConsoleMethods mixin [#439](https://github.com/bridgetownrb/bridgetown/pull/439) ([jaredcwhite](https://github.com/jaredcwhite) - Support long version form in CLI (`--version`) [#445](https://github.com/bridgetownrb/bridgetown/pull/445) ([Eric-Guo](https://github.com/Eric-Guo)) diff --git a/README.md b/README.md index 24fe87db3..d34bf32ed 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@

- - Bridgetown + + Bridgetown

- Bridgetown + Bridgetown

-Bridgetown is a Webpack-aware, Ruby-powered static site generator for the modern [Jamstack](https://bridgetownrb.com/docs/jamstack/) era. Bridgetown takes your content, API data, and frontend assets; renders templates in Markdown, Liquid, ERB, and many other formats; and exports a complete website ready to be served by fast Jamstack services like Vercel or Render or traditional web servers like Caddy or Nginx. +Bridgetown is a next-generation, progressive site generator & fullstack framework, powered by Ruby. Bridgetown takes your content, API data, and frontend assets; renders templates in Markdown, Liquid, ERB, and many other formats; and exports a complete website ready to be served by fast CDNs like Render or traditional web servers like Caddy or Nginx. [![Build Status](https://github.com/bridgetownrb/bridgetown/workflows/build/badge.svg)](https://github.com/bridgetownrb/bridgetown/actions?query=workflow%3Abuild+branch%3Amain) [![Gem Version](https://img.shields.io/gem/v/bridgetown.svg)](https://rubygems.org/gems/bridgetown) diff --git a/bridgetown-core/lib/bridgetown-core/version.rb b/bridgetown-core/lib/bridgetown-core/version.rb index 19ca9a753..e5bbfdb7c 100644 --- a/bridgetown-core/lib/bridgetown-core/version.rb +++ b/bridgetown-core/lib/bridgetown-core/version.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true module Bridgetown - VERSION = "1.0.0.alpha11" + VERSION = "1.0.0.beta1" CODE_NAME = "Pearl" end diff --git a/bridgetown-website/.gitignore b/bridgetown-website/.gitignore index ebf3a2f1c..5ee2315ea 100644 --- a/bridgetown-website/.gitignore +++ b/bridgetown-website/.gitignore @@ -1,7 +1,33 @@ +# Bridgetown output -node_modules -.sass-cache .bridgetown-cache .bridgetown-metadata .bridgetown-webpack + +# Dependency folders +node_modules vendor + +# Caches +.npm +.node_repl_history + +# Ignore bundler config. +/.bundle + +# Ignore Byebug command history file. +.byebug_history + +# dotenv environment variables file +.env + +# Mac files +.DS_Store + +# Yarn +yarn-error.log +yarn-debug.log* +.pnp/ +.pnp.js +# Yarn Integrity file +.yarn-integrity diff --git a/bridgetown-website/.linthtmlignore b/bridgetown-website/.linthtmlignore index 16442ca68..0b162450c 100644 --- a/bridgetown-website/.linthtmlignore +++ b/bridgetown-website/.linthtmlignore @@ -1,2 +1,3 @@ +src/_components/post_card.serb src/_docs/components.md src/_docs/components/liquid.md \ No newline at end of file diff --git a/bridgetown-website/.ruby-version b/bridgetown-website/.ruby-version new file mode 100644 index 000000000..75a22a26a --- /dev/null +++ b/bridgetown-website/.ruby-version @@ -0,0 +1 @@ +3.0.3 diff --git a/bridgetown-website/Gemfile b/bridgetown-website/Gemfile index e950a4ad3..a760a3577 100644 --- a/bridgetown-website/Gemfile +++ b/bridgetown-website/Gemfile @@ -1,28 +1,18 @@ # frozen_string_literal: true source "https://rubygems.org" +git_source(:github) { |repo| "https://github.com/#{repo}.git" } gem "bridgetown", path: "../bridgetown" gem "bridgetown-builder", path: "../bridgetown-builder" gem "bridgetown-core", path: "../bridgetown-core" gem "bridgetown-paginate", path: "../bridgetown-paginate" -group :bridgetown_plugins do - gem "bridgetown-feed", "~> 2.1" - gem "bridgetown-quick-search", "~> 1.1" - gem "bridgetown-seo-tag", "~> 5.0" - gem "bridgetown-svg-inliner", "~> 1.0" -end +gem "puma", "~> 5.5" -group :test, optional: true do - gem "minitest" - gem "minitest-profile" - gem "minitest-reporters" - gem "nokogiri" - gem "rails-dom-testing" - gem "shoulda" -end +gem "bridgetown-feed", "~> 2.1", group: :bridgetown_plugins +gem "bridgetown-quick-search", "~> 1.1", group: :bridgetown_plugins +gem "bridgetown-seo-tag", "~> 5.0", group: :bridgetown_plugins +gem "bridgetown-svg-inliner", "~> 1.0", group: :bridgetown_plugins -gem "puma", "~> 5.5" -# required by @ruby2js/webpack-loader -gem "ruby2js", "~> 4.2" +gem "gems", "~> 1.2" diff --git a/bridgetown-website/README.md b/bridgetown-website/README.md new file mode 100644 index 000000000..59525c4ab --- /dev/null +++ b/bridgetown-website/README.md @@ -0,0 +1,3 @@ +# New 2021 Website for Bridgetown + +TODO: build and launch a new website for Bridgetown! =) diff --git a/bridgetown-website/Rakefile b/bridgetown-website/Rakefile index 7a56bbb29..73456a361 100644 --- a/bridgetown-website/Rakefile +++ b/bridgetown-website/Rakefile @@ -1,9 +1,10 @@ -# frozen_string_literal: true - require "bridgetown" Bridgetown.load_tasks +# +# Standard set of tasks, which you can customize if you wish: +# desc "Build the Bridgetown site for deployment" task deploy: [ :clean, @@ -29,16 +30,28 @@ task :clean do end namespace :frontend do - desc "Build the frontend with Webpack for deployment" + desc "Build the frontend with esbuild for deployment" task :build do - sh "yarn run webpack-build" + sh "yarn run esbuild" end - desc "Watch the frontend with Webpack during development" + desc "Watch the frontend with esbuild during development" task :dev do - sh "yarn run webpack-dev --color" + sh "yarn run esbuild-dev" rescue Interrupt end end +# +# Add your own Rake tasks here! You can use `environment` as a prerequisite +# in order to write automations or other commands requiring a loaded site. +# +# task :my_task => :environment do +# puts site.root_dir +# automation do +# say_status :rake, "I'm a Rake tast =) #{site.config.url}" +# end +# end + +# Run rake without specifying any command to execute a deploy build by default. task default: :deploy diff --git a/bridgetown-website/bridgetown.config.yml b/bridgetown-website/bridgetown.config.yml index 1e249bf5e..6b6c1015b 100644 --- a/bridgetown-website/bridgetown.config.yml +++ b/bridgetown-website/bridgetown.config.yml @@ -1,9 +1,7 @@ url: "https://www.bridgetownrb.com" permalink: simple timezone: America/Los_Angeles - -autoloader_collapsed_paths: - - plugins/testing +template_engine: serbea collections: docs: @@ -18,6 +16,3 @@ pagination: # Environment-specific settings development: unpublished: true - -svg: - optimize: true diff --git a/bridgetown-website/config.ru b/bridgetown-website/config.ru index acddeba11..80ee3495e 100644 --- a/bridgetown-website/config.ru +++ b/bridgetown-website/config.ru @@ -1,7 +1,7 @@ -# frozen_string_literal: true +# This file is used by Rack-based servers during the Bridgetown boot process. require "bridgetown-core/rack/boot" Bridgetown::Rack.boot -run RodaApp.freeze.app +run RodaApp.freeze.app # see server/roda_app.rb diff --git a/bridgetown-website/config/esbuild.defaults.js b/bridgetown-website/config/esbuild.defaults.js new file mode 100644 index 000000000..678df4224 --- /dev/null +++ b/bridgetown-website/config/esbuild.defaults.js @@ -0,0 +1,215 @@ +// This file is created and managed by Bridgetown. +// Instead of editing this file, add your overrides to `esbuild.config.js` +// +// To update this file to the latest version provided by Bridgetown, +// run `bridgetown esbuild update`. Any changes to this file will be overwritten +// when an update is applied hence we strongly recommend adding overrides to +// `esbuild.config.js` instead of editing this file. +// +// Shipped with Bridgetown v1.0.0.alpha11 + +const path = require("path") +const fsLib = require("fs") +const fs = fsLib.promises +const glob = require("glob") +const postcss = require("postcss") +const postCssImport = require("postcss-import") +const readCache = require("read-cache") + +// Glob plugin derived from: +// https://github.com/thomaschaaf/esbuild-plugin-import-glob +// https://github.com/xiaohui-zhangxh/jsbundling-rails/commit/b15025dcc20f664b2b0eb238915991afdbc7cb58 +const importGlobPlugin = () => ({ + name: "import-glob", + setup: (build) => { + build.onResolve({ filter: /\*/ }, async (args) => { + if (args.resolveDir === "") { + return; // Ignore unresolvable paths + } + + const adjustedPath = args.path.replace(/^bridgetownComponents\//, "../../src/_components/") + + return { + path: adjustedPath, + namespace: "import-glob", + pluginData: { + path: adjustedPath, + resolveDir: args.resolveDir, + }, + } + }) + + build.onLoad({ filter: /.*/, namespace: "import-glob" }, async (args) => { + const files = glob.sync(args.pluginData.path, { + cwd: args.pluginData.resolveDir, + }).sort() + + const importerCode = ` + ${files + .map((module, index) => `import * as module${index} from '${module}'`) + .join(';')} + const modules = {${files + .map((module, index) => ` + "${module.replace("../../src/_components/", "")}": module${index},`) + .join("")} + }; + export default modules; + ` + + return { contents: importerCode, resolveDir: args.pluginData.resolveDir } + }) + }, +}) + +const postCssPlugin = (options) => ({ + name: "postcss", + async setup(build) { + // Process .css files with PostCSS + build.onLoad({ filter: /\.(css)$/ }, async (args) => { + const additionalFilePaths = [] + const css = await fs.readFile(args.path, "utf8") + + // Configure import plugin so PostCSS can properly resolve `@import`ed CSS files + const importPlugin = postCssImport({ + filter: itemPath => { + // We'll want to track any imports later when in watch mode + additionalFilePaths.push(path.resolve(path.dirname(args.path), itemPath)) + return true + }, + load: async filename => { + let contents = await readCache(filename, "utf-8") + const filedir = path.dirname(filename) + + // We need to transform `url(...)` in imported CSS so the filepaths are properly + // relative to the entrypoint. Seems icky to have to hack this! C'est la vie... + contents = contents.replace(/url\(['"]?\.\/(.*?)['"]?\)/g, (_match, p1) => { + const relpath = path.relative(args.path, path.resolve(filedir, p1)).replace(/^\.\.\//, "") + return `url("${relpath}")` + }) + return contents + } + }) + + // Process the file through PostCSS + const result = await postcss([importPlugin, ...options.plugins]).process(css, { + map: true, + ...options.options, + from: args.path, + }); + + return { + contents: result.css, + loader: "css", + watchFiles: [args.path, ...additionalFilePaths], + } + }) + }, +}) + +// Set up some nice default for Bridgetown +const bridgetownPreset = (outputFolder) => ({ + name: "bridgetownPreset", + async setup(build) { + // Ensure any imports anywhere starting with `/` are left verbatim + // so they can be used in-browser for actual `src` repo files + build.onResolve({ filter: /^\// }, args => { + return { path: args.path, external: true } + }) + + build.onStart(() => { + console.log("esbuild: frontend bundling started...") + }) + + // Generate the final output manifest + build.onEnd(async (result) => { + if (!result.metafile) { + console.warn("esbuild: build process error, cannot write manifest") + return + } + + const manifest = {} + const entrypoints = [] + + // We don't need `frontend/` cluttering up everything + const stripPrefix = (str) => str.replace(/^frontend\//, "") + + // For calculating the file size of bundle output + const fileSize = (path) => { + const { size } = fsLib.statSync(path) + const i = Math.floor(Math.log(size) / Math.log(1024)) + return (size / Math.pow(1024, i)).toFixed(2) * 1 + ['B', 'KB', 'MB', 'GB', 'TB'][i] + } + + // Let's loop through all the various outputs + for (const key in result.metafile.outputs) { + const value = result.metafile.outputs[key] + const inputs = Object.keys(value.inputs) + const pathShortener = new RegExp(`^${outputFolder}\\/_bridgetown\\/static\\/`, "g") + const outputPath = key.replace(pathShortener, "") + + if (value.entryPoint) { + // We have an entrypoint! + manifest[stripPrefix(value.entryPoint)] = outputPath + entrypoints.push([outputPath, fileSize(key)]) + } else if (key.match(/index(\.js)?\.[^-.]*\.css/) && inputs.find(item => item.endsWith("index.css"))) { + // Special treatment for index.css + manifest[stripPrefix(inputs.find(item => item.endsWith("index.css")))] = outputPath + entrypoints.push([outputPath, fileSize(key)]) + } else if (inputs.length > 0) { + // Naive implementation, we'll just grab the first input and hope it's accurate + manifest[stripPrefix(inputs[0])] = outputPath + } + } + + const manifestFolder = path.join(process.cwd(), ".bridgetown-cache", "frontend-bundling") + await fs.mkdir(manifestFolder, { recursive: true }) + await fs.writeFile(path.join(manifestFolder, "manifest.json"), JSON.stringify(manifest)) + + console.log("esbuild: frontend bundling complete!") + console.log("esbuild: entrypoints processed:") + entrypoints.forEach(entrypoint => { + const [entrypointName, entrypointSize] = entrypoint + console.log(` - ${entrypointName}: ${entrypointSize}`) + }) + }) + } +}) + +// Load the PostCSS config from postcss.config.js or whatever else is a supported location/format +const postcssrc = require("postcss-load-config") +const postCssConfig = postcssrc.sync() + +module.exports = (outputFolder, esbuildOptions) => { + esbuildOptions.plugins = esbuildOptions.plugins || [] + // Add the PostCSS & glob plugins to the top of the plugin stack + esbuildOptions.plugins.unshift(postCssPlugin(postCssConfig)) + esbuildOptions.plugins.unshift(importGlobPlugin()) + // Add the Bridgetown preset to the bottom of the plugin stack + esbuildOptions.plugins.push(bridgetownPreset(outputFolder)) + + // esbuild, take it away! + require("esbuild").build({ + bundle: true, + loader: { + ".jpg": "file", + ".png": "file", + ".gif": "file", + ".svg": "file", + ".woff": "file", + ".woff2": "file", + ".ttf": "file", + ".eot": "file", + }, + resolveExtensions: [".tsx",".ts",".jsx",".js",".css",".json",".js.rb"], + nodePaths: ["frontend/javascript", "frontend/styles"], + watch: process.argv.includes("--watch"), + minify: process.argv.includes("--minify"), + sourcemap: true, + target: "es2016", + entryPoints: ["frontend/javascript/index.js"], + entryNames: "[dir]/[name].[hash]", + outdir: path.join(process.cwd(), `${outputFolder}/_bridgetown/static`), + metafile: true, + ...esbuildOptions, + }).catch(() => process.exit(1)) +} diff --git a/bridgetown-website/config/webpack.defaults.js b/bridgetown-website/config/webpack.defaults.js deleted file mode 100644 index 932a24aee..000000000 --- a/bridgetown-website/config/webpack.defaults.js +++ /dev/null @@ -1,130 +0,0 @@ -// This file is created and managed by Bridgetown. -// Instead of editing this file, add your overrides to `webpack.config.js` -// -// To update this file to the latest version provided by Bridgetown, -// run `bridgetown webpack update`. Any changes to this file will be overwritten -// when an update is applied hence we strongly recommend adding overrides to -// `webpack.config.js` instead of editing this file. -// -// Shipped with Bridgetown v1.0.0.alpha10 - -const path = require("path"); -const rootDir = path.resolve(__dirname, "..") -const MiniCssExtractPlugin = require("mini-css-extract-plugin"); -const { WebpackManifestPlugin } = require("webpack-manifest-plugin"); - -// Input and output - -const entry = { main: path.resolve(rootDir, "frontend", "javascript", "index.js") } -const output = { - path: path.resolve(rootDir, "output", "_bridgetown", "static", "js"), - filename: "[name].[contenthash].js", - publicPath: "", -} - -// Rules and Loaders - -const jsRule = { - test: /\.(js|jsx)$/, - use: { - loader: "esbuild-loader", - options: { - target: 'es2016' - }, - }, -} - -const cssRules = { - test: /\.(s[ac]|c)ss$/, - use: [ - MiniCssExtractPlugin.loader, - { - loader: "css-loader", - options: { - url: url => !url.startsWith('/'), - importLoaders: 1 - } - } - ], - mode: 'sass', - - postcss: () => { - cssRules.use.push("postcss-loader") - return { test: cssRules.test, use: cssRules.use } - }, - - sass: () => { - cssRules.use.push({ - loader: "sass-loader", - options: { - implementation: require("sass"), - sassOptions: { - fiber: false, - includePaths: [ - path.resolve(rootDir, "src/_components") - ], - }, - }, - }) - return { test: cssRules.test, use: cssRules.use } - } -} - -const fontsRule = { - test: /\.woff2?$|\.ttf$|\.eot$/, - loader: "file-loader", - options: { - name: "[name]-[contenthash].[ext]", - outputPath: "../fonts", - publicPath: "../fonts", - }, -} - -const imagesRule = { - test: /\.png?$|\.gif$|\.jpg$|\.svg$/, - loader: "file-loader", - options: { - name: "[path][name]-[contenthash].[ext]", - outputPath: "../", - publicPath: "../", - }, -} - -// Default configuration object - -module.exports = { - entry: entry, - devtool: "source-map", - // Set some or all of these to true if you want more verbose logging: - stats: { - modules: false, - builtAt: false, - timings: false, - children: false, - }, - output: output, - resolve: { - extensions: [".js", ".jsx"], - modules: [ - path.resolve(rootDir, 'frontend', 'javascript'), - path.resolve(rootDir, 'frontend', 'styles'), - path.resolve(rootDir, 'node_modules') - ], - alias: { - bridgetownComponents: path.resolve(rootDir, "src", "_components") - } - }, - plugins: [ - new MiniCssExtractPlugin({ - filename: "../css/[name].[contenthash].css", - }), - new WebpackManifestPlugin({ - fileName: path.resolve(rootDir, ".bridgetown-cache", "frontend-bundling", "manifest.json"), - }), - ], - module: { - rules: [ - jsRule, cssRules[cssRules.mode](), fontsRule, imagesRule - ] - } -} \ No newline at end of file diff --git a/bridgetown-website/esbuild.config.js b/bridgetown-website/esbuild.config.js new file mode 100644 index 000000000..31a43504b --- /dev/null +++ b/bridgetown-website/esbuild.config.js @@ -0,0 +1,19 @@ +const build = require("./config/esbuild.defaults.js") + +// Update this if you need to configure a destination folder other than `output` +const outputFolder = "output" + +const ruby2js = require("@ruby2js/esbuild-plugin") + +const esbuildOptions = { + entryPoints: ["frontend/javascript/index.js.rb"], + target: "es2020", + plugins: [ + ruby2js({ + eslevel: 2020, + filters: ["camelCase", "functions", "lit", "esm", "return"] + }), + ] +} + +build(outputFolder, esbuildOptions) diff --git a/bridgetown-website/frontend/fonts/dm/DMSerifDisplay-Regular.woff2 b/bridgetown-website/frontend/fonts/dm/DMSerifDisplay-Regular.woff2 new file mode 100644 index 000000000..9e35d9923 Binary files /dev/null and b/bridgetown-website/frontend/fonts/dm/DMSerifDisplay-Regular.woff2 differ diff --git a/bridgetown-website/frontend/fonts/dm/dm.css b/bridgetown-website/frontend/fonts/dm/dm.css new file mode 100644 index 000000000..88925f911 --- /dev/null +++ b/bridgetown-website/frontend/fonts/dm/dm.css @@ -0,0 +1,6 @@ +@font-face { + font-family: "DMSerif"; + src: url("./DMSerifDisplay-Regular.woff2") format("woff2"); + font-weight: normal; + font-style: normal; +} diff --git a/bridgetown-website/frontend/fonts/forkawesome-webfont.eot b/bridgetown-website/frontend/fonts/forkawesome-webfont.eot deleted file mode 100644 index b96d208fa..000000000 Binary files a/bridgetown-website/frontend/fonts/forkawesome-webfont.eot and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/forkawesome-webfont.svg b/bridgetown-website/frontend/fonts/forkawesome-webfont.svg deleted file mode 100644 index e99720454..000000000 --- a/bridgetown-website/frontend/fonts/forkawesome-webfont.svg +++ /dev/null @@ -1,2849 +0,0 @@ - - - - - -Created by FontForge 20180321 at Mon Feb 18 18:29:30 2019 - By Julien Deswaef -The Fork Awesome font is licensed under the SIL OFL 1.1 (http://scripts.sil.org/OFL). Fork Awesome is a fork based of off Font Awesome 4.7.0 by Dave Gandy. More info on licenses at https://forkawesome.github.io - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bridgetown-website/frontend/fonts/forkawesome-webfont.ttf b/bridgetown-website/frontend/fonts/forkawesome-webfont.ttf deleted file mode 100644 index 6cf62efb8..000000000 Binary files a/bridgetown-website/frontend/fonts/forkawesome-webfont.ttf and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/forkawesome-webfont.woff b/bridgetown-website/frontend/fonts/forkawesome-webfont.woff deleted file mode 100644 index 477da445a..000000000 Binary files a/bridgetown-website/frontend/fonts/forkawesome-webfont.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/forkawesome-webfont.woff2 b/bridgetown-website/frontend/fonts/forkawesome-webfont.woff2 deleted file mode 100644 index f3520b533..000000000 Binary files a/bridgetown-website/frontend/fonts/forkawesome-webfont.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Black.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-Black.woff deleted file mode 100644 index c7737ed3d..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Black.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Black.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-Black.woff2 deleted file mode 100644 index b16b995be..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Black.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-BlackItalic.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-BlackItalic.woff deleted file mode 100644 index b5f144764..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-BlackItalic.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-BlackItalic.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-BlackItalic.woff2 deleted file mode 100644 index a3f1b70cd..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-BlackItalic.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Bold.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-Bold.woff deleted file mode 100644 index e38455587..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Bold.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Bold.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-Bold.woff2 deleted file mode 100644 index 835dd4977..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Bold.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-BoldItalic.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-BoldItalic.woff deleted file mode 100644 index ffac3f59b..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-BoldItalic.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-BoldItalic.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-BoldItalic.woff2 deleted file mode 100644 index 1a41a14ff..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-BoldItalic.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraBold.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraBold.woff deleted file mode 100644 index 885ac94fb..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraBold.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraBold.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraBold.woff2 deleted file mode 100644 index ae956b150..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraBold.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraBoldItalic.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraBoldItalic.woff deleted file mode 100644 index d6cf86233..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraBoldItalic.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraBoldItalic.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraBoldItalic.woff2 deleted file mode 100644 index 86578995d..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraBoldItalic.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraLight.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraLight.woff deleted file mode 100644 index ff7691932..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraLight.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraLight.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraLight.woff2 deleted file mode 100644 index 694b2df9f..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraLight.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraLightItalic.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraLightItalic.woff deleted file mode 100644 index c6ed13a4f..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraLightItalic.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraLightItalic.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraLightItalic.woff2 deleted file mode 100644 index 9a7bd1109..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-ExtraLightItalic.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Italic.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-Italic.woff deleted file mode 100644 index 4fdb59dc2..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Italic.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Italic.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-Italic.woff2 deleted file mode 100644 index deca637d8..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Italic.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Light.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-Light.woff deleted file mode 100644 index 42850acc0..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Light.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Light.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-Light.woff2 deleted file mode 100644 index 65a7daddd..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Light.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-LightItalic.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-LightItalic.woff deleted file mode 100644 index c4ed9a94f..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-LightItalic.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-LightItalic.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-LightItalic.woff2 deleted file mode 100644 index 555fc5595..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-LightItalic.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Medium.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-Medium.woff deleted file mode 100644 index 495faef7f..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Medium.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Medium.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-Medium.woff2 deleted file mode 100644 index 871ce4ce5..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Medium.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-MediumItalic.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-MediumItalic.woff deleted file mode 100644 index 389c7a2bf..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-MediumItalic.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-MediumItalic.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-MediumItalic.woff2 deleted file mode 100644 index aa8057992..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-MediumItalic.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Regular.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-Regular.woff deleted file mode 100644 index fa7715d12..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Regular.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Regular.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-Regular.woff2 deleted file mode 100644 index b52dd0a0b..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Regular.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-SemiBold.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-SemiBold.woff deleted file mode 100644 index 18d7749f5..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-SemiBold.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-SemiBold.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-SemiBold.woff2 deleted file mode 100644 index ece5204a1..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-SemiBold.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-SemiBoldItalic.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-SemiBoldItalic.woff deleted file mode 100644 index 8ee64396a..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-SemiBoldItalic.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-SemiBoldItalic.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-SemiBoldItalic.woff2 deleted file mode 100644 index b32c0ba3b..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-SemiBoldItalic.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Thin.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-Thin.woff deleted file mode 100644 index 1a22286f6..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Thin.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-Thin.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-Thin.woff2 deleted file mode 100644 index c56bc7ca6..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-Thin.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-ThinItalic.woff b/bridgetown-website/frontend/fonts/inter-web/Inter-ThinItalic.woff deleted file mode 100644 index d8ec8373a..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-ThinItalic.woff and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-ThinItalic.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-ThinItalic.woff2 deleted file mode 100644 index eca5608c0..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-ThinItalic.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-italic.var.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-italic.var.woff2 deleted file mode 100644 index 1f5d92611..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-italic.var.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter-roman.var.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter-roman.var.woff2 deleted file mode 100644 index 05621d8d1..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter-roman.var.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter-web/Inter.var.woff2 b/bridgetown-website/frontend/fonts/inter-web/Inter.var.woff2 deleted file mode 100644 index 46bb51539..000000000 Binary files a/bridgetown-website/frontend/fonts/inter-web/Inter.var.woff2 and /dev/null differ diff --git a/bridgetown-website/frontend/fonts/inter.css b/bridgetown-website/frontend/fonts/inter.css deleted file mode 100644 index 6bb35b049..000000000 --- a/bridgetown-website/frontend/fonts/inter.css +++ /dev/null @@ -1,211 +0,0 @@ -/* Commenting out the weights we're not using: */ - -/* -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 100; - font-display: swap; - src: url("inter-web/Inter-Thin.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-Thin.woff?v=3.12") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 100; - font-display: swap; - src: url("inter-web/Inter-ThinItalic.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-ThinItalic.woff?v=3.12") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 200; - font-display: swap; - src: url("inter-web/Inter-ExtraLight.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-ExtraLight.woff?v=3.12") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 200; - font-display: swap; - src: url("inter-web/Inter-ExtraLightItalic.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-ExtraLightItalic.woff?v=3.12") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 300; - font-display: swap; - src: url("inter-web/Inter-Light.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-Light.woff?v=3.12") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 300; - font-display: swap; - src: url("inter-web/Inter-LightItalic.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-LightItalic.woff?v=3.12") format("woff"); -} -*/ - -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url("inter-web/Inter-Regular.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-Regular.woff?v=3.12") format("woff"); -} -@font-face { - font-family: "Inter"; - font-style: italic; - font-weight: 400; - font-display: swap; - src: url("inter-web/Inter-Italic.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-Italic.woff?v=3.12") format("woff"); -} - -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url("inter-web/Inter-Medium.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-Medium.woff?v=3.12") format("woff"); -} -@font-face { - font-family: "Inter"; - font-style: italic; - font-weight: 500; - font-display: swap; - src: url("inter-web/Inter-MediumItalic.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-MediumItalic.woff?v=3.12") format("woff"); -} - -/* -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 600; - font-display: swap; - src: url("inter-web/Inter-SemiBold.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-SemiBold.woff?v=3.12") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 600; - font-display: swap; - src: url("inter-web/Inter-SemiBoldItalic.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-SemiBoldItalic.woff?v=3.12") format("woff"); -} -*/ - -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 700; - font-display: swap; - src: url("inter-web/Inter-Bold.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-Bold.woff?v=3.12") format("woff"); -} -@font-face { - font-family: "Inter"; - font-style: italic; - font-weight: 700; - font-display: swap; - src: url("inter-web/Inter-BoldItalic.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-BoldItalic.woff?v=3.12") format("woff"); -} - -/* -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 800; - font-display: swap; - src: url("inter-web/Inter-ExtraBold.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-ExtraBold.woff?v=3.12") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 800; - font-display: swap; - src: url("inter-web/Inter-ExtraBoldItalic.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-ExtraBoldItalic.woff?v=3.12") format("woff"); -} -*/ - -@font-face { - font-family: "Inter"; - font-style: normal; - font-weight: 900; - font-display: swap; - src: url("inter-web/Inter-Black.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-Black.woff?v=3.12") format("woff"); -} -@font-face { - font-family: "Inter"; - font-style: italic; - font-weight: 900; - font-display: swap; - src: url("inter-web/Inter-BlackItalic.woff2?v=3.12") format("woff2"), - url("inter-web/Inter-BlackItalic.woff?v=3.12") format("woff"); -} - -/* ------------------------------------------------------- -Variable font. -Usage: - - html { font-family: 'Inter', sans-serif; } - @supports (font-variation-settings: normal) { - html { font-family: 'Inter var', sans-serif; } - } -*/ -/* -@font-face { - font-family: 'Inter var'; - font-weight: 100 900; - font-display: swap; - font-style: normal; - font-named-instance: 'Regular'; - src: url("inter-web/Inter-roman.var.woff2?v=3.12") format("woff2"); -} -@font-face { - font-family: 'Inter var'; - font-weight: 100 900; - font-display: swap; - font-style: italic; - font-named-instance: 'Italic'; - src: url("inter-web/Inter-italic.var.woff2?v=3.12") format("woff2"); -} -*/ - -/* -------------------------------------------------------------------------- -[EXPERIMENTAL] Multi-axis, single variable font. - -Slant axis is not yet widely supported (as of February 2019) and thus this -multi-axis single variable font is opt-in rather than the default. - -When using this, you will probably need to set font-variation-settings -explicitly, e.g. - - * { font-variation-settings: "slnt" 0deg } - .italic { font-variation-settings: "slnt" 10deg } - -*/ -/* -@font-face { - font-family: 'Inter var experimental'; - font-weight: 100 900; - font-display: swap; - font-style: oblique 0deg 10deg; - src: url("inter-web/Inter.var.woff2?v=3.12") format("woff2"); -} -*/ diff --git a/bridgetown-website/frontend/fonts/redhat/RedHatDisplayVFModified.woff2 b/bridgetown-website/frontend/fonts/redhat/RedHatDisplayVFModified.woff2 new file mode 100644 index 000000000..17ad213df Binary files /dev/null and b/bridgetown-website/frontend/fonts/redhat/RedHatDisplayVFModified.woff2 differ diff --git a/bridgetown-website/frontend/fonts/redhat/RedHatTextVF-ItalicModified.woff2 b/bridgetown-website/frontend/fonts/redhat/RedHatTextVF-ItalicModified.woff2 new file mode 100644 index 000000000..e0dc2b18f Binary files /dev/null and b/bridgetown-website/frontend/fonts/redhat/RedHatTextVF-ItalicModified.woff2 differ diff --git a/bridgetown-website/frontend/fonts/redhat/RedHatTextVFModified.woff2 b/bridgetown-website/frontend/fonts/redhat/RedHatTextVFModified.woff2 new file mode 100644 index 000000000..93d4cf824 Binary files /dev/null and b/bridgetown-website/frontend/fonts/redhat/RedHatTextVFModified.woff2 differ diff --git a/bridgetown-website/frontend/fonts/redhat/redhat.css b/bridgetown-website/frontend/fonts/redhat/redhat.css new file mode 100644 index 000000000..92750c552 --- /dev/null +++ b/bridgetown-website/frontend/fonts/redhat/redhat.css @@ -0,0 +1,23 @@ +@font-face { + font-family: 'RedHatDisplay'; + src: url("./RedHatDisplayVFModified.woff2") format('woff2-variations'); + font-weight: 300 900; + font-style: normal; + font-display: fallback; +} + +@font-face { + font-family: 'RedHatText'; + src: url("./RedHatTextVFModified.woff2") format('woff2-variations'); + font-weight: 400 900; + font-style: normal; + font-display: fallback; +} + +@font-face { + font-family: 'RedHatText'; + src: url("./RedHatTextVF-ItalicModified.woff2") format('woff2-variations'); + font-weight: 400 900; + font-style: italic; + font-display: fallback; +} diff --git a/bridgetown-website/frontend/javascript/index.js b/bridgetown-website/frontend/javascript/index.js deleted file mode 100644 index 03093bc60..000000000 --- a/bridgetown-website/frontend/javascript/index.js +++ /dev/null @@ -1,54 +0,0 @@ -import "../styles/index.scss" -import Swup from "swup" -import SwupSlideTheme from "@swup/slide-theme" -import SwupBodyClassPlugin from "@swup/body-class-plugin" -import SwupScrollPlugin from "@swup/scroll-plugin" -import animateScrollTo from "animated-scroll-to" -import "bridgetown-quick-search/dist" -import { toggleMenuIcon, addHeadingAnchors } from "./lib/functions.js.rb" - -document.addEventListener('DOMContentLoaded', () => { - // Docs layout has a sidebar, so we need to adjust Swup accordingly - let containers, mainEl - - if (document.querySelector("layout-sidebar")) { - mainEl = "#swup-with-sidebar" - containers = [mainEl, "layout-sidebar", "#topnav"] - let navActivated = false - document.querySelector("#mobile-nav-activator").addEventListener("click", event => { - animateScrollTo( - document.querySelector("layout-sidebar"), - { - maxDuration: 500 - } - ) - if (!navActivated) { - const button = event.currentTarget - toggleMenuIcon(button) - navActivated = true; - setTimeout(() => { toggleMenuIcon(button); navActivated = false }, 6000) - } - }) - } else { - mainEl = "#swup" - containers = [mainEl, "#topnav"] - } - - if (!window.matchMedia('(prefers-reduced-motion)').matches) { - const swup = new Swup({ - containers: containers, - plugins: [ - new SwupSlideTheme({ mainElement: mainEl }), - new SwupBodyClassPlugin(), - new SwupScrollPlugin({ animateScroll: false }) - ], - - }) - - swup.on('contentReplaced', function () { - addHeadingAnchors() - }) - } - - addHeadingAnchors() -}) diff --git a/bridgetown-website/frontend/javascript/index.js.rb b/bridgetown-website/frontend/javascript/index.js.rb new file mode 100644 index 000000000..5446c9f4c --- /dev/null +++ b/bridgetown-website/frontend/javascript/index.js.rb @@ -0,0 +1,69 @@ +import '@shoelace-style/shoelace/dist/themes/light.css' +import '@shoelace-style/shoelace/dist/components/alert/alert.js' +import '@shoelace-style/shoelace/dist/components/avatar/avatar.js' +import '@shoelace-style/shoelace/dist/components/breadcrumb/breadcrumb.js' +import '@shoelace-style/shoelace/dist/components/breadcrumb-item/breadcrumb-item.js' +import '@shoelace-style/shoelace/dist/components/button/button.js' +import '@shoelace-style/shoelace/dist/components/card/card.js' +import '@shoelace-style/shoelace/dist/components/dialog/dialog.js' +import '@shoelace-style/shoelace/dist/components/form/form.js' +import '@shoelace-style/shoelace/dist/components/icon/icon.js' +import '@shoelace-style/shoelace/dist/components/input/input.js' +import '@shoelace-style/shoelace/dist/components/tag/tag.js' +import [ register_icon_library ], from: '@shoelace-style/shoelace/dist/utilities/icon-library.js' +import [ set_animation ], from: '@shoelace-style/shoelace/dist/utilities/animation-registry.js' +import "bridgetown-quick-search/dist" +import "*", as: Turbo, from: "@hotwired/turbo" + +import hotkeys from "hotkeys-js" +hotkeys "cmd+k,ctrl+k" do |event| + event.prevent_default() + document.query_selector("bridgetown-search-form > input").focus() +end + +import "turbo_transitions" +import "wiggle_note" +import [ add_heading_anchors ], from: "./lib/functions" + +set_timeout 1000 do + document.documentElement.remove_attribute :fresh + + document.query_selector("bridgetown-search-form > input").add_event_listener :keydown do |event| + if event.key_code == 13 + document.query_selector("bridgetown-search-results").show_results_for_query(event.target.value) + end + + event.target.closest("sl-bar-item").query_selector("kbd").style.display = "none" + end +end + +#import smoothscroll from 'smoothscroll-polyfill' +#smoothscroll.polyfill() + +import "index.css" + +import components from "bridgetownComponents/**/*.{js,jsx,js.rb,css}" +Object.entries(components) + +register_icon_library('remixicon', + resolver: -> name do + match = name.match(/^(.*?)\/(.*?)(-(fill))?$/) + match[1] = match[1].char_at(0).upcase() + match[1].slice(1) + "https://cdn.jsdelivr.net/npm/remixicon@2.5.0/icons/#{match[1]}/#{match[2]}#{match[3] || '-line'}.svg"; + end, + mutator: -> svg { svg.set_attribute('fill', 'currentColor') } +) + +# This is weird, I'm not sure why I have to do this. +document.add_event_listener "turbo:load" do + document.query_selector_all("sl-button").each do |button| + if button.parent_node.local_name == :a + button.add_event_listener :click do |event| + event.prevent_default() + Turbo.visit event.current_target.parent_node.href + end + end + end + + add_heading_anchors() +end diff --git a/bridgetown-website/frontend/javascript/lib/functions.js.rb b/bridgetown-website/frontend/javascript/lib/functions.js.rb index 1891de687..350e29a01 100644 --- a/bridgetown-website/frontend/javascript/lib/functions.js.rb +++ b/bridgetown-website/frontend/javascript/lib/functions.js.rb @@ -1,18 +1,9 @@ -export toggle_menu_icon = ->(button) do - button.query_selector_all(".icon").each do |item| - item.class_list.toggle "not-shown" - end - button.query_selector(".icon:not(.not-shown)").class_list.add("shown") -end - -export add_heading_anchors = ->() do - if document.body.class_list.contains? "docs" - document.query_selector_all(".content h2[id], .content h3[id]").each do |heading| - anchor_link = document.create_element("a") - anchor_link.inner_text = "#" - anchor_link.href = "##{heading.id}" - anchor_link.class_list.add ".heading-anchor".slice(1) # purgecss - heading.append_child anchor_link - end +export def add_heading_anchors() + document.query_selector_all("article h2[id], article h3[id]").each do |heading| + anchor_link = document.create_element("a") + anchor_link.inner_text = "#" + anchor_link.href = "##{heading.id}" + anchor_link.class_list.add "heading-anchor" + heading.append_child anchor_link end end diff --git a/bridgetown-website/frontend/javascript/turbo_transitions.js.rb b/bridgetown-website/frontend/javascript/turbo_transitions.js.rb new file mode 100644 index 000000000..af04b90bf --- /dev/null +++ b/bridgetown-website/frontend/javascript/turbo_transitions.js.rb @@ -0,0 +1,39 @@ +document.add_event_listener "turbo:visit" do + main = document.query_selector "main-content" + + movement, scale = "15px", "0.99" + movement, scale = "7px", "1" if window.match_media("(prefers-reduced-motion: reduce)").matches + + main.style.transform_origin = "50% 0%" + main.dataset[:animating_out] = true + main.animate [ + { opacity: 1, transform: "translateY(0px) scale(1)" }, + { opacity: 0, transform: "translateY(#{movement}) scale(#{scale})" }, + ], duration: 300, easing: "cubic-bezier(0.45, 0, 0.55, 1)" + + Promise.all( + main.get_animations().map do |animation| + animation.finished + end + ).then do + main.style.visibility = "hidden" if main.dataset[:animating_out] + end +end + +document.add_event_listener "turbo:load" do + set_timeout 1000 do + document.document_element.set_attribute :loaded, "" + end + main = document.query_selector "main-content" + + movement, scale = "-10px", "0.99" + movement, scale = "-5px", "1" if window.match_media("(prefers-reduced-motion: reduce)").matches + + main.style.visibility = "visible" + main.style.transform_origin = "50% 0%" + main.dataset.delete :animating_out + main.animate [ + { opacity: 0, transform: "translateY(#{movement}) scale(#{scale})" }, + { opacity: 1, transform: "translateY(0px) scale(1)" }, + ], duration: 150, easing: "cubic-bezier(0.45, 0, 0.55, 1)" +end diff --git a/bridgetown-website/frontend/javascript/wiggle_note.js.rb b/bridgetown-website/frontend/javascript/wiggle_note.js.rb new file mode 100644 index 000000000..7d4f67fae --- /dev/null +++ b/bridgetown-website/frontend/javascript/wiggle_note.js.rb @@ -0,0 +1,26 @@ +class WiggleNote < HTMLElement + def connected_callback() + self.style.display = "block" + self.style.transform = "rotate(-2.5deg)" + @observer = IntersectionObserver.new(wiggle, root: nil, rootMargin: "0px", threshold: 1.0) + @observer.observe self + end + + def wiggle(entries) + if entries.first.is_intersecting? + clear_timeout @timer + @timer = set_timeout 600 do + self.animate [ + { transform: "rotate(-2.5deg)" }, + { transform: "rotate(-0.1deg)" }, + { transform: "rotate(-4deg)" }, + { transform: "rotate(-0.5deg)" }, + { transform: "rotate(-3deg)" }, + { transform: "rotate(-2.5deg)" }, + ], duration: 600, easing: "cubic-bezier(0.25, 0, 0.55, 1)" + end + end + end +end + +custom_elements.define "wiggle-note", WiggleNote diff --git a/bridgetown-website/frontend/styles/bar.css b/bridgetown-website/frontend/styles/bar.css new file mode 100644 index 000000000..172243ce3 --- /dev/null +++ b/bridgetown-website/frontend/styles/bar.css @@ -0,0 +1,212 @@ +:root { + --sl-bar-padding: 6px; +} + +nav sl-bar { + & a { + display: inline-block; + margin-right: 1rem; + + @media (--sl-breakpoint-lg) { + margin-right: 0.5rem; + } + + &:last-of-type { + margin-right: 0; + } + } + + @media (--nav-minimal) { + flex-direction: column; + + &[expanded="false"] { + & sl-bar-item[expandable] { + display: none; + } + } + &[expanded="true"] { + margin-bottom: var(--sl-spacing-x-large); + } + } + + & sl-bar-item[mobileonly] { + height: 3.25rem; + } + + @media (--nav-fullsize) { + & sl-bar-item[mobileonly] { + display: none; + } + } + + & sl-bar-item[branding] a { + display: inline-flex; + justify-content: center; + flex-direction: column; + height: 120px; + padding: 8px; + border-radius: 12px; + background: var(--primary-color); + } +} + +sl-bar { + display: flex; +} + +sl-bar[wrap] { + flex-wrap: wrap; +} +sl-bar[spaced="evenly"] { + justify-content: space-evenly; +} +sl-bar[spaced="between"] { + justify-content: space-between; +} +sl-bar[align-items="start"] { + align-items: flex-start; +} +sl-bar[align-items="center"] { + align-items: center; +} +sl-bar[align-items="end"] { + align-items: flex-end; +} +sl-bar[wrap] > * { + flex-basis: 100%; +} +sl-bar[autosize] > * { + flex-basis: unset; +} +sl-bar[reverse] { + flex-direction: row-reverse; +} + +sl-bar-item { + padding: var(--sl-bar-padding, 0); +} + +sl-bar-item[size~="1/10"] { flex-basis: 10% !important; } +sl-bar-item[size~="2/10"] { flex-basis: 20% !important; } +sl-bar-item[size~="3/10"] { flex-basis: 30% !important; } +sl-bar-item[size~="4/10"] { flex-basis: 40% !important; } +sl-bar-item[size~="5/10"] { flex-basis: 50% !important; } +sl-bar-item[size~="6/10"] { flex-basis: 60% !important; } +sl-bar-item[size~="7/10"] { flex-basis: 70% !important; } +sl-bar-item[size~="8/10"] { flex-basis: 80% !important; } +sl-bar-item[size~="9/10"] { flex-basis: 90% !important; } +sl-bar-item[size~="1/3"] { flex-basis: 33.33% !important; } +sl-bar-item[size~="2/3"] { flex-basis: 66.66% !important; } +sl-bar-item[size~="1/4"] { flex-basis: 25% !important; } +sl-bar-item[size~="2/4"], sl-bar-item[size~="1/2"] { flex-basis: 50% !important; } +sl-bar-item[size~="3/4"] { flex-basis: 75% !important; } +sl-bar-item[size~="full"] { flex-basis: 100% !important; } + +@media (--sl-breakpoint-xs) { + sl-bar-item[size~="xs:1/10"] { flex-basis: 10% !important; } + sl-bar-item[size~="xs:2/10"] { flex-basis: 20% !important; } + sl-bar-item[size~="xs:3/10"] { flex-basis: 30% !important; } + sl-bar-item[size~="xs:4/10"] { flex-basis: 40% !important; } + sl-bar-item[size~="xs:5/10"] { flex-basis: 50% !important; } + sl-bar-item[size~="xs:6/10"] { flex-basis: 60% !important; } + sl-bar-item[size~="xs:7/10"] { flex-basis: 70% !important; } + sl-bar-item[size~="xs:8/10"] { flex-basis: 80% !important; } + sl-bar-item[size~="xs:9/10"] { flex-basis: 90% !important; } + sl-bar-item[size~="xs:1/3"] { flex-basis: 33.33% !important; } + sl-bar-item[size~="xs:2/3"] { flex-basis: 66.66% !important; } + sl-bar-item[size~="xs:1/4"] { flex-basis: 25% !important; } + sl-bar-item[size~="xs:2/4"], sl-bar-item[size~="xs:1/2"] { flex-basis: 50% !important; } + sl-bar-item[size~="xs:3/4"] { flex-basis: 75% !important; } + sl-bar-item[size~="xs:full"] { flex-basis: 100% !important; } +} + +@media (--sl-breakpoint-sm) { + sl-bar-item[size~="sm:1/10"] { flex-basis: 10% !important; } + sl-bar-item[size~="sm:2/10"] { flex-basis: 20% !important; } + sl-bar-item[size~="sm:3/10"] { flex-basis: 30% !important; } + sl-bar-item[size~="sm:4/10"] { flex-basis: 40% !important; } + sl-bar-item[size~="sm:5/10"] { flex-basis: 50% !important; } + sl-bar-item[size~="sm:6/10"] { flex-basis: 60% !important; } + sl-bar-item[size~="sm:7/10"] { flex-basis: 70% !important; } + sl-bar-item[size~="sm:8/10"] { flex-basis: 80% !important; } + sl-bar-item[size~="sm:9/10"] { flex-basis: 90% !important; } + sl-bar-item[size~="sm:1/3"] { flex-basis: 33.33% !important; } + sl-bar-item[size~="sm:2/3"] { flex-basis: 66.66% !important; } + sl-bar-item[size~="sm:1/4"] { flex-basis: 25% !important; } + sl-bar-item[size~="sm:2/4"], sl-bar-item[size~="sm:1/2"] { flex-basis: 50% !important; } + sl-bar-item[size~="sm:3/4"] { flex-basis: 75% !important; } + sl-bar-item[size~="sm:full"] { flex-basis: 100% !important; } +} + +@media (--sl-breakpoint-md) { + sl-bar-item[size~="md:1/10"] { flex-basis: 10% !important; } + sl-bar-item[size~="md:2/10"] { flex-basis: 20% !important; } + sl-bar-item[size~="md:3/10"] { flex-basis: 30% !important; } + sl-bar-item[size~="md:4/10"] { flex-basis: 40% !important; } + sl-bar-item[size~="md:5/10"] { flex-basis: 50% !important; } + sl-bar-item[size~="md:6/10"] { flex-basis: 60% !important; } + sl-bar-item[size~="md:7/10"] { flex-basis: 70% !important; } + sl-bar-item[size~="md:8/10"] { flex-basis: 80% !important; } + sl-bar-item[size~="md:9/10"] { flex-basis: 90% !important; } + sl-bar-item[size~="md:1/3"] { flex-basis: 33.33% !important; } + sl-bar-item[size~="md:2/3"] { flex-basis: 66.66% !important; } + sl-bar-item[size~="md:1/4"] { flex-basis: 25% !important; } + sl-bar-item[size~="md:2/4"], sl-bar-item[size~="md:1/2"] { flex-basis: 50% !important; } + sl-bar-item[size~="md:3/4"] { flex-basis: 75% !important; } + sl-bar-item[size~="md:full"] { flex-basis: 100% !important; } +} + +@media (--sl-breakpoint-lg) { + sl-bar-item[size~="lg:1/10"] { flex-basis: 10% !important; } + sl-bar-item[size~="lg:2/10"] { flex-basis: 20% !important; } + sl-bar-item[size~="lg:3/10"] { flex-basis: 30% !important; } + sl-bar-item[size~="lg:4/10"] { flex-basis: 40% !important; } + sl-bar-item[size~="lg:5/10"] { flex-basis: 50% !important; } + sl-bar-item[size~="lg:6/10"] { flex-basis: 60% !important; } + sl-bar-item[size~="lg:7/10"] { flex-basis: 70% !important; } + sl-bar-item[size~="lg:8/10"] { flex-basis: 80% !important; } + sl-bar-item[size~="lg:9/10"] { flex-basis: 90% !important; } + sl-bar-item[size~="lg:1/3"] { flex-basis: 33.33% !important; } + sl-bar-item[size~="lg:2/3"] { flex-basis: 66.66% !important; } + sl-bar-item[size~="lg:1/4"] { flex-basis: 25% !important; } + sl-bar-item[size~="lg:2/4"], sl-bar-item[size="lg:1/2"] { flex-basis: 50% !important; } + sl-bar-item[size~="lg:3/4"] { flex-basis: 75% !important; } + sl-bar-item[size~="lg:full"] { flex-basis: 100% !important; } +} + +@media (--sl-breakpoint-xl) { + sl-bar-item[size~="xl:1/10"] { flex-basis: 10% !important; } + sl-bar-item[size~="xl:2/10"] { flex-basis: 20% !important; } + sl-bar-item[size~="xl:3/10"] { flex-basis: 30% !important; } + sl-bar-item[size~="xl:4/10"] { flex-basis: 40% !important; } + sl-bar-item[size~="xl:5/10"] { flex-basis: 50% !important; } + sl-bar-item[size~="xl:6/10"] { flex-basis: 60% !important; } + sl-bar-item[size~="xl:7/10"] { flex-basis: 70% !important; } + sl-bar-item[size~="xl:8/10"] { flex-basis: 80% !important; } + sl-bar-item[size~="xl:9/10"] { flex-basis: 90% !important; } + sl-bar-item[size~="xl:1/3"] { flex-basis: 33.33% !important; } + sl-bar-item[size~="xl:2/3"] { flex-basis: 66.66% !important; } + sl-bar-item[size~="xl:1/4"] { flex-basis: 25% !important; } + sl-bar-item[size~="xl:2/4"], sl-bar-item[size~="xl:1/2"] { flex-basis: 50% !important; } + sl-bar-item[size~="xl:3/4"] { flex-basis: 75% !important; } + sl-bar-item[size~="xl:full"] { flex-basis: 100% !important; } +} + +@media (--sl-breakpoint-xxl) { + sl-bar-item[size~="xxl:1/10"] { flex-basis: 10% !important; } + sl-bar-item[size~="xxl:2/10"] { flex-basis: 20% !important; } + sl-bar-item[size~="xxl:3/10"] { flex-basis: 30% !important; } + sl-bar-item[size~="xxl:4/10"] { flex-basis: 40% !important; } + sl-bar-item[size~="xxl:5/10"] { flex-basis: 50% !important; } + sl-bar-item[size~="xxl:6/10"] { flex-basis: 60% !important; } + sl-bar-item[size~="xxl:7/10"] { flex-basis: 70% !important; } + sl-bar-item[size~="xxl:8/10"] { flex-basis: 80% !important; } + sl-bar-item[size~="xxl:9/10"] { flex-basis: 90% !important; } + sl-bar-item[size~="xxl:1/3"] { flex-basis: 33.33% !important; } + sl-bar-item[size~="xxl:2/3"] { flex-basis: 66.66% !important; } + sl-bar-item[size~="xxl:1/4"] { flex-basis: 25% !important; } + sl-bar-item[size~="xxl:2/4"], sl-bar-item[size~="xxl:1/2"] { flex-basis: 50% !important; } + sl-bar-item[size~="xxl:3/4"] { flex-basis: 75% !important; } + sl-bar-item[size~="xxl:full"] { flex-basis: 100% !important; } +} + diff --git a/bridgetown-website/frontend/styles/breakpoints.css b/bridgetown-website/frontend/styles/breakpoints.css new file mode 100644 index 000000000..cf1478a6b --- /dev/null +++ b/bridgetown-website/frontend/styles/breakpoints.css @@ -0,0 +1,11 @@ +/* See: https://github.com/postcss/postcss-custom-media */ + +@custom-media --sl-breakpoint-xs (max-width: 575px); +@custom-media --sl-breakpoint-sm (min-width: 576px) and (max-width: 767px); +@custom-media --sl-breakpoint-md (min-width: 768px) and (max-width: 991px); +@custom-media --sl-breakpoint-lg (min-width: 992px) and (max-width: 1199px); +@custom-media --sl-breakpoint-xl (min-width: 1200px) and (max-width: 1399px); +@custom-media --sl-breakpoint-xxl (min-width: 1400px); + +@custom-media --nav-minimal (max-width: 1023px); +@custom-media --nav-fullsize (min-width: 1024px); diff --git a/bridgetown-website/frontend/styles/content.css b/bridgetown-website/frontend/styles/content.css new file mode 100644 index 000000000..9e26ac4ec --- /dev/null +++ b/bridgetown-website/frontend/styles/content.css @@ -0,0 +1,188 @@ +body.homepage { + @media (--sl-breakpoint-xs) { + --h1-font-size: 2.5em; + --h2-font-size: 2.5em; + } +} + +body.docs, body.page, body.post { + --h2-font-size: 2em; + + @media (--nav-minimal) { + --h1-font-size: 2.6em; + } + + & h2, & h3 { + margin-top: 3rem; + } + + & h2 + h3 { + margin-top: 1rem; + } + + & ol, & ul { + padding-left: 0; + margin-left: 1.75em; + + & li { + margin-bottom: 0.3em; + } + + & ol, & ul { + margin-top: 0.4em; + margin-bottom: 0.8em; + } + } + + & article { + & img { + max-width: 100%; + } + + & figure { + margin-left: 0; + margin-right: 0; + } + + & figure > iframe { + @supports (aspect-ratio: 1 / 1) { + aspect-ratio: 16 / 9; + width: 100%; + height: 100%; + } + } + } +} + +body.docs { + & > main { + padding-top: 2rem; + display: grid; + grid-template-columns: minmax(0, 2.5fr) 1fr; + gap: 4rem; + margin-left: auto; + margin-right: auto; + max-width: calc(var(--max-content-width) + 2.25rem); + + @media (--nav-minimal) { + grid-template-columns: 1fr; + gap: 0; + } + } + + & article { + padding-left: 1.5rem; + + @media (--nav-minimal) { + width: 100vw; + padding-left: var(--sl-spacing-small); + padding-right: var(--sl-spacing-small); + } + } +} + +article-author { + display: block; + margin: 2em 0; + text-align: center; + font-weight: 520; + + & .avatar { + height: 48px; + width: 48px; + object-fit: cover; + border-radius: 50%; + vertical-align: middle; + margin-right: 0.5rem; + } +} + +.info-grid { + list-style-type: none; + margin: 3.5rem 0 0 !important; + + display: grid; + grid-template-columns: 1fr 1fr; + column-gap: 1.5rem; + row-gap: 2rem; + + @media (--sl-breakpoint-xs) { + grid-template-columns: 1fr; + } + + & li { + margin: 0 !important; + } + + & sl-card { + --padding: 2rem 1.25rem; + height: 100%; + width: 100%; + text-align: center; + + &::part(base) { + height: 100%; + } + + &::part(header), &::part(footer) { + padding: 1rem 1.25rem; + } + + &::part(body) { + flex-grow: 1; + } + + & [slot="header"] h3 { + margin: 0; + } + + & [slot="footer"] { + display: flex; + justify-content: space-between; + align-items: center; + + & :only-child { + margin: 0 auto; + } + + & img { + width: 50px; + border-radius: 50px; + vertical-align: middle; + margin-right: 0.3em; + } + } + } + + & q { + font-size: 110%; + font-weight: bold; + color: var(--color-dark-brick); + } + + & sl-card > sl-icon { + font-size: 1.5em; + margin-top: -0.25rem; + margin-bottom: 0.5rem; + color: var(--color-dark-brick); + } +} + +.heading-anchor { + position: absolute; + margin-left: 0.4em; + opacity: 0; + transition: opacity 0.3s; + font-size: 0.75em; + font-weight: 500; +} +h2 .heading-anchor { + margin-top: 0.2em; +} +h3 .heading-anchor { + margin-top: 0.3em; +} +h2:hover .heading-anchor, +h3:hover .heading-anchor { + opacity: 1; +} diff --git a/bridgetown-website/frontend/styles/content.scss b/bridgetown-website/frontend/styles/content.scss deleted file mode 100644 index bb9262654..000000000 --- a/bridgetown-website/frontend/styles/content.scss +++ /dev/null @@ -1,193 +0,0 @@ -// Set up Swup -// override theme speeds -.swup-transition-main { - transition: opacity 0.2s, transform 0.2s; -} - -html.is-animating { - .swup-transition-main { - transform: translate3d(0, -10px, 0); - } - - &.is-leaving { - .swup-transition-main { - transform: translate3d(0, 10px, 0); - } - - &.swup-theme-reverse { - .swup-transition-main { - transform: translate3d(0, 10px, 0); - } - - &.is-leaving { - .swup-transition-main { - transform: translate3d(0, -10px, 0); - } - } - } - } -} - -.content { - body.post & h3 { - text-align: center; - &:not(:first-child) { - margin-top: 3.5rem; - } - margin-bottom: 2.5rem; - color: $red; - } - - .highlight { - margin-top: 1em; - margin-bottom: 1em; - } - - h2:not(:first-child) { - margin-top: 1.4285em; - } -} - -body.docs .content { - .heading-anchor { - color: $info; - font-size: 0.9em; - margin-left: 0.5em; - opacity: 0; - transition: opacity 0.3s; - } - h2:hover .heading-anchor, - h3:hover .heading-anchor { - opacity: 1; - } -} - -.box.px-8 { - @include mobile { - padding-left: 1rem !important; - padding-right: 1rem !important; - } -} - -.box ul, -.box ol { - margin-top: 2rem !important; - margin-bottom: 2rem !important; - width: 85%; - - li + li { - margin-top: 2rem; - } -} - -.content a:not(.button), -a.wavy-underline { - -webkit-text-decoration: $green wavy underline; - text-decoration: $green wavy underline; - -webkit-text-decoration-thickness: 2px; - text-decoration-thickness: 2px; - - // 2px in Firefox looks wonky - @supports (-moz-appearance: none) { - text-decoration-thickness: 1px; - } -} - -.box .author { - color: $brown; - - .avatar { - height: 48px; - width: 48px; - object-fit: cover; - border-radius: 50%; - vertical-align: middle; - margin-right: 0.5rem; - } -} - -table.settings { - tr > td:first-child { - width: 65%; - } - &.bigger-output { - tr > td:first-child { - width: 40%; - } - } - &.biggest-output { - tr > td:first-child { - width: 25%; - } - } - .option, - .filter { - color: darken($blue, 10%); - } - .flag, - .output { - color: darken($orange, 20%); - } - p.default { - margin-top: -0.5em; - font-weight: bold; - code { - font-size: 1em; - color: darken($green, 40%); - } - } - - th, - td { - &:first-child { - background: lighten($white-ter, 2.5%); - } - } - - th { - text-transform: uppercase; - } - - @media screen and (max-width: 600px) { - th { - &:first-child:before { - content: "👇 "; - } - &:last-child:after { - content: " 👇"; - } - } - th, - td { - display: block; - width: 100% !important; - &:last-child { - text-align: right !important; - } - } - } -} - -h2.no_toc { - color: $orange; -} -ul#markdown-toc { - border-left: solid 5px $orange; - margin-left: -2rem; - margin-bottom: 4.25rem !important; - - list-style-type: none; - padding-left: calc(2rem - 5px); - - ul { - margin-top: 0.5em !important; - margin-bottom: 1em !important; - } - li + li { - margin-top: 0.2em; - } - a { - text-decoration: none; - font-weight: 500; - } -} diff --git a/bridgetown-website/frontend/styles/controls.scss b/bridgetown-website/frontend/styles/controls.scss deleted file mode 100644 index 73e13c3fd..000000000 --- a/bridgetown-website/frontend/styles/controls.scss +++ /dev/null @@ -1,109 +0,0 @@ -.button, -.control.has-icons-left .icon, -.control.has-icons-right .icon, -.input, -.pagination-ellipsis, -.pagination-link, -.pagination-next, -.pagination-previous, -.select:not(.is-multiple), -.select:not(.is-multiple) select, -.textarea { - height: 2.572em; -} - -.button:not(.has-mixed-case) { - text-transform: uppercase; -} - -.notification { - @each $name, $pair in $colors { - $color: nth($pair, 1); - $color-invert: nth($pair, 2); - - &.is-#{$name} { - a:not(.button) { - color: $color-invert; - text-decoration: underline; - } - } - } -} - -.navbar .bridgetown-logo { - transition: opacity 0.2s ease-in-out; -} - -a, -.button { - transition: 0.2s ease-in-out; - transition-property: background, background-color, color; -} - -body.post .button.is-small { - height: auto; - white-space: normal; -} - -@keyframes fade-in-button { - from { - opacity: 0; - transform: translate3d(0, 20px, 0); - } - to { - opacity: 1; - transform: translate3d(0, 0, 0); - } -} - -#mobile-nav-activator { - @include tablet { - display: none; - } - height: auto; - position: fixed; - bottom: 60px; - right: 12px; - box-shadow: 0px 3px 9px rgba(0, 0, 0, 0.3); - animation-name: fade-in-button; - animation-duration: 0.75s; - - .not-shown { - display: none; - } - .shown { - animation-name: fade-in-button; - animation-duration: 0.45s; - } -} - -nav .search-item input { - font-size: 1em; - height: 1.85em; - padding: 0.2em 0.6em; - background: white; - opacity: 0.8; - width: 95%; - max-width: 400px; - &::-webkit-search-decoration { - -webkit-appearance: none; - } - &::placeholder { - color: #888; - opacity: 1; - } - - border: none; - &:focus { - opacity: 1; - } - - @include desktop { - width: calc(9vw * 2); - } -} -bridgetown-search-results { - --link-color: #0f5348; - --divider-color: #e6e1d7; - --text-color: #3e3f3a; -} diff --git a/bridgetown-website/frontend/styles/custom_elements.css b/bridgetown-website/frontend/styles/custom_elements.css deleted file mode 100644 index 5ab74ab63..000000000 --- a/bridgetown-website/frontend/styles/custom_elements.css +++ /dev/null @@ -1,26 +0,0 @@ -article-author, -article-content, /* .content */ -img-container, -layout-columns, /* .columns */ -layout-notice, -layout-spacer, -main-content /* .content */ { - display: block; -} - -ui-label { - display: inline; -} - -/* -# Class names to use for these elements: - -button-group = .buttons -layout-box = .box -layout-column = .column -layout-sidebar = .column -nav-inner = .container -nav-menu = .navbar-menu -nav-section = .navbar-brand, .navbar-start, .navbar-end -ui-icon = .icon -*/ diff --git a/bridgetown-website/frontend/styles/global.css b/bridgetown-website/frontend/styles/global.css new file mode 100644 index 000000000..a9a493224 --- /dev/null +++ b/bridgetown-website/frontend/styles/global.css @@ -0,0 +1,364 @@ +:root { + --color-darkest-green: #142e28; + --color-dark-green: #1D453C; + --color-medium-green: #335B56; + --color-light-green: #3A6D62; + --color-wintermint: #F1FFFA; + --color-orange: #f47c3c; + --color-light-orange: #FFB088; /*#ff9359;*/ + --color-brick: #D64045; + --color-dark-brick: #923538; + --color-blackish: #131E1B; + --color-dark-gray: #2E2525; + --color-medium-gray: #454545; + --color-light-gray: #B0B5B3; + --color-code-background: #f8f5f0; + + --body-background: white; + --body-color: var(--color-dark-gray); + --body-size: 120%; + + --sl-font-sans: RedHatText, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + --display-sans: RedHatDisplay, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + --display-serif: DMSerif, Georgia, 'Times New Roman', serif; + + --body-font-weight: 425; + --body-line-height: 1.5; + + --sl-border-radius-medium: 0.35rem; + + --sl-color-primary-700: var(--color-dark-green); + --sl-color-primary-600: var(--color-medium-green); + --sl-color-primary-500: var(--color-light-green); + + --sl-font-weight-normal: var(--body-font-weight); + + --spacing-gigantic: 12rem; + --max-content-width: 80rem; + + --h1-font-size: 3em; + --h2-font-size: var(--h1-font-size); + --h3-font-size: 1.6em; + --h4-font-size: 1.3em; + + @media (--sl-breakpoint-xs) { + --body-size: 115%; + } +} + +@keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +@keyframes fadeInOut { + 0% { + opacity: 0; + } + 18% { + opacity: 1; + } + 75% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +@keyframes swingBackAndForth { + 0% { + transform: rotate(-7deg); + } + 4.5% { + transform: rotate(-16deg); + } + 11.5% { + transform: rotate(-7deg); + } + 18% { + transform: rotate(-10deg); + } + 25% { + transform: rotate(-7deg); + } + 30% { + transform: rotate(-8deg); + } + 37% { + transform: rotate(-7deg); + } +} + +*[hidden] { + display: none; +} + +html { + box-sizing: border-box; +} +*, *:before, *:after { + box-sizing: inherit; +} + +html { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + font-size: var(--body-size); +} + +body { + margin: 0; + padding: 0; + background: var(--body-background); + color: var(--body-color); + font-family: var(--sl-font-sans); + font-weight: var(--body-font-weight); + line-height: var(--body-line-height); +} + +h1, h2, h3, h4, h5 { + font-family: var(--display-sans); + font-weight: 900; + letter-spacing: -0.01em; + margin-top: 0; + color: var(--color-medium-gray); /* var(--sl-color-neutral-600);*/ + outline: none; + word-break: break-word; + + &.serif { + font-family: var(--display-serif); + font-weight: 400; + } + + &.colorful { + color: var(--color-dark-green); + } +} + +h1 { + font-size: var(--h1-font-size); + + &.serif { + font-size: calc(var(--h1-font-size) + 0.2em); + } +} + +h2 { + font-size: var(--h2-font-size); + + &.serif { + font-size: calc(var(--h2-font-size) + 0.2em); + } +} + +h1, h2 { + line-height: 1.15; + margin-bottom: 0.8em; +} + +h3 { + font-size: var(--h3-font-size); + line-height: 1.3; + margin-bottom: 0.8em; + + &.serif { + font-size: calc(var(--h3-font-size) + 0.2em); + } +} + +h4 { + font-size: var(--h4-font-size); + margin: 1.75em 0 1em; +} + +h1, h2, footer { + text-align: center; +} + +p, ul, ol, blockquote, figure { + margin-top: 0; + margin-bottom: 1.3em; + word-break: break-word; +} + +a { + color: var(--color-brick); + text-underline-offset: 0.15em; + text-decoration-color: var(--color-light-orange); +} + +hr { + border: none; + border-top: 2px dashed var(--color-light-gray); + margin: 2.5em auto; +} + +nav, body > footer { + padding-left: var(--sl-spacing-small); + padding-right: var(--sl-spacing-small); +} + +svg-wrapper, nav sl-icon { + transform: translate(0,0); /* fix a Safari display bug with transitions */ +} +svg-wrapper, svg-wrapper svg { + display: block; +} + +main { + margin: 0 0 8rem; + min-height: calc(100vh - 600px); +} + +main-content { + display: block; +} + +section-wrapper { + display: block; + overflow: hidden; + + &[invert] { + background: var(--color-blackish); + } + + &[size="large"] { + font-size: 115%; + text-align: center; + } +} + +section-wrapper[invert], footer { + color: var(--color-wintermint); + + & h2 { + color: var(--color-brick); + } + + & a { + color: var(--color-orange); + text-decoration-color: var(--color-brick); + } +} + +section { + padding: 2rem 0.75rem; + margin: 0 auto; + max-width: 65rem; + + @media (min-width: 500px) { + padding: 2rem 3rem; + } + + & ul, & ol { + margin-left: var(--sl-spacing-x-large); + margin-right: 0; + padding-left: 0; + padding-right: 0; + + & > li { + margin: 0 0 var(--sl-spacing-small); + + &:last-of-type { + margin-bottom: 0; + } + } + } + & ul { + list-style-type: square; + } +} + +.footer-wave { + margin-bottom: -1px; /* needed to fix gap on Edge (Chrome?) */ + + & svg { + transform: scale(-1, 1); + + & path { + fill: var(--color-dark-gray) !important; + } + } +} + +footer { + background: var(--color-dark-gray); + color: var(--color-wintermint); + padding: 3rem 20px; + + & h4 { + color: white; + margin-top: 1em; + } + + & layout-columns { + display: flex; + text-align: left; + justify-content: space-around; + gap: 2rem; + margin-bottom: 4rem; + font-size: 90%; + + @media (min-width: 1200px) { + font-size: calc(0.65rem + 0.4vw); + } + + @media (--nav-minimal) { + flex-direction: column; + gap: 0; + } + } + + & layout-column { + @media (--nav-fullsize) { + padding-top: calc(0.875rem - 0.5vw); + + &:first-child { + padding-top: 0; + } + } + } + + & sl-button[size="small"] { + --sl-button-font-size-small: 0.8em; + --sl-input-height-small: calc(1.5em + 15px); + } +} + +html:not([loaded]) .fade-in-animation { + opacity: 0; + animation: fadeIn 0.8s 0.4s; + animation-fill-mode: forwards; +} + +.fade-in-always { + opacity: 0; + animation: fadeIn 0.8s; + animation-fill-mode: forwards; +} + +p.heading-icon { + text-align: center; + font-size: 250%; + margin-bottom: 0; + color: var(--sl-color-neutral-400); +} + +section-wrapper[invert] p.heading-icon { + color: var(--color-light-green); +} + +bridgetown-search-results { + font-weight: var(--body-font-weight); + --link-color: var(--color-brick); + + &::part(inner) { + border: 1px solid var(--color-code-background); + } +} diff --git a/bridgetown-website/frontend/styles/helpers.scss b/bridgetown-website/frontend/styles/helpers.scss deleted file mode 100644 index d985f315f..000000000 --- a/bridgetown-website/frontend/styles/helpers.scss +++ /dev/null @@ -1,68 +0,0 @@ -/* Add Tailwindcss-ish margin and padding helpers */ - -$sizes: - 0 0, - 1 0.25, - 2 0.5, - 3 0.75, - 4 1, - 5 1.25, - 6 1.5, - 8 2, - 10 2.5, - 12 3, - 16 4, - 20 5, - 24 6, - 32 8, - 40 10, - 48 12, - 56 14, - 64 16; -$positions: ('top','left','bottom','right'); - -@each $index, $size in $sizes { - @each $position in $positions { - .m#{str-slice($position, 0, 1)}-#{$index} { - margin-#{$position}: $size + rem !important; - } - .p#{str-slice($position, 0, 1)}-#{$index} { - padding-#{$position}: $size + rem !important; - } - .-m#{str-slice($position, 0, 1)}-#{$index} { - margin-#{$position}: -$size + rem !important; - } - } - .mx-#{$index} { - margin-left: $size + rem !important; - margin-right: $size + rem !important; - } - .px-#{$index} { - padding-left: $size + rem !important; - padding-right: $size + rem !important; - } - .-mx-#{$index} { - margin-left: -$size + rem !important; - margin-right: -$size + rem !important; - } - .my-#{$index} { - margin-top: $size + rem !important; - margin-bottom: $size + rem !important; - } - .py-#{$index} { - padding-top: $size + rem !important; - padding-bottom: $size + rem !important; - } - .-my-#{$index} { - margin-top: -$size + rem !important; - margin-bottom: -$size + rem !important; - } -} - -.m-auto { - margin: auto !important; -} -.mx-auto { - margin-left: auto !important; - margin-right: auto !important; -} diff --git a/bridgetown-website/frontend/styles/index.css b/bridgetown-website/frontend/styles/index.css new file mode 100644 index 000000000..47c894fa0 --- /dev/null +++ b/bridgetown-website/frontend/styles/index.css @@ -0,0 +1,8 @@ +@import "../fonts/dm/dm.css"; +@import "../fonts/redhat/redhat.css"; + +@import "bar.css"; +@import "global.css"; +@import "content.css"; +@import "shoelaced.css"; +@import "syntax.css"; diff --git a/bridgetown-website/frontend/styles/index.scss b/bridgetown-website/frontend/styles/index.scss deleted file mode 100644 index 947b52454..000000000 --- a/bridgetown-website/frontend/styles/index.scss +++ /dev/null @@ -1,63 +0,0 @@ -@import "~fork-awesome"; -@import "../fonts/inter.css"; - -$grey-darker: #2a2a26; -$grey-dark: #3e3f3a; -$grey: #8e8c84; -$grey-light: #c9c8b8; -$grey-lighter: #e6e1d7; - -$white-ter: #f8f5f0; - -$brown: #722e19; -.has-text-brown { - color: $brown !important; -} -$orange: #f47c3c; -$green: #7bdda4; -$blue: #29abe0; -$red: #d9534f; - -$primary: #0f5348 !default; -$info: $blue; -$warning: $orange; -$warning-invert: #fff; - -$scheme-main: $white-ter; - -$family-sans-serif: Inter, "Helvetica Neue", Helvetica, Arial, sans-serif; -$family-monospace: ui-monospace, monospace; -$body-size: 18px; - -$link: $primary; - -$pagination-background-color: $grey-lighter; - -$navbar-background-color: $primary; -$navbar-item-color: $white-ter; -$navbar-item-hover-color: white; -$navbar-item-active-color: white; -$navbar-item-active-background-color: darken($primary, 5%); -$navbar-item-hover-background-color: $navbar-item-active-background-color; -$navbar-dropdown-arrow: $navbar-item-color; - -$card-shadow: 0 2px 3px rgba($grey-dark, 0.1), 0 0 0 1px rgba($grey-dark, 0.1); - -$box-background-color: white; - -$footer-background-color: $primary; -$footer-color: white; -footer.footer strong { - color: white; -} - -@import "custom_elements.css"; - -@import "~bulma/bulma"; -@import "helpers.scss"; -@import "content.scss"; -@import "controls.scss"; -@import "layout.scss"; -@import "syntax.scss"; -@import "typography.scss"; -@import "components.scss"; // in src/_components diff --git a/bridgetown-website/frontend/styles/layout.scss b/bridgetown-website/frontend/styles/layout.scss deleted file mode 100644 index 9d9923171..000000000 --- a/bridgetown-website/frontend/styles/layout.scss +++ /dev/null @@ -1,78 +0,0 @@ -.container { - @include touch { - /* This fixes a horizontal overscroll bug in iOS Safari */ - overflow: hidden; - } - @include mobile { - main & { - /* Padding here fixes missing box-shadows */ - padding-top: 2rem; - margin-top: 0 !important; - padding-bottom: 2rem; - padding-left: 12px; - padding-right: 12px; - } - } -} - -nav > .container { - @include touch { - overflow: visible; - } -} - -.hero { - // Colors - .navbar { - background-color: $grey-dark; - } - @each $name, $pair in $colors { - $color: nth($pair, 1); - $color-invert: nth($pair, 2); - - &.is-#{$name} { - .navbar { - background: none; - } - } - } -} - -body > footer.footer { - margin-top: 8rem; - padding-bottom: 4rem; -} - -.box img-container.bridgetown-logo { - max-width: 600px; - margin: 1rem auto; - - svg { - -webkit-filter: drop-shadow(2px 4px 4px transparentize($brown, 0.7)); - filter: drop-shadow(2px 4px 4px transparentize($brown, 0.7)); - } - - svg path { - fill: $primary; - } -} - -.footer .bridgetown-logo { - width: 315px; - opacity: 0.8; - - svg { - -webkit-filter: drop-shadow(2px 3px 3px rgba(0, 0, 0, 0.3)); - filter: drop-shadow(2px 3px 3px rgba(0, 0, 0, 0.3)); - } - - svg path { - fill: white; - } -} - -.bridgetown-logo.inverse { - svg path { - fill: white !important; - } -} diff --git a/bridgetown-website/frontend/styles/shoelaced.css b/bridgetown-website/frontend/styles/shoelaced.css new file mode 100644 index 000000000..ee99df06c --- /dev/null +++ b/bridgetown-website/frontend/styles/shoelaced.css @@ -0,0 +1,122 @@ +sl-avatar { + --size: 3em; +} + +avatar-group { + display: block; + text-align: center; + + & sl-avatar:not(:first-of-type) { + margin-left: -1.5rem; + } + + & sl-avatar::part(base) { + border: solid 2px var(--sl-color-neutral-0); + } +} + +sl-dialog section { + padding: 0 !important; +} + +sl-button { + & sl-icon { + font-size: 1.2em; + } + + & a { + color: inherit; + text-decoration: none; + } +} + +sl-card { + &::part(base) { + box-shadow: var(--sl-shadow-large); + border-top: 5px solid var(--sl-color-primary-500); + } + + & h3 { + color: var(--color-dark-green); + } + + & p:last-of-type { + margin-bottom: 0; + } +} + +.highlighted-cards sl-card::part(base) { + border-top-color: var(--color-light-orange); +} + +sl-dialog { + &::part(panel) { + @media (max-width: 420px) { + max-height: 95vh; + } + } + + & h3[slot=label] { + display: inline-block; + margin-bottom: 0; + font-size: 1.3em; + text-align: left; + } + + &::part(footer) { + z-index: 100; + box-shadow: 0px -10px 20px rgba(0,0,0,0.1); + } +} + +sl-spinner { + font-size: 3rem; + --indicator-color: var(--color-orange); + --track-color: #ffc399; +} + +p > a > sl-icon { + vertical-align: -0.18em; + margin-left: 0.2em; + margin-right: 0.2em; +} + +sl-button[pill] sl-icon[slot="prefix"] { + margin-left: 0.2em; +} +sl-button[pill] sl-icon[slot="suffix"] { + margin-left: -0.2em; +} + +sl-alert { + --sl-font-size-small: 0.92em; + --sl-panel-background-color: var(--color-wintermint); + + &[type="warning"] { + --sl-panel-background-color: var(--sl-color-warning-50); + } + + margin: 2.5em 1em; + + & h4 { + margin-top: 0; + margin-bottom: 0.5em; + } + + & p:last-of-type { + margin-bottom: 0; + } +} + +sl-alert + sl-alert { + margin-top: -1em; +} + +sl-breadcrumb-item { + &::part(label) { + color: var(--color-medium-gray); + } + &::part(separator) { + color: var(--color-light-gray); + } +} diff --git a/bridgetown-website/frontend/styles/syntax.css b/bridgetown-website/frontend/styles/syntax.css new file mode 100644 index 000000000..f64271c10 --- /dev/null +++ b/bridgetown-website/frontend/styles/syntax.css @@ -0,0 +1,422 @@ +code, pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: ui-monospace,monospace; +} + +code, pre { + background-color: var(--color-code-background); + color: var(--color-medium-gray); + font-weight: normal; +} + +p code, li code, blockquote code { + padding: .25em .5em .25em; + font-size: .875em; + color: var(--color-dark-brick); +} + +div.highlight { + margin-top: 1.5em; + margin-bottom: 2em; + border: 1px dashed #f5d0d6; + box-shadow: 0px 13px 18px rgba(0, 0, 0, 0.1); +} + +div.highlighter-rouge + div.highlighter-rouge > div.highlight { + margin-top: -0.75em; +} + +pre.highlight { + margin-top: 0; + margin-bottom: 0; + + font-weight: 400; + max-width: 100%; + overflow: auto; + padding: 0; + + padding: 1.25em 1em; + white-space: pre; + word-wrap: normal; + + background-color: var(--color-code-background); + /*color: #272421; */ + font-size: 0.95em; +} + + +.highlight .hll { + background-color: #ffffcc; +} + +.highlight .c { + color: #8f5902; +} + +/* Comment */ +.highlight .err { + color: #a40000; +} + +/* Error */ +.highlight .g { + color: #272421; +} + +/* Generic */ +.highlight .k { + color: #204a87; + font-weight: 500; +} + +/* Keyword */ +.highlight .l { + color: #272421; +} + +/* Literal */ +.highlight .n { + color: #272421; +} + +/* Name */ +.highlight .o { + color: #ce5c00; + font-weight: 500; +} + +/* Operator */ +.highlight .x { + color: #272421; +} + +/* Other */ +.highlight .p { + color: #272421; + font-weight: 500; +} + +/* Punctuation */ +.highlight .cm { + color: #8f5902; +} + +/* Comment.Multiline */ +.highlight .cp { + color: #8f5902; +} + +/* Comment.Preproc */ +.highlight .c1 { + color: #8f5902; +} + +/* Comment.Single */ +.highlight .cs { + color: #8f5902; +} + +/* Comment.Special */ +.highlight .gd { + color: #a40000; +} + +/* Generic.Deleted */ +.highlight .ge { + color: #272421; +} + +/* Generic.Emph */ +.highlight .gr { + color: #ef2929; +} + +/* Generic.Error */ +.highlight .gh { + color: #000080; + font-weight: 500; +} + +/* Generic.Heading */ +.highlight .gi { + color: #00A000; +} + +/* Generic.Inserted */ +.highlight .go { + color: #272421; +} + +/* Generic.Output */ +.highlight .gp { + color: #8f5902; +} + +/* Generic.Prompt */ +.highlight .gs { + color: #272421; + font-weight: 500; +} + +/* Generic.Strong */ +.highlight .gu { + color: #800080; + font-weight: 500; +} + +/* Generic.Subheading */ +.highlight .gt { + color: #a40000; + font-weight: 500; +} + +/* Generic.Traceback */ +.highlight .kc { + color: #204a87; + font-weight: 500; +} + +/* Keyword.Constant */ +.highlight .kd { + color: #204a87; + font-weight: 500; +} + +/* Keyword.Declaration */ +.highlight .kn { + color: #204a87; + font-weight: 500; +} + +/* Keyword.Namespace */ +.highlight .kp { + color: #204a87; + font-weight: 500; +} + +/* Keyword.Pseudo */ +.highlight .kr { + color: #204a87; + font-weight: 500; +} + +/* Keyword.Reserved */ +.highlight .kt { + color: #204a87; + font-weight: 500; +} + +/* Keyword.Type */ +.highlight .ld { + color: #272421; +} + +/* Literal.Date */ +.highlight .m { + color: #0000cf; + font-weight: 500; +} + +/* Literal.Number */ +.highlight .s { + color: #4e9a06; +} + +/* Literal.String */ +.highlight .na { + color: #8d8400; +} + +/* Name.Attribute */ +.highlight .nb { + color: #204a87; +} + +/* Name.Builtin */ +.highlight .nc { + color: #272421; +} + +/* Name.Class */ +.highlight .no { + color: #272421; +} + +/* Name.Constant */ +.highlight .nd { + color: #5c35cc; + font-weight: 500; +} + +/* Name.Decorator */ +.highlight .ni { + color: #ce5c00; +} + +/* Name.Entity */ +.highlight .ne { + color: #cc0000; + font-weight: 500; +} + +/* Name.Exception */ +.highlight .nf { + color: #272421; +} + +/* Name.Function */ +.highlight .nl { + color: #f57900; +} + +/* Name.Label */ +.highlight .nn { + color: #272421; +} + +/* Name.Namespace */ +.highlight .nx { + color: #272421; +} + +/* Name.Other */ +.highlight .py { + color: #272421; +} + +/* Name.Property */ +.highlight .nt { + color: #204a87; + font-weight: 500; +} + +/* Name.Tag */ +.highlight .nv { + color: #272421; +} + +/* Name.Variable */ +.highlight .ow { + color: #204a87; + font-weight: 500; +} + +/* Operator.Word */ +.highlight .w { + color: #f8f8f8; + text-decoration: underline; +} + +/* Text.Whitespace */ +.highlight .mf { + color: #0000cf; + font-weight: 500; +} + +/* Literal.Number.Float */ +.highlight .mh { + color: #0000cf; + font-weight: 500; +} + +/* Literal.Number.Hex */ +.highlight .mi { + color: #0000cf; + font-weight: 500; +} + +/* Literal.Number.Integer */ +.highlight .mo { + color: #0000cf; + font-weight: 500; +} + +/* Literal.Number.Oct */ +.highlight .sb { + color: #4e9a06; +} + +/* Literal.String.Backtick */ +.highlight .sc { + color: #4e9a06; +} + +/* Literal.String.Char */ +.highlight .sd { + color: #8f5902; +} + +/* Literal.String.Doc */ +.highlight .s2 { + color: #4e9a06; +} + +/* Literal.String.Double */ +.highlight .se { + color: #4e9a06; +} + +/* Literal.String.Escape */ +.highlight .sh { + color: #4e9a06; +} + +/* Literal.String.Heredoc */ +.highlight .si { + color: #4e9a06; +} + +/* Literal.String.Interpol */ +.highlight .sx { + color: #4e9a06; +} + +/* Literal.String.Other */ +.highlight .sr { + color: #4e9a06; +} + +/* Literal.String.Regex */ +.highlight .s1 { + color: #4e9a06; +} + +/* Literal.String.Single */ +.highlight .ss { + color: #4e9a06; +} + +/* Literal.String.Symbol */ +.highlight .bp { + color: #3465a4; +} + +/* Name.Builtin.Pseudo */ +.highlight .vc { + color: #272421; +} + +/* Name.Variable.Class */ +.highlight .vg { + color: #272421; +} + +/* Name.Variable.Global */ +.highlight .vi { + color: #272421; +} + +/* Name.Variable.Instance */ +.highlight .il { + color: #0000cf; + font-weight: 500; +} + +/* Literal.Number.Integer.Long */ +.language-liquid .highlight .p { + color: #8d8400; +} +.language-liquid .highlight .nv { + color: #204a87; +} diff --git a/bridgetown-website/frontend/styles/syntax.scss b/bridgetown-website/frontend/styles/syntax.scss deleted file mode 100644 index 0415b1b87..000000000 --- a/bridgetown-website/frontend/styles/syntax.scss +++ /dev/null @@ -1,84 +0,0 @@ -$base-code-text-color: #403030; - -.content pre { - border-radius: 4px; -} - -.highlight .hll { background-color: #ffffcc } -.highlight .c { color: #8f5902; font-style: italic } /* Comment */ -.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ -.highlight .g { color: $base-code-text-color } /* Generic */ -.highlight .k { color: #204a87; font-weight: 500 } /* Keyword */ -.highlight .l { color: $base-code-text-color } /* Literal */ -.highlight .n { color: $base-code-text-color } /* Name */ -.highlight .o { color: #ce5c00; font-weight: 500 } /* Operator */ -.highlight .x { color: $base-code-text-color } /* Other */ -.highlight .p { color: $base-code-text-color; font-weight: 500 } /* Punctuation */ -.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #8f5902; } /* Comment.Preproc */ -.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #a40000 } /* Generic.Deleted */ -.highlight .ge { color: $base-code-text-color; font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #ef2929 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: 500 } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: $base-code-text-color; font-style: italic } /* Generic.Output */ -.highlight .gp { color: #8f5902 } /* Generic.Prompt */ -.highlight .gs { color: $base-code-text-color; font-weight: 500 } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: 500 } /* Generic.Subheading */ -.highlight .gt { color: #a40000; font-weight: 500 } /* Generic.Traceback */ -.highlight .kc { color: #204a87; font-weight: 500 } /* Keyword.Constant */ -.highlight .kd { color: #204a87; font-weight: 500 } /* Keyword.Declaration */ -.highlight .kn { color: #204a87; font-weight: 500 } /* Keyword.Namespace */ -.highlight .kp { color: #204a87; font-weight: 500 } /* Keyword.Pseudo */ -.highlight .kr { color: #204a87; font-weight: 500 } /* Keyword.Reserved */ -.highlight .kt { color: #204a87; font-weight: 500 } /* Keyword.Type */ -.highlight .ld { color: $base-code-text-color } /* Literal.Date */ -.highlight .m { color: #0000cf; font-weight: 500 } /* Literal.Number */ -.highlight .s { color: #4e9a06 } /* Literal.String */ -.highlight .na { color: #8d8400 } /* Name.Attribute */ -.highlight .nb { color: #204a87 } /* Name.Builtin */ -.highlight .nc { color: $base-code-text-color } /* Name.Class */ -.highlight .no { color: $base-code-text-color } /* Name.Constant */ -.highlight .nd { color: #5c35cc; font-weight: 500 } /* Name.Decorator */ -.highlight .ni { color: #ce5c00 } /* Name.Entity */ -.highlight .ne { color: #cc0000; font-weight: 500 } /* Name.Exception */ -.highlight .nf { color: $base-code-text-color } /* Name.Function */ -.highlight .nl { color: #f57900 } /* Name.Label */ -.highlight .nn { color: $base-code-text-color } /* Name.Namespace */ -.highlight .nx { color: $base-code-text-color } /* Name.Other */ -.highlight .py { color: $base-code-text-color } /* Name.Property */ -.highlight .nt { color: #204a87; font-weight: 500 } /* Name.Tag */ -.highlight .nv { color: $base-code-text-color } /* Name.Variable */ -.highlight .ow { color: #204a87; font-weight: 500 } /* Operator.Word */ -.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */ -.highlight .mf { color: #0000cf; font-weight: 500 } /* Literal.Number.Float */ -.highlight .mh { color: #0000cf; font-weight: 500 } /* Literal.Number.Hex */ -.highlight .mi { color: #0000cf; font-weight: 500 } /* Literal.Number.Integer */ -.highlight .mo { color: #0000cf; font-weight: 500 } /* Literal.Number.Oct */ -.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ -.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ -.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ -.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ -.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ -.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ -.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ -.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ -.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ -.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ -.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: $base-code-text-color } /* Name.Variable.Class */ -.highlight .vg { color: $base-code-text-color } /* Name.Variable.Global */ -.highlight .vi { color: $base-code-text-color } /* Name.Variable.Instance */ -.highlight .il { color: #0000cf; font-weight: 500 } /* Literal.Number.Integer.Long */ - -.language-liquid { - .highlight .p { - color: #8d8400; - } - .highlight .nv { - color: #204a87; - } -} diff --git a/bridgetown-website/frontend/styles/typography.scss b/bridgetown-website/frontend/styles/typography.scss deleted file mode 100644 index 09e5b4ac8..000000000 --- a/bridgetown-website/frontend/styles/typography.scss +++ /dev/null @@ -1,60 +0,0 @@ -/*.pagination-link, -.pagination-next, -.pagination-previous { - color: $primary; - background-color: $pagination-background-color; -} */ - -h1, -h2, -h3 { - letter-spacing: -0.05em; -} - -body.home main { - h1.title { - font-size: 4rem; - @media screen and (max-width: 32rem) { - font-size: 15.5vw; - } - } - ul { - margin-left: 3.5em; - list-style-type: none; - ui-icon { - position: absolute; - margin-left: -3em; - } - @include mobile { - margin-left: 10vw; - ui-icon { - margin-left: -2.5em; - } - } - @include widescreen { - margin-left: 4.5em; - } - - .is-size-5 { - margin-right: 0.2em; - } - } -} - -.footer a { - color: $green; - &:hover { - color: darken($green, 15%); - } -} - -.minimal-line-height pre { - line-height: 135%; -} - -h2 .tag { - margin-bottom: 2px; - margin-left: 0.6em; - letter-spacing: normal; - font-weight: 500; -} diff --git a/bridgetown-website/package.json b/bridgetown-website/package.json index b26ac0f82..9ca976c0c 100644 --- a/bridgetown-website/package.json +++ b/bridgetown-website/package.json @@ -1,36 +1,28 @@ { - "name": "bridgetown-website", + "name": "bridgetown-website-v2", "version": "1.0.0", "private": true, "scripts": { - "webpack-build": "webpack --mode production", - "webpack-dev": "webpack --mode development -w", + "esbuild": "node esbuild.config.js --minify", + "esbuild-dev": "node esbuild.config.js --watch", "lint:html": "yarn linthtml \"src/**/*.{html,erb,serb,liquid,md}\"" }, "devDependencies": { - "@linthtml/linthtml": "^0.5.1", - "@ruby2js/webpack-loader": "^1.3.1", - "css-loader": "^4.3.0", - "esbuild": "^0.13.15", - "esbuild-loader": "^2.16.0", - "file-loader": "^6.2.0", - "mini-css-extract-plugin": "^1.3.1", - "purgecss": "^4.0.2", - "sass": "^1.35.2", - "sass-loader": "^8.0.2", - "style-loader": "^1.1.3", - "webpack": "5.39.1", - "webpack-cli": "4.7.2", - "webpack-manifest-plugin": "3.1.1" + "@linthtml/linthtml": "^0.8.4", + "esbuild": "^0.14.2", + "glob": "^7.2.0", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-import": "^14.0.2", + "postcss-load-config": "^3.1.0", + "postcss-preset-env": "^7.0.1" }, "dependencies": { - "@swup/body-class-plugin": "^1.0.2", - "@swup/scroll-plugin": "^1.0.6", - "@swup/slide-theme": "^1.0.5", - "animated-scroll-to": "^2.0.5", + "@hotwired/turbo": "^7.1.0", + "@ruby2js/esbuild-plugin": "^0.0.2", + "@shoelace-style/shoelace": "^2.0.0-beta.62", "bridgetown-quick-search": "1.1.3", - "bulma": "^0.8.1", - "fork-awesome": "^1.1.7", - "swup": "https://github.com/jaredcwhite/swup#fix-back-button-with-lib" + "hotkeys-js": "^3.8.7", + "smoothscroll-polyfill": "^0.4.4" } } diff --git a/bridgetown-website/plugins/builders/.keep b/bridgetown-website/plugins/builders/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/bridgetown-website/plugins/builders/edge_versions.rb b/bridgetown-website/plugins/builders/edge_versions.rb deleted file mode 100644 index 0bb40104f..000000000 --- a/bridgetown-website/plugins/builders/edge_versions.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -class Builders::EdgeVersions < SiteBuilder - def build - hook :site, :post_read do - if Bridgetown::VERSION.include?("alpha") || Bridgetown::VERSION.include?("beta") - site.data.edge_version = true - end - end - end -end diff --git a/bridgetown-website/plugins/builders/toc.rb b/bridgetown-website/plugins/builders/helpers.rb similarity index 75% rename from bridgetown-website/plugins/builders/toc.rb rename to bridgetown-website/plugins/builders/helpers.rb index fb2727bbf..ea6699996 100644 --- a/bridgetown-website/plugins/builders/toc.rb +++ b/bridgetown-website/plugins/builders/helpers.rb @@ -1,6 +1,4 @@ -# frozen_string_literal: true - -class Builders::Toc < SiteBuilder +class Builders::Helpers < SiteBuilder def build liquid_tag "toc", :toc_template helper "toc", :toc_template diff --git a/bridgetown-website/plugins/builders/mugshot.rb b/bridgetown-website/plugins/builders/mugshot.rb new file mode 100644 index 000000000..950e2a29a --- /dev/null +++ b/bridgetown-website/plugins/builders/mugshot.rb @@ -0,0 +1,9 @@ +class Builders::Mugshot < SiteBuilder + def build + if Bridgetown.env.production? + hook :cards, :pre_render do |card| + card.data.image ||= "https://mugshotbot.com/m?theme=bold&mode=light&color=246e62&pattern=bank_note&hide_watermark=true&url=#{CGI.escape(card.absolute_url)}" + end + end + end +end diff --git a/bridgetown-website/plugins/builders/purgecss.rb b/bridgetown-website/plugins/builders/purgecss.rb deleted file mode 100644 index 18dd4ef3d..000000000 --- a/bridgetown-website/plugins/builders/purgecss.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true - -class Builders::Purgecss < SiteBuilder - def build - unless config[:watch] # don't run in "watch mode" - hook :site, :post_write do - purgecss_file = site.in_root_dir("purgecss.config.js") - unless File.exist?(purgecss_file) - config_js = <<~PURGE - module.exports = { - content: ['frontend/javascript/*.js','./output/**/*.html'], - output: "./output/_bridgetown/static/css" - } - PURGE - File.write(purgecss_file, config_js.strip) - end - manifest_file = File.join(site.frontend_bundling_path, "manifest.json") - if File.exist?(manifest_file) - manifest = JSON.parse(File.read(manifest_file)) - css_file = manifest["main.css"].split("/").last - css_path = ["output", "_bridgetown", "static", "css", css_file].join("/") - Bridgetown.logger.info "PurgeCSS", "Purging #{css_file}" - oldsize = File.stat(css_path).size / 1000 - system "./node_modules/.bin/purgecss -c purgecss.config.js -css #{css_path}" - newsize = File.stat(css_path).size / 1000 - if newsize < oldsize - Bridgetown.logger.info "PurgeCSS", - "Done! File size reduced from #{oldsize}kB to #{newsize}kB" - else - Bridgetown.logger.info "PurgeCSS", - "Done. No apparent change in file size (#{newsize}kB)." - end - end - end - end - end -end diff --git a/bridgetown-website/plugins/builders/versions.rb b/bridgetown-website/plugins/builders/versions.rb new file mode 100644 index 000000000..96ee36d6a --- /dev/null +++ b/bridgetown-website/plugins/builders/versions.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require "gems" + +class Builders::Versions < SiteBuilder + def self.cache + @@cache + end + + def build + @@cache ||= Bridgetown::Cache.new("builders") + + helper :current_version_date do + @@cache.getset("bridgetown-release-date") do + versions = Gems.versions("bridgetown") + version = versions.find { _1["number"] == Bridgetown::VERSION }&.dig("created_at") + version ? Date.parse(version).strftime("%b %-d, %Y") : "(unknown)" + end + end + + hook :site, :post_read do + if Bridgetown::VERSION.include?("alpha") || Bridgetown::VERSION.include?("beta") + site.data.edge_version = true + end + end + end +end diff --git a/bridgetown-website/plugins/site_builder.rb b/bridgetown-website/plugins/site_builder.rb index 06686b58e..6b04953e4 100644 --- a/bridgetown-website/plugins/site_builder.rb +++ b/bridgetown-website/plugins/site_builder.rb @@ -1,12 +1,3 @@ -# frozen_string_literal: true - class SiteBuilder < Bridgetown::Builder + # write builders which subclass SiteBuilder in plugins/builders end - -module ConsoleMethods - def plugins_page - collections.pages.resources.find { |page| page.relative_path.to_s.include?("plugins.serb") } - end -end - -Bridgetown::ConsoleMethods.include ConsoleMethods diff --git a/bridgetown-website/plugins/testing/test_output.rb b/bridgetown-website/plugins/testing/test_output.rb deleted file mode 100644 index 2e877301e..000000000 --- a/bridgetown-website/plugins/testing/test_output.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -module TestOutput - unless Bridgetown.env.development? - Bridgetown::Hooks.register :site, :post_write do - # Load test suite to run on exit - require "nokogiri" - Dir["test/**/*.rb"].each { |file| require_relative("../../#{file}") } - rescue LoadError - Bridgetown.logger.warn "Testing:", - "To run tests, you must first run `bundle install --with test`" - end - end -end diff --git a/bridgetown-website/postcss.config.js b/bridgetown-website/postcss.config.js new file mode 100644 index 000000000..d95389f69 --- /dev/null +++ b/bridgetown-website/postcss.config.js @@ -0,0 +1,14 @@ +module.exports = { + plugins: { + 'postcss-flexbugs-fixes': {}, + 'postcss-preset-env': { + autoprefixer: false, + importFrom: 'frontend/styles/breakpoints.css', + stage: 4, + features: { + 'nesting-rules': true, + 'custom-media-queries': true + }, + } + } +} \ No newline at end of file diff --git a/bridgetown-website/purgecss.config.js b/bridgetown-website/purgecss.config.js deleted file mode 100644 index f677575f1..000000000 --- a/bridgetown-website/purgecss.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - content: ['frontend/javascript/**/*.js','frontend/javascript/**/*.js.rb','./output/**/*.html'], - output: "./output/_bridgetown/static/css", - safelist: { - greedy: [/swup/] - } -} diff --git a/bridgetown-website/rb2js.config.rb b/bridgetown-website/rb2js.config.rb deleted file mode 100644 index 59a64bc92..000000000 --- a/bridgetown-website/rb2js.config.rb +++ /dev/null @@ -1,32 +0,0 @@ -require "ruby2js/filter/functions" -require "ruby2js/filter/camelCase" -require "ruby2js/filter/return" -require "ruby2js/filter/esm" -require "ruby2js/filter/tagged_templates" - -require "json" - -module Ruby2JS - class Loader - def self.options - # Change the options for your configuration here: - { - eslevel: 2021, - include: :class, - underscored_private: true - } - end - - def self.process(source) - Ruby2JS.convert(source, self.options).to_s - end - - def self.process_with_source_map(source) - conv = Ruby2JS.convert(source, self.options) - { - code: conv.to_s, - sourceMap: conv.sourcemap - }.to_json - end - end -end diff --git a/bridgetown-website/server/roda_app.rb b/bridgetown-website/server/roda_app.rb index 84d2ff8ba..619d1f7e7 100644 --- a/bridgetown-website/server/roda_app.rb +++ b/bridgetown-website/server/roda_app.rb @@ -1,5 +1,15 @@ +# Roda is a simple Rack-based framework with a flexible architecture based +# on the concept of a routing tree. Bridgetown uses it for its development +# server, but you can also run it in production for fast, dynamic applications. +# +# Learn more at: http://roda.jeremyevans.net + class RodaApp < Bridgetown::Rack::Roda + plugin :bridgetown_ssr + route do + # Load all the files in server/routes + # see hello.rb.sample Bridgetown::Rack::Routes.start! self end end diff --git a/bridgetown-website/server/routes/preview.rb b/bridgetown-website/server/routes/preview.rb new file mode 100644 index 000000000..308084ad6 --- /dev/null +++ b/bridgetown-website/server/routes/preview.rb @@ -0,0 +1,21 @@ +class Routes::Preview < Bridgetown::Rack::Routes + route do |r| + r.on "preview" do + # Our special rendering pathway to preview a page + # route: /preview/:collection/:path + r.get String, String do |collection, path| + item = Bridgetown::Model::Base.find("repo://#{collection}/#{path}") + + unless item.content.present? + next Bridgetown::Model::Base.find("repo://pages/_pages/404.html") + .render_as_resource + .output + end + + item + .render_as_resource + .output + end + end + end +end diff --git a/bridgetown-website/src/404.html b/bridgetown-website/src/404.html deleted file mode 100644 index d8eea12a5..000000000 --- a/bridgetown-website/src/404.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -permalink: /404.html -title: Page Not Found -layout: default -exclude_from_search: true ---- - -{% rendercontent "shared/page_layout" %} - {% rendercontent "shared/box" %} -

Whoops! 404 Not Found

- - -

Welp, that didn't work!

-

Check out the rest of the site or use the search box above. Hope you find what you're looking for. 😃

-
- {% endrendercontent %} -{% endrendercontent %} diff --git a/bridgetown-website/src/_components/bridgetown_quick_search/search.preview.html b/bridgetown-website/src/_components/bridgetown_quick_search/search.preview.html deleted file mode 100644 index 7d27cc5e0..000000000 --- a/bridgetown-website/src/_components/bridgetown_quick_search/search.preview.html +++ /dev/null @@ -1,14 +0,0 @@ - - - -

Light Theme:

- {% render "bridgetown_quick_search/search", placeholder: "Search", input_class: "input has-background-white" %} - -

Dark Theme:

- {% render "bridgetown_quick_search/search", placeholder: "Search", input_class: "input has-background-dark has-text-white", theme: "dark" %} -
\ No newline at end of file diff --git a/bridgetown-website/src/_components/components.scss b/bridgetown-website/src/_components/components.scss deleted file mode 100644 index 892b1edc5..000000000 --- a/bridgetown-website/src/_components/components.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import "docs/note.scss"; -@import "shared/navbar.scss"; diff --git a/bridgetown-website/src/_components/content/news_item.liquid b/bridgetown-website/src/_components/content/news_item.liquid deleted file mode 100644 index 192536f3d..000000000 --- a/bridgetown-website/src/_components/content/news_item.liquid +++ /dev/null @@ -1,16 +0,0 @@ -
- -

{{ post.title }}

-
- - - {{ post.subtitle }} - - - - {% assign author = authors[post.author] %} - {{ author.name }} - {{ author.name }} - on {{ post.date | date: "%B %-d, %Y" }} - -
diff --git a/bridgetown-website/src/_components/docs/help_needed.liquid b/bridgetown-website/src/_components/docs/help_needed.liquid deleted file mode 100644 index a8bdc0911..000000000 --- a/bridgetown-website/src/_components/docs/help_needed.liquid +++ /dev/null @@ -1,3 +0,0 @@ -{% rendercontent "docs/note", type: "warning", extra_margin: true %} -**Help Needed!**{:.is-size-5} This Documentation page is in need of review and possible revision. Can you help us out?
[We'd greatly appreciate it!](https://github.com/bridgetownrb/bridgetown/issues/new?assignees=&labels=documentation&template=documentation.md&title=docs%3A+{{ page.relative_url | cgi_escape }}) 😃👍 -{% endrendercontent %} \ No newline at end of file diff --git a/bridgetown-website/src/_components/docs/note.liquid b/bridgetown-website/src/_components/docs/note.liquid deleted file mode 100644 index 2f938fcf9..000000000 --- a/bridgetown-website/src/_components/docs/note.liquid +++ /dev/null @@ -1,11 +0,0 @@ -{%- if extra_margin -%} -{%- assign extra_margin_class = "my-10" -%} -{%- endif -%} - - \ No newline at end of file diff --git a/bridgetown-website/src/_components/docs/note.scss b/bridgetown-website/src/_components/docs/note.scss deleted file mode 100644 index 51af0aa5b..000000000 --- a/bridgetown-website/src/_components/docs/note.scss +++ /dev/null @@ -1,24 +0,0 @@ -.note { - background: lighten($green, 25%); - padding: 40px; - padding-left: calc(2rem - 5px); - padding-right: 2rem; - border-left: solid 5px $green; - font-size: 0.9em; - font-weight: 500; - margin-left: -2rem; - margin-right: -2rem; - @include mobile { - margin-left: -1rem; - margin-right: -1rem; - } - margin-bottom: 1.5rem; - &.warning { - border-left-color: $red; - background: lighten($red, 35%); - } -} - -table + .note { - margin-top: 1.5rem; -} diff --git a/bridgetown-website/src/_components/docs/toc.liquid b/bridgetown-website/src/_components/docs/toc.liquid deleted file mode 100644 index 1f247ddff..000000000 --- a/bridgetown-website/src/_components/docs/toc.liquid +++ /dev/null @@ -1,23 +0,0 @@ - \ No newline at end of file diff --git a/bridgetown-website/src/_components/docs/variables_table.liquid b/bridgetown-website/src/_components/docs/variables_table.liquid deleted file mode 100644 index 0d011c9fa..000000000 --- a/bridgetown-website/src/_components/docs/variables_table.liquid +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - {% for var in scope -%} - - - - - {% endfor -%} - -
VariableDescription

{{ var.name }}

{{- var.description -}}

diff --git a/bridgetown-website/src/_components/documentation/sidebar.css b/bridgetown-website/src/_components/documentation/sidebar.css new file mode 100644 index 000000000..99473ba57 --- /dev/null +++ b/bridgetown-website/src/_components/documentation/sidebar.css @@ -0,0 +1,36 @@ +body.docs > main > aside { + & nav { + margin-top: 4.2em; + + /* + @media (--nav-fullsize) { + top: 1em; + position: -webkit-sticky; + position: sticky; + } + */ + + @media (--nav-minimal) { + margin-top: 2em; + border-top: 2px solid var(--color-code-background); + } + } + + & ul { + list-style-type: none; + margin-left: 0; + padding-left: 0; + + & li { + margin-bottom: 0.4em; + } + } + + --h3-font-size: 1.3em; + + & h3 { + margin-top: 1.5em; + margin-bottom: 0.8em; + text-align: left; + } +} diff --git a/bridgetown-website/src/_components/documentation/sidebar.rb b/bridgetown-website/src/_components/documentation/sidebar.rb new file mode 100644 index 000000000..3f3bf46dd --- /dev/null +++ b/bridgetown-website/src/_components/documentation/sidebar.rb @@ -0,0 +1,5 @@ +class Documentation::Sidebar < Bridgetown::Component + def initialize(docs:, resource:) + @docs, @resource = docs, resource + end +end diff --git a/bridgetown-website/src/_components/documentation/sidebar.serb b/bridgetown-website/src/_components/documentation/sidebar.serb new file mode 100644 index 000000000..fa9a1aee2 --- /dev/null +++ b/bridgetown-website/src/_components/documentation/sidebar.serb @@ -0,0 +1,20 @@ + diff --git a/bridgetown-website/src/_components/documentation/variables_table.css b/bridgetown-website/src/_components/documentation/variables_table.css new file mode 100644 index 000000000..a552046e0 --- /dev/null +++ b/bridgetown-website/src/_components/documentation/variables_table.css @@ -0,0 +1,80 @@ +table.settings { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + + & tr > td:first-child { + width: 65%; + } + &.bigger-output { + & tr > td:first-child { + width: 40%; + } + } + &.biggest-output { + & tr > td:first-child { + width: 25%; + } + } + & .option, + & .filter { + color: var(--color-dark-brick); + } + & .flag, + & .output { + color: var(--color-medium-green); + } + & p.default { + margin-top: -0.5em; + font-weight: bold; + & code { + font-size: 1em; + color: green; + } + } + + & th, + & td { + border: 1px solid var(--sl-color-neutral-200); + border-width: 0 0 1px; + padding: .5em .75em; + vertical-align: top; + + &:first-child { + background: var(--sl-color-neutral-50); + } + + & p:last-of-type { + margin-bottom: 0; + } + } + + & th { + text-align: left; + text-transform: uppercase; + border-width: 0 0 2px; + } + + & tbody > tr:last-child > td { + border-bottom: none; + } + + @media screen and (max-width: 700px) { + & th { + &:first-child:before { + content: "👇 "; + } + &:last-child:after { + content: " 👇"; + } + } + & th, + & td { + display: block; + width: 100% !important; + &:last-child { + text-align: right !important; + } + } + } +} \ No newline at end of file diff --git a/bridgetown-website/src/_components/documentation/variables_table.rb b/bridgetown-website/src/_components/documentation/variables_table.rb new file mode 100644 index 000000000..61b574a95 --- /dev/null +++ b/bridgetown-website/src/_components/documentation/variables_table.rb @@ -0,0 +1,6 @@ +class Documentation::VariablesTable < Bridgetown::Component + def initialize(data:, scope:, description_size: :biggest) + @vars = data.bridgetown_variables[scope] + @size = description_size + end +end diff --git a/bridgetown-website/src/_components/documentation/variables_table.serb b/bridgetown-website/src/_components/documentation/variables_table.serb new file mode 100644 index 000000000..3a035cb26 --- /dev/null +++ b/bridgetown-website/src/_components/documentation/variables_table.serb @@ -0,0 +1,16 @@ + + + + + + + + + {%- @vars&.each do |var| -%} + + + + + {%- end -%} + +
VariableDescription

{{ var.name | safe }}

{{ var.description | safe }}

diff --git a/bridgetown-website/src/_components/note.rb b/bridgetown-website/src/_components/note.rb new file mode 100644 index 000000000..26e79c5fb --- /dev/null +++ b/bridgetown-website/src/_components/note.rb @@ -0,0 +1,16 @@ +class Note < Bridgetown::Component + def initialize(type: :primary, icon: nil) + @type, @icon = type.to_sym, icon + end + + def icon + return @icon if @icon + + case @type + when :primary + "system/information" + when :warning + "system/alert" + end + end +end \ No newline at end of file diff --git a/bridgetown-website/src/_components/note.serb b/bridgetown-website/src/_components/note.serb new file mode 100644 index 000000000..94491c128 --- /dev/null +++ b/bridgetown-website/src/_components/note.serb @@ -0,0 +1,9 @@ + + + {{ content | markdownify }} + diff --git a/bridgetown-website/src/_components/post_card.rb b/bridgetown-website/src/_components/post_card.rb new file mode 100644 index 000000000..3f6e84dcf --- /dev/null +++ b/bridgetown-website/src/_components/post_card.rb @@ -0,0 +1,5 @@ +class PostCard < Bridgetown::Component + def initialize(post:) + @post = post + end +end diff --git a/bridgetown-website/src/_components/post_card.serb b/bridgetown-website/src/_components/post_card.serb new file mode 100644 index 000000000..d1f03e934 --- /dev/null +++ b/bridgetown-website/src/_components/post_card.serb @@ -0,0 +1,26 @@ + +
+ +

+ {{ @post.data.title | smartify }} +

+
+
+ + {{ @post.data.subtitle | markdownify }} + +
+ + {{ @post.data.category | titleize }} + + {{ @post.date | strftime: "%-m/%-d/%y" }} + + + + + + Read… + + +
+
diff --git a/bridgetown-website/src/_components/shared/back_to_button.liquid b/bridgetown-website/src/_components/shared/back_to_button.liquid deleted file mode 100644 index 240f0c8ad..000000000 --- a/bridgetown-website/src/_components/shared/back_to_button.liquid +++ /dev/null @@ -1,9 +0,0 @@ - - \ No newline at end of file diff --git a/bridgetown-website/src/_components/shared/box.liquid b/bridgetown-website/src/_components/shared/box.liquid deleted file mode 100644 index da0c6d8fa..000000000 --- a/bridgetown-website/src/_components/shared/box.liquid +++ /dev/null @@ -1,3 +0,0 @@ - -{{ content }} - \ No newline at end of file diff --git a/bridgetown-website/src/_components/shared/footer.liquid b/bridgetown-website/src/_components/shared/footer.liquid deleted file mode 100644 index 1fe16b77d..000000000 --- a/bridgetown-website/src/_components/shared/footer.liquid +++ /dev/null @@ -1,74 +0,0 @@ - diff --git a/bridgetown-website/src/_components/shared/head.erb b/bridgetown-website/src/_components/shared/head.erb deleted file mode 100644 index 974c1abb4..000000000 --- a/bridgetown-website/src/_components/shared/head.erb +++ /dev/null @@ -1,19 +0,0 @@ - - - -<% if page_title != "" %><%= page_title %> | <%= metadata.title %><% else %><%= metadata.title %>: <%= metadata.tagline %><% end %> - - - - - - - - - - - - -<%= seo title: false %> -<%= feed_meta %> -<%= live_reload_dev_js %> diff --git a/bridgetown-website/src/_components/shared/head.rb b/bridgetown-website/src/_components/shared/head.rb deleted file mode 100644 index 15d3a3440..000000000 --- a/bridgetown-website/src/_components/shared/head.rb +++ /dev/null @@ -1,16 +0,0 @@ -module Shared - class Head < Bridgetown::Component - include Liquid::StandardFilters - - attr_reader :metadata - - def initialize(title:, metadata:) - @title = title.present? && title != "Index" ? title : "" - @metadata = metadata - end - - def page_title - strip_html(strip_newlines(@title)).html_safe - end - end -end diff --git a/bridgetown-website/src/_components/shared/header_subpage.liquid b/bridgetown-website/src/_components/shared/header_subpage.liquid deleted file mode 100644 index a9fe4aa33..000000000 --- a/bridgetown-website/src/_components/shared/header_subpage.liquid +++ /dev/null @@ -1 +0,0 @@ -

{{ title }}

\ No newline at end of file diff --git a/bridgetown-website/src/_components/shared/logo.liquid b/bridgetown-website/src/_components/shared/logo.liquid deleted file mode 100644 index 96db7955d..000000000 --- a/bridgetown-website/src/_components/shared/logo.liquid +++ /dev/null @@ -1 +0,0 @@ -{% svg "/images/Bridgetown-Logo.svg" %} \ No newline at end of file diff --git a/bridgetown-website/src/_components/shared/navbar.css b/bridgetown-website/src/_components/shared/navbar.css new file mode 100644 index 000000000..520ca56d5 --- /dev/null +++ b/bridgetown-website/src/_components/shared/navbar.css @@ -0,0 +1,70 @@ +body > nav { + z-index: 1; + position: relative; + margin: var(--sl-spacing-x-large) 0 var(--sl-spacing-large); + font-weight: 520; + + @media (--nav-minimal) { + margin: var(--sl-spacing-medium) 0; + } + + & a.active { + text-decoration-thickness: 5px; + text-decoration-skip: none; + text-underline-offset: 0.3em; + } + + & .logo { + width:320px; + margin-top: -45px; + + @media (--nav-minimal) { + margin-top: -20px; + } + } + + & sl-button[menutoggle] { + margin-top: -45px; + } + + & kbd { + position: absolute; + margin-left: 0.7rem; + font-size: 70%; + font-weight: var(--body-font-weight); + opacity:0.5; + } +} + +html:not([loaded]) #nav-bar { + opacity: 0; + animation: fadeIn 1s 0.1s; + animation-fill-mode: forwards; +} + +navbar-inner, footer-inner { + display: block; + max-width: var(--max-content-width); + margin: 0 auto; +} + +bridgetown-search-form input { + display: block; + appearance: none; + font-family: inherit; + font-size: 1em; + font-weight: 520; + margin-bottom: 0.3em; + padding: .2em .6em; + width: calc(100% - 1.3em); + background: #fff; + opacity: 0.5; + border: 1px solid var(--color-light-gray); + border-radius: 1em; + box-shadow: inset 0 .0625em .125em rgba(10,10,10,.05); + color: inherit; + + &:focus, &:hover { + opacity: 1; + } +} diff --git a/bridgetown-website/src/_components/shared/navbar.erb b/bridgetown-website/src/_components/shared/navbar.erb deleted file mode 100644 index bef15253c..000000000 --- a/bridgetown-website/src/_components/shared/navbar.erb +++ /dev/null @@ -1,48 +0,0 @@ - diff --git a/bridgetown-website/src/_components/shared/navbar.js.rb b/bridgetown-website/src/_components/shared/navbar.js.rb new file mode 100644 index 000000000..00535b4ad --- /dev/null +++ b/bridgetown-website/src/_components/shared/navbar.js.rb @@ -0,0 +1,44 @@ +def menu_show(toggler) + bar = document.query_selector("body > nav sl-bar") + bar.set_attribute "expanded", true + bar.query_selector_all("sl-bar-item[expandable]").each do|item| + item.class_list.add "fade-in-always" + end + toggler.query_selector("sl-icon").name = "system/close" +end + +def menu_hide(toggler) + bar = document.query_selector("body > nav sl-bar") + bar.set_attribute "expanded", false + bar.query_selector_all("sl-bar-item[expandable]").each do |item| + item.class_list.remove "fade-in-always" + end + toggler.query_selector("sl-icon").name = "system/menu" +end + +document.add_event_listener "turbo:load" do + search = document.query_selector("bridgetown-search-results") + search.show_results = false + search.results = [] + + nav = document.query_selector("body > nav") + + nav.query_selector_all("a").each do |item| + item.class_list.remove :active + end + + menu_hide nav.query_selector("sl-button[menutoggle]") + + if location.pathname.starts_with?("/docs") + nav.query_selector('a[href="/docs"]').class_list.add :active + elsif location.pathname.starts_with?("/plugins") + nav.query_selector('a[href="/plugins"]').class_list.add :active + elsif location.pathname.starts_with?("/community") + nav.query_selector('a[href="/community"]').class_list.add :active + elsif location.pathname.starts_with?("/blog") || document.body.class_list.contains("post") + nav.query_selector('a[href="/blog"]').class_list.add :active + end +end + +window.menu_hide = menu_hide +window.menu_show = menu_show diff --git a/bridgetown-website/src/_components/shared/navbar.rb b/bridgetown-website/src/_components/shared/navbar.rb index 9b3946f6f..53e341672 100644 --- a/bridgetown-website/src/_components/shared/navbar.rb +++ b/bridgetown-website/src/_components/shared/navbar.rb @@ -1,27 +1,5 @@ -# frozen_string_literal: true - -module Shared - class Navbar < Bridgetown::Component - def initialize(metadata:, resource:, edge_version: false) - @metadata = metadata - @resource = resource - @edge_version = edge_version - end - - def docs_active - "is-active" if @resource.relative_url.include?("/docs/") - end - - def plugins_active - "is-active" if @resource.relative_url == "/plugins/" - end - - def news_active - "is-active" if @resource.relative_url.include?("/blog/") || @resource.data.layout == "post" - end - - def edge_class - "edge-version" if @edge_version - end +class Shared::Navbar < Bridgetown::Component + def initialize(metadata:, resource:) + @metadata, @resource = metadata, resource end end diff --git a/bridgetown-website/src/_components/shared/navbar.scss b/bridgetown-website/src/_components/shared/navbar.scss deleted file mode 100644 index 238f8f935..000000000 --- a/bridgetown-website/src/_components/shared/navbar.scss +++ /dev/null @@ -1,106 +0,0 @@ -.navbar { - &.edge-version { - background-color: #2b4d5b; - - ui-label.tag { - position: absolute; - right: 2.9rem; - margin-top: 1.5rem; - transform: rotate(-8deg); - } - - a.navbar-item:focus, - a.navbar-item:focus-within, - a.navbar-item:hover, - a.navbar-item.is-active, - .navbar-link:focus, - .navbar-link:focus-within, - .navbar-link:hover, - .navbar-link.is-active { - background-color: #1f3b46; - } - } - - .container { - .navbar-brand { - @include desktop { - margin-left: -1.55rem; - } - } - } - - .bridgetown-logo { - width: 152px; - margin-left: -6px; - margin-right: 6px; - opacity: 0.8; - - svg { - -webkit-filter: drop-shadow(2px 3px 3px rgba(0, 0, 0, 0.3)); - filter: drop-shadow(2px 3px 3px rgba(0, 0, 0, 0.3)); - } - - svg path { - fill: white; - } - } - - .navbar-brand .navbar-item:hover { - background: $navbar-item-hover-background-color; - .bridgetown-logo { - opacity: 1; - } - } - - .navbar-item .title { - color: white; - text-shadow: 2px 3px 3px rgba(0, 0, 0, 0.3); - } - - .navbar-item, - .navbar-link { - font-size: 0.875rem; - font-weight: 700; - text-transform: uppercase; - } - - @include desktop { - .navbar-dropdown .navbar-item { - color: $text; - } - } - - @include touch { - .navbar-menu { - background-color: inherit; - } - } - - .navbar-burger span { - background-color: $white-ter; - } - .navbar-burger:hover span { - background-color: $white-ter; - } - - @each $name, $pair in $colors { - $color: nth($pair, 1); - $color-invert: nth($pair, 2); - - &.is-#{$name} { - @include touch { - .navbar-item, - .navbar-link { - color: rgba($color-invert, 0.7); - &.is-active { - color: $color-invert; - } - } - } - } - } - - &.is-transparent { - background-color: transparent; - } -} diff --git a/bridgetown-website/src/_components/shared/navbar.serb b/bridgetown-website/src/_components/shared/navbar.serb new file mode 100644 index 000000000..4d1f466ba --- /dev/null +++ b/bridgetown-website/src/_components/shared/navbar.serb @@ -0,0 +1,50 @@ + diff --git a/bridgetown-website/src/_components/shared/page_layout.liquid b/bridgetown-website/src/_components/shared/page_layout.liquid deleted file mode 100644 index 399d4a3ba..000000000 --- a/bridgetown-website/src/_components/shared/page_layout.liquid +++ /dev/null @@ -1,7 +0,0 @@ -
- - - {{ content }} - - -
\ No newline at end of file diff --git a/bridgetown-website/src/_components/shared/pagination.liquid b/bridgetown-website/src/_components/shared/pagination.liquid deleted file mode 100644 index e2060df6a..000000000 --- a/bridgetown-website/src/_components/shared/pagination.liquid +++ /dev/null @@ -1,16 +0,0 @@ -{% if paginator.total_pages > 1 %} - -{% endif %} diff --git a/bridgetown-website/src/_data/bridgetown_variables.yml b/bridgetown-website/src/_data/bridgetown_variables.yml deleted file mode 100644 index 0d110176c..000000000 --- a/bridgetown-website/src/_data/bridgetown_variables.yml +++ /dev/null @@ -1,140 +0,0 @@ -# Variables provided by Bridgetown core -# -# name: : name of the variable -# description: : content returned by the varialble - -global: - - name: site - description: >- - Site wide information + configuration settings from bridgetown.config.yml. - See below for details. - - name: resource - description: >- - Resource front matter and other content. - Custom variables set via the front matter will be available here. See below for details. - - name: layout - description: >- - Layout specific information + the front matter. - Custom variables set via front matter in layouts will be available here. - - name: content - description: >- - In layout files, the rendered content of the resource being wrapped. - Not defined in resource files themselves. - -site: - - name: site.time - description: >- - The current time (when you run the bridgetown command). - - name: site.resources - description: >- - A list of all resources (from pages, posts and other collections). - - name: site.static_files - description: >- - A list of all static files (i.e. - files not processed by Bridgetown's converters or the Liquid renderer). - Each file has five properties: path, modified_time, - name, basename and extname. - - name: site.collections - description: >- - A list of all the collections (including posts). - - name: site.data - description: >- - A list containing the data loaded from the YAML files located in the _data - directory. - - name: site.categories.CATEGORY - description: >- - The list of all resources in category CATEGORY. - - name: site.tags.TAG - description: >- - The list of all resources with tag TAG. - - name: site.url - description: >- - Contains the url of your site as it is configured in the bridgetown.config.yml. - For example, if you have url: http://mysite.com in your configuration file, - then it will be accessible in Liquid as site.url. For the development - environment there is an - exception: site.url will be set to the value of host, port, - and SSL-related options. This defaults to url: http://localhost:4000. - - name: "site.metadata" - description: >- - You can put metadata variables in _data/site_metadata.yml so - they'll be easy to access and will regenerate pages when changed. This is a - good place to put <head> content like site title, - description, icon, social media handles, etc. Then you can reference - {{ site.metadata.title }}, etc. in your Liquid templates. - - name: "site.[CONFIGURATION_DATA]" - description: >- - All the variables set via the command line and your bridgetown.config.yml are available - through the site variable. For example, if you have foo: bar in - your configuration file, then it will be accessible in Liquid as site.foo. - Bridgetown does not parse changes to bridgetown.config.yml in - watch mode, you must restart Bridgetown to see changes to variables. - -page: - - name: resource.content - description: >- - The content of the resource. - - name: resource.summary - description: >- - An excerpt of the resource from the configured summary service. - - name: resource.relative_url - description: >- - The URL of the resource without the domain, but with a leading slash, e.g. - /2008/12/14/my-post/ - - name: resource.date - description: >- - The Date assigned to the resource. This can be overridden in front matter by specifying - a new date/time in the format YYYY-MM-DD HH:MM:SS (assuming UTC), or - YYYY-MM-DD HH:MM:SS +/-TTTT (to specify a time zone using an offset from UTC. - e.g. 2008-12-14 10:30:00 +0900). - - name: resource.id - description: >- - An identifier unique to the resource and its collection (useful in RSS feeds). e.g. - repo://posts.collection/2021-10-05-my-post.md - - name: resource.categories - description: >- - The list of categories to which this post belongs, which can be specified in the - front matter. - - name: resource.collection - description: >- - The collection to which this resource belongs. Information on collection variables here. If not part of a - collection, nothing is returned. - - name: resource.tags - description: >- - The list of tags to which this post belongs. These can be specified in the - front matter. - - name: resource.relative_path - description: >- - The path of the resource relative to the source folder. - - name: resource.next - description: >- - The next resource relative to the position of the current resource in its collection. - Returns nil for the last entry. - - name: resource.previous - description: >- - The previous resource relative to the position of the current resource in its collection. - Returns nil for the first entry. - -paginator: - - name: paginator.page - description: The number of the current page - - name: paginator.per_page - description: Number of posts per page - - name: paginator.resources - description: Resources (aka posts, etc.) available for the current page - - name: paginator.total_resources - description: Total number of resources - - name: paginator.total_pages - description: Total number of paginated pages - - name: paginator.previous_page - description: >- - The number of the previous page, or nil if no previous page exists - - name: paginator.previous_page_path - description: >- - The path to the previous page, or nil if no previous page exists - - name: paginator.next_page - description: >- - The number of the next page, or nil if no subsequent page exists - - name: paginator.next_page_path - description: >- - The path to the next page, or nil if no subsequent page exists diff --git a/bridgetown-website/src/_data/bridgetown_filters.yml b/bridgetown-website/src/_data/bridgetown_variables/liquid_filters.yml similarity index 99% rename from bridgetown-website/src/_data/bridgetown_filters.yml rename to bridgetown-website/src/_data/bridgetown_variables/liquid_filters.yml index f10283d1e..b506c43b7 100644 --- a/bridgetown-website/src/_data/bridgetown_filters.yml +++ b/bridgetown-website/src/_data/bridgetown_variables/liquid_filters.yml @@ -60,7 +60,6 @@ - name: Date to String in ordinal US style description: "Format a date to ordinal, US, short format." - version_badge: 3.8.0 examples: - input: '{{ site.time | date_to_string: "ordinal", "US" }}' output: "Nov 7th, 2008" @@ -77,7 +76,6 @@ - name: Date to Long String in ordinal UK style description: "Format a date to ordinal, UK, long format." - version_badge: 3.8.0 examples: - input: '{{ site.time | date_to_long_string: "ordinal" }}' output: "7th November 2008" @@ -94,7 +92,6 @@ - name: Where Expression description: Select all the objects in an array where the expression is true. (Tip: You might want to try using the find tag instead.) - version_badge: 3.2.0 examples: - input: |- {{ site.members | where_exp:"item", @@ -123,7 +120,6 @@ - name: Group By Expression description: Group an array's items using a Liquid expression. - version_badge: 3.4.0 examples: - input: |- {{ site.members | group_by_exp: "item", diff --git a/bridgetown-website/src/_data/bridgetown_variables/paginator.yml b/bridgetown-website/src/_data/bridgetown_variables/paginator.yml new file mode 100644 index 000000000..ad056cd63 --- /dev/null +++ b/bridgetown-website/src/_data/bridgetown_variables/paginator.yml @@ -0,0 +1,22 @@ +- name: page + description: The number of the current page +- name: per_page + description: Number of resources per page +- name: resources + description: Resources (aka posts, etc.) available for the current page +- name: total_resources + description: Total number of resources +- name: total_pages + description: Total number of paginated pages +- name: previous_page + description: >- + The number of the previous page, or nil if no previous page exists +- name: previous_page_path + description: >- + The path to the previous page, or nil if no previous page exists +- name: next_page + description: >- + The number of the next page, or nil if no subsequent page exists +- name: next_page_path + description: >- + The path to the next page, or nil if no subsequent page exists \ No newline at end of file diff --git a/bridgetown-website/src/_data/bridgetown_variables/permalinks.yml b/bridgetown-website/src/_data/bridgetown_variables/permalinks.yml new file mode 100644 index 000000000..3f38ea841 --- /dev/null +++ b/bridgetown-website/src/_data/bridgetown_variables/permalinks.yml @@ -0,0 +1,30 @@ +- name: ":year" + description: Four-digit year based on the resource's date. +- name: ":short_year" + description: Two-digit year based on the resource's date within its century (00..99). +- name: ":month" + description: Month based on the resource's date (01..12). +- name: ":i_month" + description: Month based on the resource's date without leading zeros (1..12). +- name: ":day" + description: Day of the month based on the resource's date (01..31). +- name: ":i_day" + description: Day of the month based on the resource's date without leading zeros (1..31). +- name: ":categories" + description: | + The specified categories for the resource. If a resource has multiple + categories, Bridgetown will create a hierarchy (e.g. /category1/category2). + Bridgetown automatically parses out double slashes in the URLs, + so if no categories are present, it will ignore this. +- name: ":locale, :lang" + description: Adds the locale key of the current rendering context, if its not the default site locale. +- name: ":title" + description: "Title from the resource's front matter (aka title: My Resource Title), slugified (aka any character except numbers and letters is replaced as hyphen)." +- name: ":slug" + description: Extracted from the resources’s filename. May be overridden via the resources’s slug front matter. +- name: ":name" + description: Extracted from the resources’s filename and cannot be overridden. +- name: ":path" + description: Constructs URL segments out of the relative path of the resource within its collection folder. Used by the pages collection as well as custom collections if no specific permalink config is provided. +- name: ":collection" + description: Outputs the label of the resource's custom collection (will be blank for the built-in pages and posts collections). \ No newline at end of file diff --git a/bridgetown-website/src/_data/site_metadata.yml b/bridgetown-website/src/_data/site_metadata.yml index 5c0f497ed..55013f940 100644 --- a/bridgetown-website/src/_data/site_metadata.yml +++ b/bridgetown-website/src/_data/site_metadata.yml @@ -1,13 +1,14 @@ -# Welcome to Bridgetown! +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.metadata.title }}, {{ site.metadata.email }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.metadata.myvariable }}. + title: Bridgetown -tagline: a modern Ruby website framework -email: community@bridgetownrb.com +tagline: Next-Generation Progressive Site Generator +email: maintainers@bridgetownrb.com description: >- - A Webpack-aware, Ruby-powered static site generator for the modern Jamstack era + Bridgetown is a next-generation, progressive site generator & fullstack framework, powered by Ruby. twitter: "bridgetownrb" github: "bridgetownrb/bridgetown" - -# Environment-specific settings -development: - title: Bridgetown (DEV) diff --git a/bridgetown-website/src/_docs/_defaults.yml b/bridgetown-website/src/_docs/_defaults.yml index df5d36a64..8d6b20eac 100644 --- a/bridgetown-website/src/_docs/_defaults.yml +++ b/bridgetown-website/src/_docs/_defaults.yml @@ -1 +1 @@ -layout: docs +layout: docs \ No newline at end of file diff --git a/bridgetown-website/src/_docs/automations.md b/bridgetown-website/src/_docs/automations.md index 1cd9578a9..bc226cdbf 100644 --- a/bridgetown-website/src/_docs/automations.md +++ b/bridgetown-website/src/_docs/automations.md @@ -1,6 +1,5 @@ --- -order: 6.5 -next_page_order: 6.75 +order: 230 title: Automations top_section: Configuration category: automations diff --git a/bridgetown-website/src/_docs/bundled-configurations.md b/bridgetown-website/src/_docs/bundled-configurations.md index f33ec6b1c..e2f6a1e70 100644 --- a/bridgetown-website/src/_docs/bundled-configurations.md +++ b/bridgetown-website/src/_docs/bundled-configurations.md @@ -1,8 +1,7 @@ --- -order: 6.75 -next_page_order: 7 +order: 50 title: Bundled Configurations -top_section: Configuration +top_section: Setup category: bundledconfigurations --- @@ -25,7 +24,7 @@ The full list of configurations can also be seen by running `bridgetown configur Bundled configurations can also be run while creating a new Bridgetown project using the `--configure=` or `-c` flag and passing in a comma-separated list of configurations. -``` +```sh bridgetown new my_project -c swup,purgecss ``` @@ -37,11 +36,15 @@ bridgetown new my_project -c swup,purgecss 🛠 **Configure using:** -``` +```sh bin/bridgetown configure turbo ``` -An optional script (`turbo_transitions.js`) is provided to add transition animation to Turbo navigation. If you don't wish to use any transition animations, you're welcome to delete the file. You can also edit the script to adjust the animation style or change the element being animated from `
` to whatever you prefer. +An optional script (`turbo_transitions.js`) is provided to add transition animation to Turbo navigation. If you don't wish to use any transition animations, you're welcome to delete the file. You can also edit the script to adjust the animation style or change the element being animated from `
` to whatever you prefer. + +{%@ Note type: :warning do %} +It is recommended you add the `data-turbo-track="reload"` attribute to the `script` and CSS `link` tags in your HTML head. This will allow Turbo to perform a full page reload any time newly-deployed assets are available. +{% end %} ### Stimulus @@ -49,7 +52,7 @@ An optional script (`turbo_transitions.js`) is provided to add transition animat 🛠 **Configure using:** -``` +```sh bin/bridgetown configure stimulus ``` @@ -57,15 +60,15 @@ bin/bridgetown configure stimulus 🍃 Adds [TailwindCSS](https://tailwindcss.com) with an empty configuration along with [PurgeCSS](https://purgecss.com). -Please be aware that you need to have [PostCSS](https://postcss.org) setup to run this configuration. You can create a new Bridgetown project with PostCSS using `bridgetown new my_project --use-postcss`. +Please be aware that you need to have [PostCSS](https://postcss.org) installed to run this configuration. -This configuration will overwrite your `postcss.config.js` file. +This configuration will overwrite any existing `postcss.config.js` file. 🛠 **Configure using:** -``` +```sh bin/bridgetown configure tailwindcss -```` +``` ### PurgeCSS Post-Build Hook @@ -73,7 +76,7 @@ bin/bridgetown configure tailwindcss 🛠 **Configure using:** -``` +```sh bin/bridgetown configure purgecss ``` @@ -91,7 +94,8 @@ It will also configure [`postcss-preset-env`](http://preset-env.cssdb.org) to po This configuration will overwrite your `postcss.config.js` file. 🛠 **Configure using:** -``` + +```sh bin/bridgetown configure bt-postcss ``` If you'd like to customize your setup further you can find more plugins [here](https://www.postcss.parts). @@ -102,7 +106,7 @@ If you'd like to customize your setup further you can find more plugins [here](h 🛠 **Configure using:** -``` +```sh bin/bridgetown configure render ``` @@ -112,7 +116,7 @@ bin/bridgetown configure render 🛠 **Configure using:** -``` +```sh bin/bridgetown configure netlify ``` @@ -122,7 +126,7 @@ bin/bridgetown configure netlify 🛠 **Configure using:** -``` +```sh bin/bridgetown configure minitesting ``` @@ -132,6 +136,6 @@ bin/bridgetown configure minitesting 🛠 **Configure using:** -``` +```sh bin/bridgetown configure cypress ``` diff --git a/bridgetown-website/src/_docs/collections.md b/bridgetown-website/src/_docs/collections.md index 0824fa956..ede90c16d 100644 --- a/bridgetown-website/src/_docs/collections.md +++ b/bridgetown-website/src/_docs/collections.md @@ -1,18 +1,18 @@ --- title: Collections -order: 13 -top_section: Content +order: 100 +top_section: Writing Content category: collections --- -{% rendercontent "docs/note", type: "warning" %} +{%@ Note type: "warning" do %} This documentation is still being revised for Bridgetown 1.0. Read about the new [resource content engine](/docs/resources) to learn more about how to use collections in templates. -{% endrendercontent %} +{% end %} Collections are a great way to group related content like members of a team or -talks at a conference. Bridgetown comes with one built-in collection, [posts](/docs/posts/), and you can add new collections to support all sorts of content structures and hierarchies. All of the pages on this very website, for example, are contained within a "docs" collection. +talks at a conference. Bridgetown comes with one built-in collection, `posts`, and you can add new collections to support all sorts of content structures and hierarchies. All of the pages on this very website, for example, are contained within a "docs" collection. -{% toc %} +{{ toc }} ## Setup @@ -34,7 +34,7 @@ requires defining the collection as a mapping. For more information, see the sec Create a corresponding folder (e.g. `/_staff_members`) and add documents. Front matter is processed if the [front matter](/docs/front-matter/) exists, and everything after the front matter is pushed into the document's `content` attribute. If no front -matter is provided, Bridgetown will consider it to be a [static file](/docs/static_files/) +matter is provided, Bridgetown will consider it to be a [static file](/docs/static-files/) and the contents will not undergo further processing. If front matter is provided, Bridgetown will process the file contents into the expected output. @@ -53,10 +53,12 @@ position: Developer Jane has worked on Bridgetown for the past *five years*. ``` -{% rendercontent "docs/note", title: "Be sure to name your folders correctly" %} -The folder must be named identically to the collection you defined in your -`bridgetown.config.yml` file, with the addition of the preceding `_` character. -{% endrendercontent %} +{%@ Note type: :warning do %} + #### Be sure to name your folders correctly + + The folder must be named identically to the collection you defined in your + `bridgetown.config.yml` file, with the addition of the preceding `_` character. +{% end %} Now you can iterate over `site.staff_members` on a page and display the content for each staff member. Similar to posts, the body of the document is accessed @@ -98,14 +100,15 @@ You can link to the generated page using the `url` attribute: ``` {% endraw %} -{:.note} +{%@ Note do %} If you have a large number of documents, it's likely you'll want to use the -[Pagination feature](/docs/content/pagination/) to make it easy to browse through +[Pagination feature](/docs/content/pagination) to make it easy to browse through a limited number of documents per page. +{% end %} ## Permalinks -There are special [permalink variables for collections](/docs/structure/permalinks/) to +There are special [permalink variables for collections](/docs/content/permalinks) to help you control the output url for the entire collection. ## Custom Sorting of Documents @@ -208,18 +211,22 @@ Collections objects are available under `site.collections` with the following in -{% rendercontent "docs/note", title: "Posts: a Built-in Collection" %} +{%@ Note do %} + #### Posts: a Built-in Collection + In addition to any collections you create yourself, the `posts` collection is hard-coded into Bridgetown. It exists whether you have a `_posts` directory or not. This is something to note when iterating through `site.collections` as you may need to filter it out. - + You may wish to use filters to find your collection: `{% raw %}{{ site.collections | where: "label", "myCollection" | first }}{% endraw %}` -{% endrendercontent %} +{% end %} + +{%@ Note do %} + #### Collections and Time -{% rendercontent "docs/note", title: "Collections and Time" %} Except for documents in hard-coded default collection `posts`, all documents in collections you create, are accessible via Liquid irrespective of their assigned date, if any, and therefore renderable. @@ -229,7 +236,7 @@ Collections objects are available under `site.collections` with the following in More fine-grained control over documents being written to disk can be exercised by setting `published: false` (_`true` by default_) in the document's front matter. -{% endrendercontent %} +{% end %} ### Documents @@ -339,13 +346,17 @@ or if you're on a document page within the collection: ``` {% endraw %} -{% rendercontent "docs/note", title: "Top Top: You can relocate your collections", extra_margin: true %} +{%@ Note do %} + #### Top Top: You can relocate your Collections + It's possible to optionally specify a folder to store all your collections in a centralized folder with `collections_dir: my_collections`. Then Bridgetown will look in `my_collections/_books` for the `books` collection, and in `my_collections/_recipes` for the `recipes` collection. -{% endrendercontent %} +{% end %} + +{%@ Note type: "warning" do %} + #### Be sure to move posts into custom collections folder -{% rendercontent "docs/note", title: "Be sure to move posts into custom collections folder", type: "warning" %} If you specify a folder to store all your collections in the same place with `collections_dir: my_collections`, then you will need to move your `_posts` folder to `my_collections/_posts`. Note that the name of your collections directory cannot start with an underscore (`_`). -{% endrendercontent %} +{% end %} diff --git a/bridgetown-website/src/_docs/command-line-usage.md b/bridgetown-website/src/_docs/command-line-usage.md index 1c536799f..ac0f4e5f8 100644 --- a/bridgetown-website/src/_docs/command-line-usage.md +++ b/bridgetown-website/src/_docs/command-line-usage.md @@ -1,6 +1,5 @@ --- -order: 4.2 -next_page_order: 4.5 +order: 60 title: Command Line Usage top_section: Setup category: command-line-usage @@ -10,10 +9,16 @@ The Bridgetown gem makes the `bridgetown` executable available to you in your te You can run `bin/bridgetown` to see a list of available commands as well as Rake tasks which either come with Bridgetown or are located in your `Rakefile`. See below for information on how to define your own Rake tasks. +The `help ` command provides more information about the available options for any specific command. + Available commands are: {% raw %} -* `bridgetown new PATH` - Creates a new Bridgetown site at the specified path with a default configuration and typical site folder structure. Use the `--apply=` or `-a` option to [apply an automation](/docs/automations) to the new site. +* `bridgetown new PATH` - Creates a new Bridgetown site at the specified path with a default configuration and typical site folder structure. + * Use the `--apply=` or `-a` option to [apply an automation](/docs/automations) to the new site. + * Use the `-t` option to choose ERB or Serbea templates instead of Liquid (aka `-t erb`). + * Use the `-e` option to choose Webpack instead of esbuild for your frontend bundler (aka `-e webpack`). + * When using Webpack, you can also choose to use Sass over PostCSS by adding the `--use-sass` option. * `bin/bridgetown start` or `s` - Boots the Rack-based server (using Puma) at `localhost:4000`. In development, you'll get live reload functionality as long as `{% live_reload_dev_js %}` or `<%= live_reload_dev_js %>` is in your HTML head. * `bin/bridgetown deploy` - Ensures that all frontend assets get built alongside the published Bridgetown output. This is the command you'll want to use for ([deployment](/docs/deployment)). * `bin/bridgetown build` or `b` - Performs a single build of your site to the `output` folder (by default). Add the `-w` flag to also regenerate the site whenever a source file changes. @@ -26,6 +31,7 @@ Available commands are: * `bin/bridgetown help` - Shows help, optionally for a given subcommand, e.g. `bridgetown help build`. * `bin/bridgetown doctor` - Outputs any deprecation or configuration issues. * `bin/bridgetown clean` - Removes all generated files: destination folder, metadata file, and Bridgetown caches. +* `bin/bridgetown esbuild ACTION` - Allows you to perform actions such as `update` on your project's esbuild configuration. Invoke without arguments to see all available actions. * `bin/bridgetown webpack ACTION` - Allows you to perform actions such as `update` on your project's Webpack configuration. Invoke without arguments to see all available actions. {% endraw %} diff --git a/bridgetown-website/src/_docs/commands/plugins.md b/bridgetown-website/src/_docs/commands/plugins.md index 2dadcb710..0093737ba 100644 --- a/bridgetown-website/src/_docs/commands/plugins.md +++ b/bridgetown-website/src/_docs/commands/plugins.md @@ -1,7 +1,7 @@ --- title: Plugins Command -hide_in_toc: true order: 0 +top_section: Setup category: command-line-usage --- diff --git a/bridgetown-website/src/_docs/community.md b/bridgetown-website/src/_docs/community.md deleted file mode 100644 index 2f8161b85..000000000 --- a/bridgetown-website/src/_docs/community.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -order: 2 -title: Community -top_section: Introduction -category: community ---- - -## Where to get support - -* Start by reading the [Bridgetown Documentation](/docs/). -* Kick off a discussion on the [Discussions Board on GitHub](https://github.com/bridgetownrb/bridgetown/discussions). -* Chat with Bridgetowners live on our [Discord server](https://discord.gg/4E6hktQGz4). - -There are a bunch of helpful core team and community members available that should be able to point you in the right direction. - -There are also a growing number of companies which provide commercial support for advanced Bridgetown site builds. These include: - -* [Whitefusion](https://www.whitefusion.studio) -* [Radioactive Toy](https://radioactivetoy.tech) - ----- - -## Ways to contribute - -Whether you're a developer, designer, or overall Bridgetown enthusiast, there are lots of ways to contribute. Here's a few ideas: - -* Comment on some of the project's [open issues](https://github.com/{{ site.metadata.github }}/issues). Have you experienced the same problem? Know a work around? Do you have a suggestion for how the feature could be better? -* Read through the [documentation](/docs/) and file a pull request (PR) by forking the [Bridgetown repo on GitHub](https://github.com/{{ site.metadata.github }}/fork) and adding your changes or suggestions for something that could be improved. -* Browse through the latest [chat room activity](https://discord.gg/4E6hktQGz4) and lend a hand answering questions or proposing awesome new features. There's a good chance other folks are in the same boat as you. -* Help evaluate [open pull requests](https://github.com/{{ site.metadata.github }}/pulls) by testing the changes locally and reviewing what's proposed. Or if you [have a PR you'd like to submit](https://github.com/bridgetownrb/bridgetown/blob/main/CONTRIBUTING.md) for a new feature or a bugfix, we'd be thrilled to evaluate it and guide it through the release cycle if it adheres to our [roadmap](/about/#roadmap) and [project goals](/docs/philosophy/). - -{% rendercontent "docs/note", type: "warning", extra_margin: true %} -**Reminder:** Bridgetown's issue tracker on GitHub is not a support forum. Only file issues for reproducible problems you've identified while using Bridgetown. -{% endrendercontent %} - -## Bridgetown Contributor Code of Conduct - -As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. - -Read our full [code of conduct](https://github.com/bridgetownrb/bridgetown/blob/main/CODE_OF_CONDUCT.md). - -{:.note.mt-10} -Want to give us a public shoutout? Check out our [official Twitter account](https://twitter.com/{{ site.metadata.twitter }})! diff --git a/bridgetown-website/src/_docs/components.md b/bridgetown-website/src/_docs/components.md index e1308022a..b6d1901db 100644 --- a/bridgetown-website/src/_docs/components.md +++ b/bridgetown-website/src/_docs/components.md @@ -1,7 +1,7 @@ --- title: Components -order: 8 -top_section: Structure +order: 160 +top_section: Designing Your Site category: components --- @@ -9,14 +9,24 @@ Thinking of your website design as a collection of loosely-coupled, independent While it's tempting to think of components as applicable to frontend development only (via popular frameworks such as React), component-based design is actually something you can accomplish using SSR (server-side rendering) or static rendering as well, and there are a myriad of ways you can wire up generated component markup served to the browser with frontend dynamism using JavaScript. -Bridgetown provides two mechanisms to do this today, either by using the [Liquid template engine](/docs/liquid) or a [Ruby-based template engine such as ERB](/docs/erb-and-beyond). Bridgetown even supports a [compatibility shim](https://github.com/bridgetownrb/bridgetown-view-component) for the ViewComponent library by GitHub which has taken the Rails community by storm. One Ruby component library to rule them all? Could be! +Bridgetown provides two mechanisms to do this today, either by using the [Liquid template engine](/docs/template-engines/liquid) or a [Ruby-based template engine such as ERB](/docs/template-engines/erb-and-beyond). Bridgetown even supports a [compatibility shim](https://github.com/bridgetownrb/bridgetown-view-component) for the ViewComponent library by GitHub which has taken the Rails community by storm. One Ruby component library to rule them all? Could be! So go ahead: pick your preferred component flavor and let's dive in. - - Liquid - Ruby (ERB and Beyond) - +

+ + + Liquid + + + + + + Ruby (ERB & Beyond) + + + +

## Sidecar Frontend Assets @@ -60,9 +70,9 @@ While you can author a web component without using libraries or frameworks of an By building "default" markup into your static component, and then using a "hydration-like" strategy to enhance the component in JavaScript, you get lightning-fast static markup which works even without JavaScript enabled—while at the same time taking advantage of advanced client-side user interface capabilities. You can also take advantage of APIs to render up-to-date content in real-time in the browser after possibly-stale static content has first loaded. -{% rendercontent "docs/note" %} -You don't _have_ to use web components to take advantage of this pattern. You can use any light-weight "JavaScript sprinkles" library such as [Stimulus](https://stimulusjs.org) or [Alpine](https://github.com/alpinejs/alpine/) and the concepts remain relatively the same. -{% endrendercontent %} +{%@ Note do %} + You don't _have_ to use web components to take advantage of this pattern. You can use any light-weight "JavaScript sprinkles" library such as [Stimulus](https://stimulusjs.org) or [Alpine](https://github.com/alpinejs/alpine/) and the concepts remain relatively the same. +{% end %} Here's an example of a component which shows a product price and an Add to Cart button. We'll first define it as a Liquid component and display the price directly as statically-generated HTML. Then we'll define a LitElement-powered web component which updates the price and checks if the product is in stock before enabling the shopping cart interactivity of the button. diff --git a/bridgetown-website/src/_docs/components/liquid.md b/bridgetown-website/src/_docs/components/liquid.md index 9a0d5665f..e7eef3b79 100644 --- a/bridgetown-website/src/_docs/components/liquid.md +++ b/bridgetown-website/src/_docs/components/liquid.md @@ -1,15 +1,15 @@ --- title: Liquid Components category: components -hide_in_toc: true +top_section: Designing Your Site order: 0 --- -By default, templates in Bridgetown websites are powered by the [Liquid template engine](/docs/liquid). You can use Liquid in layouts and HTML pages as well as inside of content such as Markdown text. +By default, templates in Bridgetown websites are powered by the [Liquid template engine](/docs/templates/liquid). You can use Liquid in layouts and HTML pages as well as inside of content such as Markdown text. A component is a reusable piece of template logic (sometimes referred to as a "partial") that can be included in any part of the site, and a full suite of components can comprise what is often called a "design system". -Liquid components can be combined with front-end component strategies using **web components** or other JavaScript libraries/frameworks for a [hybrid static/dynamic approach](/docs/components#hybrid-components){:data-no-swup="true"}. +Liquid components can be combined with front-end component strategies using **web components** or other JavaScript libraries/frameworks for a [hybrid static/dynamic approach](/docs/components#hybrid-components). {% toc %} diff --git a/bridgetown-website/src/_docs/components/ruby.md b/bridgetown-website/src/_docs/components/ruby.md index 1ea7cdba2..77ceeb85b 100644 --- a/bridgetown-website/src/_docs/components/ruby.md +++ b/bridgetown-website/src/_docs/components/ruby.md @@ -2,13 +2,13 @@ title: Ruby Components template_engine: erb category: components -hide_in_toc: true +top_section: Designing Your Site order: 0 --- A component is a reusable piece of template logic that can be included in any part of the site, and a full suite of components can comprise what is often called a "design system". You can render Ruby component objects directly in your Ruby-based templates, and you can render components from within other components. This provides the basis for a fully-featured view component architecture for ERB and beyond. -Ruby components can be combined with front-end component strategies using **web components** or other JavaScript libraries/frameworks for a [hybrid static/dynamic approach](/docs/components#hybrid-components){:data-no-swup="true"}. +Ruby components can be combined with front-end component strategies using **web components** or other JavaScript libraries/frameworks for a [hybrid static/dynamic approach](/docs/components#hybrid-components). <%= toc %> @@ -61,13 +61,13 @@ end ``` -<%= liquid_render "docs/note", type: "warning", extra_margin: true do %> +<%= render Note.new type: "warning" do %> Bear in mind that Ruby components aren't accessible from Liquid templates. So if you need a component which can be used in either templating system, consider writing a Liquid component. [Read more information here.](/docs/components/liquid) <% end %> ## Use Bridgetown::Component for Advanced Component Templates -While squggly heredocs are nice, what most people probably want to [the ability to write a template](/docs/erb-and-beyond) in ERB, Haml, Slim, or Serbea. +While squggly heredocs are nice, what most people probably want to [the ability to write a template](/docs/templates/erb-and-beyond) in ERB, Haml, Slim, or Serbea. Starting in Bridgetown 0.21, you can subclass your components from `Bridgetown::Component` and then add a template file right next to the component's `.rb` file. The template will automatically get rendered by the component and you won't need to define a `render_in` method yourself. For example, if we were to translate the previous heredoc to a template-based component: @@ -257,7 +257,7 @@ Now run `yarn start`, load your website at localhost:4000, and you should see th So far, pretty standard fare for ViewComponent, but you'll notice we had to add `include Bridgetown::ViewComponentHelpers` to the definition of our `Shared::Header` class. That's because, out of the box, ViewComponent doesn't know about any of Bridgetown's helpers. We could have injected helpers directly into the base class, but that might adversely affect components written with Rails in mind, so at least in this early phase we're including the module manually. -<%= liquid_render "docs/note", extra_margin: true do %> +<%= render Note.new do %> As a shortcut, you could create your own base class, say `SiteViewComponent`, which inherits from `ViewComponent::Base`, include the `Bridgetown::ViewComponentHelpers` module, and then subclass all your site components from `SiteViewComponent`. <% end %> diff --git a/bridgetown-website/src/_docs/configuration.md b/bridgetown-website/src/_docs/configuration.md index e58c34279..e0ffa0cb2 100644 --- a/bridgetown-website/src/_docs/configuration.md +++ b/bridgetown-website/src/_docs/configuration.md @@ -1,6 +1,6 @@ --- -order: 5 -title: Customize Your Build +order: 200 +title: Customize Your Site top_section: Configuration category: configuration --- @@ -8,7 +8,7 @@ category: configuration Bridgetown gives you a lot of flexibility to customize how it builds your site. These options can either be specified in a `bridgetown.config.yml` or `bridgetown.config.toml` file placed in your site’s root folder, or in certain cases can be specified as flags for the `bridgetown` executable in the terminal. * [Configuration Options](/docs/configuration/options) -* [Front Matter Defaults](/docs/configuration/front-matter-defaults) * [Environments](/docs/configuration/environments) * [Markdown Options](/docs/configuration/markdown) * [Liquid Options](/docs/configuration/liquid) +* Puma Configuration (_docs coming soon_) \ No newline at end of file diff --git a/bridgetown-website/src/_docs/configuration/environments.md b/bridgetown-website/src/_docs/configuration/environments.md index 9f21204cc..35e6dbe3a 100644 --- a/bridgetown-website/src/_docs/configuration/environments.md +++ b/bridgetown-website/src/_docs/configuration/environments.md @@ -1,8 +1,9 @@ --- title: Environments -hide_in_toc: true order: 0 -category: configuration +top_section: Configuration +category: customize-your-site +back_to: configuration --- The "environment" of a Bridgetown site can affect the way certain processes work. Typically your site is run in the `development` environment. When running automated tests it should be run in the `test` environment, and upon deployment it should be run in the `production` environment. @@ -45,9 +46,9 @@ Suppose you set this conditional statement in your code: When you build your Bridgetown site, the content inside the `if` statement won't be rendered unless you also specify a `production` environment. -{% rendercontent "docs/note" %} - If you you're using ERB or another Ruby template language, you can write `Bridgetown.env.development?`, `Bridgetown.env.production?`, and so forth. Refer to the [ERB and Beyond](/docs/erb-and-beyond) docs for further details. -{% endrendercontent %} +{%@ Note do %} + If you you're using ERB or another Ruby template language, you can write `Bridgetown.env.development?`, `Bridgetown.env.production?`, and so forth. Refer to the [ERB and Beyond](/docs/template-engines/erb-and-beyond) docs for further details. +{% end %} The default value for `BRIDGETOWN_ENV` is `development`. Thus if you omit `BRIDGETOWN_ENV` from the build/serve commands, the default value will be @@ -91,6 +92,8 @@ The `development` environment will build documents that are marked as unpublishe well as having a future date, whereas the `staging` environment will only build unpublished. And the `production` environment would exclude both sets. -{% rendercontent "docs/note", title: "Top Tip: Accessing the Environment in Your Ruby Code and Plugins", extra_margin: true %} +{%@ Note do %} + #### Top Tip: Accessing the Environment in Your Ruby Code and Plugins + Anywhere in Ruby code you write, you can check the current environment via `Bridgetown.environment`. You might decide to perform certain tests or verify data or perform some kind of operation in a `development` or `test` environment that you'd leave out in a `production` environment (or visa-versa). -{% endrendercontent %} +{% end %} diff --git a/bridgetown-website/src/_docs/configuration/incremental-regeneration.md b/bridgetown-website/src/_docs/configuration/incremental-regeneration.md deleted file mode 100644 index 4b584657b..000000000 --- a/bridgetown-website/src/_docs/configuration/incremental-regeneration.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Default Configuration -hide_in_toc: true -order: 0 -category: configuration ---- - -## Incremental Regeneration - -{% rendercontent "docs/note", title: "Incremental regeneration not available", type: "warning", extra_margin: true %} - This feature has been removed from Bridgetown. We will be introducing new options to control content regeneration at a granular level in the future. -{% endrendercontent %} diff --git a/bridgetown-website/src/_docs/configuration/liquid.md b/bridgetown-website/src/_docs/configuration/liquid.md index c142b7eb6..104b682f9 100644 --- a/bridgetown-website/src/_docs/configuration/liquid.md +++ b/bridgetown-website/src/_docs/configuration/liquid.md @@ -1,9 +1,11 @@ --- title: Liquid Options -hide_in_toc: true order: 0 -category: configuration +top_section: Configuration +category: customize-your-site +back_to: configuration --- + Liquid's response to errors can be configured by setting `error_mode`. The options are diff --git a/bridgetown-website/src/_docs/configuration/markdown.md b/bridgetown-website/src/_docs/configuration/markdown.md index dc9dfb444..5ae7d3439 100644 --- a/bridgetown-website/src/_docs/configuration/markdown.md +++ b/bridgetown-website/src/_docs/configuration/markdown.md @@ -1,8 +1,9 @@ --- title: Markdown Options -hide_in_toc: true order: 0 -category: configuration +top_section: Configuration +category: customize-your-site +back_to: configuration --- ### Kramdown diff --git a/bridgetown-website/src/_docs/configuration/options.md b/bridgetown-website/src/_docs/configuration/options.md index e1a893714..b27017092 100644 --- a/bridgetown-website/src/_docs/configuration/options.md +++ b/bridgetown-website/src/_docs/configuration/options.md @@ -1,8 +1,9 @@ --- title: Configuration Options -hide_in_toc: true order: 0 -category: configuration +top_section: Configuration +category: customize-your-site +back_to: configuration --- The tables below list the available settings for Bridgetown, and the various flags (specified on the command-line) that control them.

Default: liquid

-

template_engine: ENGINE (erb, slim, haml, etc.)

- - - - -

Content Engine

-

Change the content engine Bridgetown uses for its data pipeline. The resource-based engine will become standard for v1.0.

-

Default: legacy

- - -

content_engine: ENGINE (legacy, resource)

+

template_engine: ENGINE (erb, serbea, slim, haml, etc.)

Permalink

-

Change the default permalink style or template used by pages & blog posts. Documentation here—and if you're using the Resource-based content engine, read this additional information.

+

Change the default permalink style or template used by pages & blog posts. Documentation here and read this additional information.

permalink: STYLE or TEMPLATE

@@ -160,11 +151,7 @@ class="flag">flags
(specified on the command-line) that control them.

Encoding

- Set the encoding of files by name (only available for Ruby - 1.9 or later). - The default value is utf-8 starting in 2.0.0, - and nil before 2.0.0, which will yield the Ruby - default of ASCII-8BIT. + Set the encoding of files by name. The default value is utf-8. Available encodings can be shown by the command ruby -e 'puts Encoding::list.join("\n")'.

@@ -182,22 +169,24 @@ class="flag">flags (specified on the command-line) that control them.

-

More Information Here

+

More Information Here

-{% rendercontent "docs/note", title: "Destination folders are cleaned upon site builds", type: "warning" %} -The contents of `destination` are automatically cleaned when the site is built. -Files or folders that are not created by your site will be removed. If you need to -retain certain files/folders, specify them within the `keep_files` configuration -directive. (For instance, Bridgetown automatically keeps compiled frontend assets -from Webpack.) +{%@ Note type: :warning do %} + #### Destination folders are cleaned upon site builds -Do not use an important location for `destination` instead, use it as -a staging area and copy files from there to your web server. -{% endrendercontent %} + The contents of `destination` are automatically cleaned when the site is built. + Files or folders that are not created by your site will be removed. If you need to + retain certain files/folders, specify them within the `keep_files` configuration + directive. (For instance, Bridgetown automatically keeps compiled frontend assets + from esbuild/Webpack.) + + Do not use an important location for `destination` instead, use it as + a staging area and copy files from there to your web server. +{% end %} ### Build Command Options @@ -259,33 +248,12 @@ a staging area and copy files from there to your web server.

Ruby Front Matter

-

Process Ruby front matter (default true)

+

Process Ruby front matter (default true)

ruby_in_front_matter: BOOL

- - -

LSI

-

Produce an index for related posts. Requires the - classifier-reborn plugin.

- - -

lsi: BOOL

-

--lsi

- - - - -

Limit Posts

-

Limit the number of posts to parse and publish.

- - -

limit_posts: NUM

-

--limit_posts NUM

- -

Force polling

@@ -352,7 +320,11 @@ a staging area and copy files from there to your web server. -### Serve Command Options +### Webrick Options + +{%@ Note type: :warning do %} +The Webrick server is deprecated and will be removed in a future version of Bridgetown. +{% end %} In addition to the options below, the `serve` sub-command can accept any of the options for the `build` sub-command, which are then applied to the site build which occurs right @@ -425,10 +397,12 @@ before your site is served. -{% rendercontent "docs/note", title: "Do not use tabs in configuration files", type: "warning" %} +{%@ Note type: :warning do %} + #### Do not use tabs in configuration files + This will either lead to parsing errors, or Bridgetown will revert to the default settings. Use spaces instead. -{% endrendercontent %} +{% end %} ### Additional Configuration File Settings diff --git a/bridgetown-website/src/_docs/configuration/front-matter-defaults.md b/bridgetown-website/src/_docs/content/front-matter-defaults.md similarity index 77% rename from bridgetown-website/src/_docs/configuration/front-matter-defaults.md rename to bridgetown-website/src/_docs/content/front-matter-defaults.md index e2e95f29d..73c67ec32 100644 --- a/bridgetown-website/src/_docs/configuration/front-matter-defaults.md +++ b/bridgetown-website/src/_docs/content/front-matter-defaults.md @@ -1,8 +1,8 @@ --- title: Front Matter Defaults -hide_in_toc: true order: 0 -category: configuration +top_section: Writing Content +category: resources --- Using [front matter](/docs/front-matter) is the way you specify metadata for the file-based resources for your site, setting things like a default layout, or customizing the title, or providing taxonomy terms. @@ -11,7 +11,7 @@ Sometimes you will find you're repeating a few configuration options over and ov There are two ways to accomplish this: the data cascade, and via your site's configuration file. -# The Data Cascade +## The Data Cascade You can add `_defaults.yml` (also `.yaml` or `.json`) files anywhere in your source tree, which will then cause a "data cascade". In other words, any resources in that folder or in a subfolder will use the front matter data contained in the defaults file. Defaults files in subfolders can also potentially overwrite values contained in parent folders (hence the term "cascade"). @@ -31,13 +31,17 @@ Now all the `fancy_posts` posts will use the `fancy_post` layout. If you had oth Also, keep in mind these are "default" values, so if you were to add `layout: some_other_layout` to a post, it would overwrite either `layout: post` or `layout: fancy_post`. This is what makes front matter defaults so powerful! -{% rendercontent "docs/note" %} -Defaults files work well for custom collections! Just add a `_defaults.yml` to the collection root folder to set layouts and other variables for your entire collection. -{% endrendercontent %} +{%@ Note do %} + #### Trick out your collections -{% rendercontent "docs/note" %} -You can also add a defaults file to `src` itself! For example, if you wanted every resource on your site to start off with a default thumbnail image, you could simply add `image: /images/thumbnail_image.jpg` to a defaults file in `src` and it would apply globally. -{% endrendercontent %} + Defaults files work well for custom collections! Just add a `_defaults.yml` to the collection root folder to set layouts and other variables for your entire collection. +{% end %} + +{%@ Note do %} + #### Think globally + + You can also add a defaults file to `src` itself! For example, if you wanted every resource on your site to start off with a default thumbnail image, you could simply add `image: /images/thumbnail_image.jpg` to a defaults file in `src` and it would apply globally. +{% end %} ## Configuration-based Front Matter Defaults @@ -51,11 +55,13 @@ defaults: layout: "default" ``` -{% rendercontent "docs/note", title: "Stop and rerun bridgetown serve command." %} -The bridgetown.config.yml master configuration file contains global configurations and variable definitions that are read once at execution time. Changes made to bridgetown.config.yml will not trigger an automatic regeneration. - -Use [Data Files](/docs/datafiles) to set up metadata variables and other structured content you can be sure will get reloaded during automatic regeneration. -{% endrendercontent %} +{%@ Note type: :warning do %} + #### Stop and rerun bridgetown start + + The bridgetown.config.yml master configuration file contains global configurations and variable definitions that are read once at execution time. Changes made to bridgetown.config.yml will not trigger an automatic regeneration. + + Use [Data Files](/docs/datafiles) to set up metadata variables and other structured content you can be sure will get reloaded during automatic regeneration. +{% end %} You probably don't want to set a layout on every file in your project, so you can also specify a `collection` value under the `scope` key. @@ -117,9 +123,11 @@ defaults: layout: "specific-layout" ``` -{% rendercontent "docs/note", title:"Globbing and Performance", type: "warning" %} -Please note that globbing a path is known to have a negative effect on performance. Globbing a path will increase your build times in proportion to the size of the associated collection directory. -{% endrendercontent %} +{%@ Note type: "warning" do %} + #### Globbing and Performance + + Please note that globbing a path is known to have a negative effect on performance. Globbing a path will increase your build times in proportion to the size of the associated collection directory. +{% end %} ### Precedence diff --git a/bridgetown-website/src/_docs/content/pagination.md b/bridgetown-website/src/_docs/content/pagination.md index 7653b12e9..78796c9e1 100644 --- a/bridgetown-website/src/_docs/content/pagination.md +++ b/bridgetown-website/src/_docs/content/pagination.md @@ -1,11 +1,11 @@ --- title: Pagination -hide_in_toc: true order: 0 -category: posts +top_section: Writing Content +category: resources --- -{% render "docs/help_needed", page: page %} +{%@ "docs/help_needed", resource: resource %} Pagination support is built-in to Bridgetown, but it is not enabled by default. To enable it on your site, simply add: @@ -90,4 +90,4 @@ To display pagination links, simply use the `paginator` Liquid object as follows The `paginator` Liquid object provides the following attributes: -{% render "docs/variables_table", scope: site.data.bridgetown_variables.paginator %} +{%@ Documentation::VariablesTable data: site.data, scope: :paginator, description_size: :bigger %} diff --git a/bridgetown-website/src/_docs/content/permalinks.md b/bridgetown-website/src/_docs/content/permalinks.md new file mode 100644 index 000000000..5025a84d9 --- /dev/null +++ b/bridgetown-website/src/_docs/content/permalinks.md @@ -0,0 +1,59 @@ +--- +title: Permalinks +order: 0 +top_section: Writing Content +category: resources +--- + +A permalink is simply the determination of what the output URL of your [resource](/docs/resources) will be. Every resource uses a _permalink processer_ to figure out where to save your transformed resource in the output folder tree. + +Resources in the **pages** collection are the most straightforward. The filenames and folder structure of your pages will result in matching output URLs. For example, a file saved at `src/_pages/this/is/great.md` would be output to `/this/is/great/`. + +For resources in the **posts** collection, Bridgetown ships with few permalink "styles". The posts permalink style is configured by using the `permalink` key in the config file. If the key isn't present, the default is `pretty`. + +The available styles are: + +* `pretty`: `/[locale]/:categories/:year/:month/:day/:slug/` +* `pretty_ext`: `/[locale]/:categories/:year/:month/:day/:slug.*` +* `simple`: `/[locale]/:categories/:slug/` +* `simple_ext`: `[locale]/:categories/:slug.*` + +(Including `.*` at the end simply means it will output the resource with its own slug and extension. Alternatively, `/` at the end will put the resource in a folder of that slug with `index.html` inside.) + +To set a permalink style or template for a **custom collection**, add it to your collection metadata in `bridgetown.config.yml`. For example: + +```yaml +collections: + articles: + permalink: pretty +``` + +would make your articles collection behave the same as posts. Or you can create your own template: + +```yaml +collections: + articles: + permalink: /lots-of/:collection/:year/:title/ +``` + +This would result in URLs such as `/lots-of/articles/2021/super-neato/`. + +### Placeholders + +All of the segments you see above starting with a colon, such as `:year` or `:slug`, are called **placeholders**. Bridgetown ships with a number of placeholders, but you can also create your own! Simply use the `register_placeholder` in a plugin, perhaps at the bottom of your `plugins/site_builder.rb` file. For example, if you wanted a placeholder to resolve a resource data, you could add: + +```ruby +Bridgetown::Resource::PermalinkProcessor.register_placeholder :ymd, ->(resource) do + "#{resource.date.strftime("%Y")}#{resource.date.strftime("%m")}#{resource.date.strftime("%d")}" +end + +Bridgetown::Resource::PermalinkProcessor.register_placeholder :y_m_d, ->(resource) do + "#{resource.date.strftime("%Y")}-#{resource.date.strftime("%m")}-#{resource.date.strftime("%d")}" +end +``` + +Thus with a permalink key of `/blog/:ymd/:slug/`, you'd get `/blog/20211020/my-post/`, or for `/blog/:y_m_d/:slug/` you'd get `/blog/2021-10-20/my-post/`. + +Here's the full list of built-in placeholders available: + +{%@ Documentation::VariablesTable data: site.data, scope: :permalinks %} diff --git a/bridgetown-website/src/_docs/core-concepts.md b/bridgetown-website/src/_docs/core-concepts.md index 53883f94b..edd1ef7f3 100644 --- a/bridgetown-website/src/_docs/core-concepts.md +++ b/bridgetown-website/src/_docs/core-concepts.md @@ -1,12 +1,11 @@ --- -order: 4 -next_page_order: 4.2 +order: 20 title: Core Concepts -top_section: Setup +top_section: Introduction category: core_concepts --- -It's easy to get started with Bridgetown, but it helps to have a basic understanding of a few key aspects of the site build process so you know which tools to use for the right job. Websites using Bridgetown are built and deployed, and only optionally provide dynamic routes via a server process. Frameworks like this are sometimes referred to as [Jamstack](/docs/jamstack/) style. This means the website your visitors will ultimately engage with is primarily a "snapshot in time"—the product of a build process. How does that process work? Let's find out! +It's easy to get started with Bridgetown, but it helps to have a basic understanding of a few key aspects of the site build process so you know which tools to use for the right job. Websites using Bridgetown are built and deployed as atomic artifacts, but they can optionally provide dynamic routes via a secondary server process. Frameworks like this are sometimes referred to as Jamstack frameworks. This means the website your visitors will ultimately engage with was largely produced as a "snapshot in time"—the product of Bridgetown's build process. How does that process work? Let's find out! ## The Build Process @@ -20,10 +19,10 @@ There's a relatively linear process which occurs every time you run a [build com * [Layouts](/docs/layouts) * [Components](/docs/components) * [Data files](/docs/datafiles) - * [Static files](/docs/static_files) + * [Static files](/docs/static-files) * [Resources](/docs/resources) * Any gem-based plugins which supply their own layouts, components, and content via [Source Manifests](/docs/plugins/source-manifests). -1. Once all of the data structures for the entire website are in place, Bridgetown __renders__ all relevant content objects to prepare them for final output. This is when [Front Matter](/docs/front-matter) variables are made available to templates, any [Liquid](/docs/liquid) or [Ruby](/docs/erb-and-beyond) templates are processed, formats like [Markdown](https://kramdown.gettalong.org/quickref.html) are converted to HTML, resources are placed within layout templates, and generally everything is finalized in its proper output format (HTML, JSON, images, PDFs, etc.). +1. Once all of the data structures for the entire website are in place, Bridgetown __renders__ all relevant content objects to prepare them for final output. This is when [Front Matter](/docs/front-matter) variables are made available to templates, any [Liquid](/docs/template-engines/liquid) or [Ruby](/docs/template-engines/erb-and-beyond) templates are processed, formats like [Markdown](https://kramdown.gettalong.org/quickref.html) are converted to HTML, resources are placed within layout templates, and generally everything is finalized in its proper output format (HTML, JSON, images, PDFs, etc.). 1. The final step is to write everything to the destination folder (typically `output`). If all has gone well, that folder will contain a complete, fully-functioning website [which can be deployed](/docs/deployment) to any basic HTTP web server. Normally during development, you will be running a local dev server, which means @@ -38,19 +37,18 @@ substantially. There are technical solutions to many of these slowdowns, which c range from caching API data between builds to limiting the number of files built in development. Improving build time is a major goal of the Bridgetown core team as we look to the future. -## The Webpack Build Process +## The Frontend Build Process There's one aspect of the build process overlooked above: the compiling, compressing, and bundling of [frontend assets](/docs/frontend-assets) like JavaScript, CSS, web fonts, and so forth. When using Bridgetown's built-in `start` or `deploy` commands, -essentially _two_ build processes are kicked off: the Webpack build process and the -Bridgetown build process. The two align when something magical happens. +essentially _two_ build processes are kicked off: the frontend build process (either esbuild or Webpack) and the Bridgetown build process. The two align when something magical happens. -1. Webpack will conclude its build process by exporting a `manifest.json` file to the hidden `.bridgetown-webpack` folder. This manifest lists the exact, fingerprinted filenames of the compiled and bundled JS and CSS output files. -1. Bridgetown, using the `webpack_path` Liquid tag, monitors that manifest, and whenever it detects a change it will regenerate the site to point to those bundled output files. -1. This way, your website frontend and the HTML of your generated static site are always kept in sync (as long as you use the provided Yarn scripts!). +1. esbuild/Webpack will conclude its build process by exporting a `manifest.json` file to the hidden `.bridgetown-cache` folder. This manifest lists the exact, fingerprinted filenames of the compiled and bundled JS and CSS output files. +1. Bridgetown, using the `asset_path` Liquid tag/Ruby helper, monitors that manifest, and whenever it detects a change it will regenerate the site to point to those bundled output files. +1. This way, your website frontend and the HTML of your generated static site are always kept in sync. ## Adding Extra Features to Your Site @@ -60,15 +58,21 @@ applying automations. These may provide new features, themes, or software configurations in useful ways. Some examples: * Add instant search to your site with the [bridgetown-quick-search](https://github.com/bridgetownrb/bridgetown-quick-search) plugin -* Include inline SVG images with the [bridgetown-inline-svg](https://github.com/andrewmcodes/bridgetown-inline-svg) plugin +* Include inline SVG images with the [bridgetown-svg-inliner](https://github.com/ayushn21/bridgetown-svg-inliner) plugin * Start your site off with a clean, professional design via the [Bulmatown](https://github.com/whitefusionhq/bulmatown) theme and Bulma CSS framework You can discover links to these and many more in our [Plugins directory](/plugins/). +## Server-Side Rendering and Dynamic Routes + +For most content-rich websites intended for marketing, educational, or publishing purposes (blogs, etc.), a statically-built and deployed site may be all you need. But there may be times when you need a real backend running for your site, either to provide API endpoints your principal pages can communicate with via JavaScript, or to offer actual routes that are fully SSR'd (Server-Side Rendered). + +Bridgetown 1.0 ships with an early look at a [full SSR pipeline powered by the Roda web toolkit](/docs/routes). Roda, like Rails or Sinatra, takes full advantage of Ruby's Rack ecosystem and offers a minimalist yet elegant DSL (Domain-Specific Language) for defining and handling routes via a "routing tree" as well as processing request/response cycles. Accepting form data or JSON payloads is a snap, and there's even a core plugin you can configure to enable dynamic, file-based routing with all of Bridgetown's template engines and component rendering at your disposal. + ## What to Learn Next There is detailed documentation available about each and every step mentioned above, so feel free to poke around and read up on the topics which interest you the most. And as always, if you get stuck or have follow-up questions, just hop in one -of our [community channels](/docs/community) and a friendly Bridgetowner will +of our [community channels](/community) and a friendly Bridgetowner will endeavor to help you out! diff --git a/bridgetown-website/src/_docs/datafiles.md b/bridgetown-website/src/_docs/datafiles.md index 8dbc96831..f6eede6f6 100644 --- a/bridgetown-website/src/_docs/datafiles.md +++ b/bridgetown-website/src/_docs/datafiles.md @@ -1,8 +1,8 @@ --- title: Data Files -order: 14 -top_section: Content -category: datafiles +order: 120 +top_section: Writing Content +category: data-files --- In addition to [built-in variables](/docs/variables) and [front matter](/docs/front-matter), you can specify custom datasets which are accessible via Liquid and Ruby templates as well as plugins. @@ -13,7 +13,7 @@ You can also save standard Ruby files (`.rb`) to `_data` which get automatically This powerful feature allows you to avoid repetition in your templates and set site-specific options without changing `bridgetown.config.yml`—and in the case of Ruby data files, perform powerful processing tasks to populate your site content. -{% toc %} +{{ toc }} ## The Data Folder diff --git a/bridgetown-website/src/_docs/deployment.md b/bridgetown-website/src/_docs/deployment.md index 40b33af57..afff6b99c 100644 --- a/bridgetown-website/src/_docs/deployment.md +++ b/bridgetown-website/src/_docs/deployment.md @@ -1,8 +1,7 @@ --- -order: 4.5 -next_page_order: 4.7 -title: Deploying Your Site -top_section: Setup +order: 180 +title: Deploy to Production +top_section: Publishing Your Site category: deployment --- @@ -10,20 +9,23 @@ Bridgetown generates your site and saves it to the `output` directory by default transfer the contents of this directory to almost any hosting provider to make your site go live. -Bridgetown's included site template automatically provides a Yarn script you can run to +Bridgetown's included site template automatically provides a Rake task you can run to build both your Webpack bundle and your website. Simply run ```shell bin/bridgetown deploy ``` -as part of your deployment process, which will kick off both the `webpack` and the `bridgetown build` commands in that order. +as part of your deployment process, which will kick off both the `frontend:build` Rake task and the `bridgetown build` commands in that order. -If you wish to utilize additional logic within your site templates or plugins to -determine what's a "development" build vs. "production" build, set the `BRIDGETOWN_ENV` +{%@ Note type: :warning do %} +You must set the `BRIDGETOWN_ENV` environment variable to `production` on the machine or service that's building the site for deployment. [Read more about environments here.](/docs/configuration/environments/) +This will also help you if you wish to utilize additional logic within your site templates or plugins to determine what's a "development" build vs. "production" build. +{% end %} + ## Automatic Deployment We recommend setting up an automatic deployment solution at the earliest opportunity. This way every time you push a commit up to your Git repository on a service such as GitHub, your site is automatically rebuilt and deployed quickly. diff --git a/bridgetown-website/src/_docs/front-matter.md b/bridgetown-website/src/_docs/front-matter.md index 22dd36240..3fdf18f52 100644 --- a/bridgetown-website/src/_docs/front-matter.md +++ b/bridgetown-website/src/_docs/front-matter.md @@ -1,19 +1,19 @@ --- title: Front Matter -order: 12 -top_section: Content +order: 90 +top_section: Writing Content category: front-matter --- Front matter is a snippet of [YAML](https://yaml.org/) or Ruby data which sits at the top of a file between special line delimiters. You can think of front matter as a datastore consisting of one or more key-value pairs (aka a `Hash` in Ruby). You use front matter to add metadata, like a title or a description, to files such as pages and documents as well as site layouts. Front matter can be used in various ways to set configuration options on a per-file basis, and if you need more dynamic handling of variable data, you can write Ruby code for processing as front matter. -{% rendercontent "docs/note", title: "Don't repeat yourself" %} -If you'd like to avoid repeating your frequently used variables -over and over, you can define [front matter defaults](/docs/configuration/front-matter-defaults) for them and only override them where necessary (or not at all). This works -both for predefined and custom variables. -{% endrendercontent %} +{%@ Note do %} + #### Don't repeat yourself -{% toc %} + If you'd like to avoid repeating your frequently used variables over and over, you can define [front matter defaults](/docs/content/front-matter-defaults) for them and only override them where necessary (or not at all). This works both for predefined and custom variables. +{% end %} + +{{ toc }} ## Using Front Matter @@ -37,12 +37,13 @@ for a reference) or add custom variables of your own. These variables will then be available to you to access using Liquid tags both further down in the file and also in any layouts or components that the file in question relies on. -{% rendercontent "docs/note", title: "Front matter variables are optional" %} +{%@ Note do %} + #### Front matter variables are optional If you want to use [Liquid tags and variables](/docs/variables/) but don’t need anything in your front matter, just leave it empty! The set of triple-dashed lines with nothing in between will still get Bridgetown to process your file. (This is useful for things like RSS feeds.) -{% endrendercontent %} +{% end %} ## Predefined Global Variables @@ -73,7 +74,7 @@ front matter of a page or document.
  • Using null will produce a file without using a layout file. This is overridden if the file is a document and has a - layout defined in the + layout defined in the front matter defaults.
  • @@ -120,10 +121,11 @@ front matter of a page or document. -{% rendercontent "docs/note", title: "Render pages marked as unpublished" %} +{%@ Note do %} + #### Render pages marked as unpublished To preview unpublished pages, run `bridgetown serve` or `bridgetown build` with the `--unpublished` switch. -{% endrendercontent %} +{% end %} ## Custom Variables @@ -227,10 +229,11 @@ description: | For reference, [here's a side-by-side comparison](https://yaml.org/YAML_for_ruby.html) of YAML data structures and their equivalents in Ruby. -{% rendercontent "docs/note", type: "warning", title: "UTF-8 Character Encoding Warning" %} -If you use UTF-8 encoding, make sure that no `BOM` header characters exist in your files or -you may encounter build errors. -{% endrendercontent %} +{%@ Note type: "warning" do %} + #### UTF-8 Character Encoding Warning + + If you use UTF-8 encoding, make sure that no `BOM` header characters exist in your files or you may encounter build errors. +{% end %} ## The Power of Ruby, in Front Matter @@ -306,6 +309,6 @@ This will now show up for the path: /custom/permalink/about-us As you can see, literally any valid Ruby code has the potential to be transformed into front matter. The sky's the limit! -{% rendercontent "docs/note", type: "warning" %} +{%@ Note type: "warning" do %} For security reasons, please _do not allow_ untrusted content into your repository to be executed in an unsafe environment (aka outside of a Docker container or similar). Just like with custom plugins, a malicious content contributor could potentially introduce harmful code into your site and thus any computer system used to build that site. Enable Ruby Front Matter _only_ if you feel confident in your ability to control and monitor all on-going updates to repository files and data. -{% endrendercontent %} +{% end %} diff --git a/bridgetown-website/src/_docs/frontend-assets.md b/bridgetown-website/src/_docs/frontend-assets.md index c92ccfa12..ee72bb33c 100644 --- a/bridgetown-website/src/_docs/frontend-assets.md +++ b/bridgetown-website/src/_docs/frontend-assets.md @@ -1,62 +1,57 @@ --- title: Frontend Bundling (CSS/JS/etc.) -order: 17 -top_section: Content +order: 170 +top_section: Designing Your Site category: frontendassets --- -Bridgetown comes with a default configuration of [Webpack](https://webpack.js.org) to handle building and exporting frontend assets such as JavaScript/TypeScript/etc., CSS/Sass/etc., and related files that are imported through Webpack (fonts, icons, etc.) +For modern websites, the output of HTML content is only part of the story. You also need a way to manage CSS, JavaScript, fonts, icons, and other frontend assets in a way that's performant, optimized, and hassle-free. -The default configuration is defined in `config/webpack.defaults.js`. You can add or override config options in `webpack.config.js`. +Bridgetown provides such an integrated frontend bundling system. In fact, Bridgetown provides two: **esbuild** and **Webpack**. -The default configuration can be updated to the latest version provided by Bridgetown using the `webpack` CLI tool: +By default, Bridgetown will set up a new site using esbuild. If you prefer to use Webpack, you can pass the `--frontend-bundling=webpack` (alias `-e webpack`) option to `bridgetown new`. -```shell -bin/bridgetown webpack update -``` +You can read more about [esbuild](https://esbuild.github.io) and [Webpack](https://webpack.js.org) on their respective documentation sites. -All options provided by the `webpack` CLI tool can be viewed by running: -```shell -bin/bridgetown webpack -``` +{{ toc }} -Files to be processed by Webpack are placed in the top-level `frontend` folder within your site root. This folder is entirely separate from the Bridgetown source folder where your content, templates, plugins, etc. live. However, using relative paths you can reference files from Webpack that live in the source folder (so you could keep CSS partials alongside Liquid templates, for example). +## Frontend Locations -{% rendercontent "docs/note" %} -Wondering where to save images? Look at the `src/images` folder. You can reference them from both markup and CSS simply using a relative URL (for example, `/images/logo.svg`). Optionally, you can bundle images through Webpack and reference them with the `webpack_path` helper (more information below). If you're interested in a full-featured image management solution with the ability to resize and optimize your media sizes, check out [Cloudinary](https://www.cloudinary.com){:rel="noopener"} and the [bridgetown-cloudinary plugin](https://github.com/bridgetownrb/bridgetown-cloudinary){:rel="noopener"}. -{% endrendercontent %} +Files to be processed by esbuild or Webpack are placed in the top-level `frontend` folder within your site root. This folder is entirely separate from the Bridgetown source folder where your content, templates, plugins, etc. live. However, using relative paths you can reference files in your frontend that live in the `src` folder (so you can place component-scoped JS/CSS files alongside Liquid or Ruby templates, for example). -Bridgetown uses [Yarn](https://yarnpkg.com){:rel="noopener"} to install and manage frontend NPM-based packages and dependencies. [Gem-based plugins can instruct Bridgetown](/docs/plugins/gems-and-webpack/) to add a related NPM package whenever Bridgetown first loads the gem. +{%@ Note do %} +Wondering where to save images? Look at the `src/images` folder. You can reference them from both markup and CSS simply using a relative URL (for example, `/images/logo.svg`). Optionally, you can bundle images through esbuild/Webpack and reference them with the `asset_path` helper (more information below). If you're interested in a full-featured image management solution with the ability to resize and optimize your media sizes, check out [Cloudinary](https://www.cloudinary.com) and the [bridgetown-cloudinary plugin](https://github.com/bridgetownrb/bridgetown-cloudinary). +{% end %} -{% toc %} +Bridgetown uses [Yarn](https://yarnpkg.com) to install and manage frontend NPM-based packages and dependencies. [Gem-based plugins can instruct Bridgetown](/docs/plugins/gems-and-frontend/) to add a related NPM package whenever Bridgetown first loads the gem. ## JavaScript -The starting place for JavaScript code lives at `./frontend/javascript/index.js`. Here you can write your custom functionality, use `import` statements to pull in other modules or external packages, and so forth. This is also where you'd import all relevant CSS. (By default it imports `./frontend/styles/index.scss`.) +The starting place for JavaScript code lives at `./frontend/javascript/index.js`. Here you can write your custom functionality, use `import` statements to pull in other modules or external packages, and so forth. This is also where you'd import the CSS entrypoint as well to be processed through esbuild or Webpack. (By default it imports `./frontend/styles/index.css`.) -Because Bridgetown utilizes standard Webpack functionality, you can trick out your JavaScript setup with additional language enhancements like TypeScript or add well-known frameworks like [LitElement](https://lit-element.polymer-project.org), [Stimulus](https://stimulusjs.org), [Alpine](https://github.com/alpinejs/alpine/), [React](https://reactjs.org), [Vue](https://vuejs.org), and many others. For example, to add slick page transitions to your website using [Swup](https://swup.js.org/), you would simply run: +Because Bridgetown utilizes standard ES bundler functionality, you can trick out your JavaScript setup with additional language enhancements like Ruby2JS or TypeScript or add well-known libraries like [LitElement](https://lit.dev), [Stimulus](https://stimulus.hotwired.dev), [Alpine](https://alpinejs.dev/), [React](https://reactjs.org), [Vue](https://vuejs.org), and many others. -```sh -yarn add swup -``` +## CSS -And then update `./frontend/javascript/index.js` with: +By default Bridgetown comes with support for [PostCSS](https://postcss.org) to allow for cutting-edge/upcoming CSS features which aren't yet supported in all browsers (such as variable-based media queries and selector nesting). -```js -import Swup from "swup" +You can also choose to use [Sass](https://sass-lang.com), a pre-processor for CSS; but to do so you must pass `-e webpack --use-sass` to `bridgetown new` — currently only Webpack is officially supported (esbuild support is coming in the next point release). -const swup = new Swup() -``` +### PostCSS -And the update your HTML layout according to the Swup install guide. +The default `PostCSS` config is largely empty so you can set it up as per your preference. The only two plugins included by default are [`postcss-flexbugs-fixes`](https://github.com/luisrudge/postcss-flexbugs-fixes) and [`postcss-preset-env`](https://preset-env.cssdb.org). -## CSS +There's also a [bundled configuration](/docs/bundled-configurations#bridgetown-recommended-postcss-plugins) you can run to install additional recommended PostCSS plugins. + +{%@ Note do %} + #### All the stylesheet’s a stage… -By default Bridgetown uses [Sass](https://sass-lang.com), a pre-processor for CSS; but you can pass `--use-postcss` to `bridgetown new` to setup `PostCSS` which is popular with the Webpack community. + By default, Bridgetown configures the postcss-preset-env **stage** to be **2**, but you may want to change it to **3** or even **4** for a more compact and performant stylesheet which the latest modern browsers can interpret. The lower the stage number, the more transformations/polyfills PostCSS will run in order to build a widely-compatible stylesheet. You can also determine which individual features to polyfill by adding the `features` option. [Read the postcss-preset-env documentation here](https://www.npmjs.com/package/postcss-preset-env#options) or [browse the list of features here](https://preset-env.cssdb.org/features). +{% end %} ### Sass -The starting place for CSS code lives at `frontend/styles/index.scss`. +The starting place for Sass code lives at `frontend/styles/index.scss`. Importing common CSS frameworks such as Bootstrap, Foundation, Bulma and so forth is often as easy as running: @@ -84,51 +79,16 @@ and then add: to `index.scss`. -### PostCSS - -You can run `bridgetown new mysite --use-postcss` to configure your site with PostCSS right out-of-the-box. - -The default `PostCSS` config is largely empty so you can set it up as per your preference. The only two plugins included by default are [`postcss-flexbugs-fixes`](https://github.com/luisrudge/postcss-flexbugs-fixes) and [`postcss-preset-env`](https://preset-env.cssdb.org). - -{% rendercontent "docs/note", title: "All the stylesheet’s a stage…", extra_margin: true %} -By default, Bridgetown configures the postcss-preset-env **stage** to be **2**, but you may want to change it to **3** or even **4** for a more compact and performant stylesheet which the latest modern browsers can interpret. The lower the stage number, the more transformations/polyfills PostCSS will run in order to build a widely-compatible stylesheet. You can also determine which individual features to polyfill by adding the `features` option. [Read the postcss-preset-env documentation here](https://www.npmjs.com/package/postcss-preset-env#options) or [browse the list of features here](https://preset-env.cssdb.org/features). -{% endrendercontent %} - -If you'd like to use `Sass` with `PostCSS`, you'll need to install a plugin for it: - -```shell -$ yarn add @csstools/postcss-sass -``` - -And then include it at the top of the `plugins` object in `postcss.config.js`: - -```js -module.exports = { - plugins: { - '@csstools/postcss-sass': {}, - 'postcss-flexbugs-fixes': {}, - 'postcss-preset-env': { - autoprefixer: { - flexbox: 'no-2009' - }, - stage: 2 - } - } -} -``` - -The popular [TailwindCSS](https://tailwindcss.com) framework can be added to your project by following their [setup guide for PostCSS](https://tailwindcss.com/docs/installation#installing-tailwind-css-as-a-post-css-plugin). - ## Linking to the Output Bundles -Bridgetown's default Webpack configuration is set up to place all compiled output into the `_bridgetown` folder in your `output` folder. Bridgetown knows when it regenerates a website not to touch anything in `_bridgetown` as that comes solely from Webpack. It is recommended you do not use the site source folder to add anything to `_bridgetown` as that will not get cleaned and updated by Bridgetown's generation process across multiple builds. +Bridgetown's default esbuild/Webpack configuration is set up to place all compiled output into the `_bridgetown` folder in your `output` folder. Bridgetown knows when it regenerates a website not to touch anything in `_bridgetown` as that comes solely from the frontend bundler. It is recommended you do not use the site source folder to add anything to `_bridgetown` as that will not get cleaned and updated by Bridgetown's generation process across multiple builds. -To reference the compiled JS and CSS files from Webpack in your site template, simply add the `webpack_path` Liquid tag or Ruby helper to your HTML ``. For example: +To reference the compiled JS and CSS files from the frontend bundler in your site template, simply add the `asset_path` Liquid tag or Ruby helper to your HTML ``. For example: {% raw %} ```liquid - - + + ``` {% endraw %} @@ -141,26 +101,47 @@ This will automatically produce HTML tags that look something like this: ## Additional Bundled Assets (Fonts, Images) -By default starting with Bridgetown 0.20, both fonts and images can be bundled through Webpack's loaders. This means that, in CSS/JS files, you can reference fonts/images saved somewhere in the `frontend` folder (or even from a package in `node_modules`) and those will get transformed and copied over to `output/_bridgetown` within an appropriate subfolder and with a hashed filename (aka `photo.jpg` would become `photo-31d6cfe0d16ae931b73c59d7e0c089c0.jpg`). +Both fonts and images can be bundled through esbuild or Webpack's loaders. This means that, in CSS/JS files, you can reference fonts/images saved somewhere in the `frontend` folder (or even from a package in `node_modules`) and those will get transformed and copied over to `output/_bridgetown` with a hashed filename (aka `photo.jpg` would become `photo-31d6cfe0d16ae931b73c59d7e0c089c0.jpg`). -There's a catch with regard to how this works, because you'll also want to be able to save files directly within `src` that are accessible via standard relative URLs (so `src/images/photo.jpg` is available at `/images/photo.jpg` within the static output, no Webpack processing required). +There's a catch with regard to how this works, because you'll also want to be able to save files directly within `src` that are accessible via standard relative URLs (so `src/images/photo.jpg` is available at `/images/photo.jpg` within the static output, no frontend bundler processing required). **So here's what you'll want to do:** * For any files saved inside of `src`, use server-relative paths. For example: `background: url(/images/photo.jpg)` in a frontend CSS file would simply point to what is saved at `src/images/photo.jpg`. -* For any files saved inside of `frontend`, use filesystem-relative paths. For example: `background: url("../images/photo.jpg")` in `frontend/styles/index.css` will look for `frontend/images/photo.jpg`. If the file can't be found, Webpack will throw an error. -* For a Node package file, use Webpack's special `~` character, aka `~package-name/path/to/image.jpg`. +* For any files saved inside of `frontend`, use filesystem-relative paths. For example: `background: url("../images/photo.jpg")` in `frontend/styles/index.css` will look for `frontend/images/photo.jpg`. If the file can't be found, esbuild/Webpack will throw an error. +* When using Webpack in particular, for a Node package file use can Webpack's special `~` character, aka `~package-name/path/to/image.jpg`. -When bundling, Webpack will place image files (jpg, png, gif, svg) in `output/_bridgetown/static/path/to/image.ext` and font files (woff, woff2, eot, ttf) in `output/_bridgetown/static/fonts`. You can edit `webpack.config.js` if you wish to change this default behavior. - -You can also use the `webpack_path` Liquid tag/Ruby helper to reference assets as well. +You can use the `asset_path` Liquid tag/Ruby helper to reference assets within the `frontend` folder: {% raw %} ```liquid - + +``` + +will look for `frontend/images/folder/somefile.png`. + +## esbuild Setup + +The default configuration is defined in `config/esbuild.defaults.js`. However, you should add or override your own config options in the top-level `esbuild.config.js` file. + +_More documentation coming soon!_ + +## Webpack Setup + +The default configuration is defined in `config/webpack.defaults.js`. However, you should add or override your own config options in the top-level `webpack.config.js` file. + +The default configuration can be updated to the latest version provided by Bridgetown using the `webpack` CLI tool: + +```shell +bin/bridgetown webpack update +``` + +All options provided by the `webpack` CLI tool can be viewed by running: +```shell +bin/bridgetown webpack ``` -## Multiple Entry Points +### Multiple Entry Points If you need to manage more than one Webpack bundle, you can add additional entry points to the `webpack.config.js` file (in Bridgetown 0.20 and above). For example: @@ -168,9 +149,9 @@ If you need to manage more than one Webpack bundle, you can add additional entry config.entry.somethingElse = "./frontend/otherscript/something_else.js" ``` -Then simply reference the entry point filename via `webpack_path` wherever you'd like to load it in your HTML: +Then simply reference the entry point filename via `asset_path` wherever you'd like to load it in your HTML: ```liquid - + ``` {% endraw %} diff --git a/bridgetown-website/src/_docs/index.md b/bridgetown-website/src/_docs/index.md index 1c9a2afc4..37c85f330 100644 --- a/bridgetown-website/src/_docs/index.md +++ b/bridgetown-website/src/_docs/index.md @@ -1,77 +1,79 @@ --- -order: 1 +order: 10 title: Getting Started top_section: Introduction category: intro --- -In a nutshell, Bridgetown is a **static site generator**. You give it text written in an author-friendly markup language like Markdown, and it uses layouts and templates to build a website and save the compiled HTML, CSS, and JavaScript to an output folder. You can tweak how you want the pages to look, what data gets displayed on the site, and more. +Excited to get started? Woohoo! In case you're wondering, Bridgetown is a **progressive site generator**. You add content written in an author-friendly markup language like Markdown, alongside layouts and components using template syntax such as Liquid or ERB, and Bridgetown will then compile HTML, CSS, and JavaScript to an output website folder. You can tweak exactly how you want the pages to look, what data gets displayed on the site, and more. Bridgetown is powered by the Ruby programming language, as well as Node for JavaScript-based processing of your frontend assets. Bridgetown [started life as a Jekyll fork](/news/time-to-visit-bridgetown/) in early 2020, but it has since grown into so much more. -Bridgetown works best as part of a version-controlled repository powered by Git. You can centrally store your repository on a service like [GitHub](https://github.com) so that you and everyone else working on the website (plus your hosting provider) all have direct, secure access to the latest website content and design files. +We'll explain much more about what Bridgetown is and what it can do for you in the sections ahead. Let's go! -During the development process, you will likely be running Bridgetown from the command line on your local developer machine (or perhaps a remote staging server). Once content is ready to publish, you would commit your website codebase to the Git repository and use an automated build tool to generate and upload the final output to a server or CDN (Content Delivery Network). [Render](https://www.render.com) is a popular service for this, but there are many others. You can also just literally copy the generated files contained in the `output` folder to any HTTP web server and it should Just Work. 😊 - -For more background on this development approach, [read up on our Jamstack primer](/docs/jamstack/). - -For a succinct overview of how the Bridgetown build process works and what goes into creating a site, [read our Core Concepts guide](/docs/core-concepts/). - -## Quick Instructions {% if site.data.edge_version %}(EDGE RELEASE){% endif %} +## Quick Instructions {% if site.data.edge_version %}(EDGE RELEASE){% end %} {% if site.data.edge_version %} - {% rendercontent "docs/note", type: "warning" %} + {%@ Note type: "warning" do %} If you don't want to use the latest edge version of Bridgetown, [switch to the stable release documentation](https://www.bridgetownrb.com/docs/). - {% endrendercontent %} -{% endif %} - -{% rendercontent "docs/note" %} - Upgrading from v0.x? [Read our 1.0 upgrade notes here.](/release/era-of-bridgetown-v1/#upgrading-from-v02x){:data-no-swup="true"} -{% endrendercontent %} - -Read [requirements]({{ '/docs/installation' | relative_url }}) for more information on what you'll need to have set up in advance. - -The basic installation process is as follows: + {% end %} +{% end %} -1. Install a **Ruby** development environment which is supported by Bridgetown. +{%@ Note do %} + Upgrading from v0.x? [Read our 1.0 upgrade guide here.](/docs/installation/upgrade) +{% end %} -2. Install **Node** and **Yarn** to handle frontend assets and spin up a live-reload development server. +Read the [requirements](/docs/installation) for more information on what you'll need to have set up in advance, primarily **Ruby** and **Node**/**Yarn**. Then: -3. Install **Bridgetown** and related gems: -{%- if site.data.edge_version %} +1. Install **Bridgetown** and related gems: +{%- if site.data.edge_version -%} ``` -$ gem install bridgetown -N -v {{ bridgetown.version }} +$ gem install bridgetown -N -v {{ Bridgetown::VERSION }} ``` -{%- else %} +{%- else -%} ``` $ gem install bridgetown -N ``` -{%- endif %} +{%- end -%} -4. Create a new Bridgetown site at `./mysite`. +2. Create a new Bridgetown site at `./mysite`. ``` $ bridgetown new mysite ``` -5. Change into your new directory. +3. Change into your new directory. ``` $ cd mysite ``` -6. Build the site and run a live-reload development server: +4. Build the site and run a live-reload development server: ``` $ bin/bridgetown start ``` -7. Browse to [http://localhost:4000](http://localhost:4000){:target="_blank"} +5. Browse to [http://localhost:4000](http://localhost:4000){:target="_blank"} -8. And you're done! (That's the goal at least 😊) +6. And you're done! (That's the goal at least 😊) -If you encounter any errors during this process, try revisiting your installation and setup steps, and if all else fails, [reach out to the Bridgetown community for support](/docs/community/). Also, make sure you've installed the development headers and other prerequisites as mentioned in the [Requirements](/docs/installation/#requirements) section. +{%@ Note do %} +Detailed installation instructions for macOS, Ubuntu Linux, Fedora Linux and Windows 10 are [available here](/docs/installation). +{% end %} -{% rendercontent "docs/note" %} -More detailed installation instructions for macOS, Ubuntu Linux, Fedora Linux and Windows 10 are [available here](/docs/installation/#guides). -{% endrendercontent %} +{%@ Note do %} +Prefer ERB or Serbea over Liquid? Prefer Webpack over esbuild? Prefer Sass over vanilla CSS? [Read about the available `new` options here](/docs/command-line-usage). +{% end %} -Bridgetown comes with the `bridgetown` CLI tool as well as several Yarn scripts, +{%@ Note type: :warning do %} +Still stuck? [Please reach out to the Bridgetown community for support](/community). What might take you three hours to eventually figure out could take a mere 10 minutes with the right pointers! +{% end %} + +Bridgetown comes with the `bridgetown` CLI tool as well as a few Rake tasks and Yarn scripts, so be sure to read up on the [command line usage documentation](/docs/command-line-usage). -Also read up on [Bridgetown's Core Concepts](/docs/core-concepts/) to gain familiarity with the basic building blocks and workflow of Bridgetown. +## More About the Tech Specs + +Bridgetown is sometimes called a "static site generator" or a "Jamstack" web framework. We think it's simpler to think in terms of _progressive generation_ — the idea that the moment at which your over-the-wire HTML & JSON is generated can vary, depending on the method you choose to use on a route-by-route basis as well as the architecture of your frontend. Bridgetown starts off in SSG (Static Site Generation) mode, and you can opt-into SSR (Server-Side Rendering) mode only if and when you need it. And depending on your choice of frontend tooling, you can leverage CSR (Client-Side Rendering) along with hydration techniques to add highly dynamic and interactive experiences—without compromising on base site speed and efficiency. + +Bridgetown works best as part of a version-controlled repository powered by Git. You'll likely want to store your repository on a service like [GitHub](https://github.com) so that you and everyone else working on the website (plus your hosting provider) all have direct, secure access to the latest website content and design files. + +During the development process, you'll run Bridgetown from the command line on your local development machine (or perhaps a remote staging server). Once content is ready to publish, you'll want to commit your website codebase to the Git repository and use an automated build tool to generate and upload the final output to a server or CDN (Content Delivery Network). [Render](https://www.render.com) is a popular service for this, but there are many others. You can also just literally copy the generated files contained in the `output` folder to any HTTP web server and it should Just Work. 😊 + +For more details on how the Bridgetown build process works and what goes into creating a site, continue on to read our **Core Concepts** guide. diff --git a/bridgetown-website/src/_docs/installation.md b/bridgetown-website/src/_docs/installation.md index 99f605f1e..0362d9672 100644 --- a/bridgetown-website/src/_docs/installation.md +++ b/bridgetown-website/src/_docs/installation.md @@ -1,15 +1,16 @@ --- -order: 3 +order: 40 title: Installation Guides description: Official guides to install Bridgetown on macOS, GNU/Linux or Windows. top_section: Setup -category: installation +category: installation-guides --- Bridgetown is software written in Ruby, a friendly programming language that maximizes programmer happiness and makes it easy to build and customize open source projects. You will need to install Bridgetown as a Gem after you set up your Ruby language environment. You will also need to install Node and Yarn to manage your website's frontend assets. -{:.note} +{%@ Note do %} For a quick summary of how to install Bridgetown, read [Getting Started](/docs/). What follows are more in-depth guides to setting up your developer or server environments. +{% end %} ## Requirements @@ -18,11 +19,14 @@ Ubuntu Linux, and Ubuntu for Windows will help you install them. * [GCC](https://gcc.gnu.org/install/) and [Make](https://www.gnu.org/software/make/) (which you can check by running `gcc -v`,`g++ -v` and `make -v`). + * [Ruby](https://www.ruby-lang.org/en/downloads/) version **{{ site.data.requirements.min_ruby }}** or above (ruby version can be checked by running `ruby -v`) + * [Node](https://nodejs.org) version **{{ site.data.requirements.min_node }}** or above (which you can check by running `node -v`) + * [Yarn](https://yarnpkg.com) (which you can check by running `yarn -v`) ## Guides @@ -30,7 +34,11 @@ Ubuntu Linux, and Ubuntu for Windows will help you install them. For detailed installation instructions, take a look at the guide for your operating system: -* [macOS](/docs/installation/macos/) -* [Fedora Linux](/docs/installation/fedora/) -* [Ubuntu Linux](/docs/installation/ubuntu/) -* [Windows (via Linux Subsystem + Ubuntu)](/docs/installation/windows/) +* [macOS](/docs/installation/macos) +* [Fedora Linux](/docs/installation/fedora) +* [Ubuntu Linux](/docs/installation/ubuntu) +* [Windows (via Linux Subsystem + Ubuntu)](/docs/installation/windows) + +## Upgrading? + +We now have an [official upgrade guide](/docs/installation/upgrade) for migrating your Bridgetown v0.2x website to v1.0. diff --git a/bridgetown-website/src/_docs/installation/fedora.md b/bridgetown-website/src/_docs/installation/fedora.md index bca8afed0..e9e90251e 100644 --- a/bridgetown-website/src/_docs/installation/fedora.md +++ b/bridgetown-website/src/_docs/installation/fedora.md @@ -1,7 +1,8 @@ --- title: Bridgetown on Fedora -hide_in_toc: true -category: installation +top_section: Setup +category: installation-guides +back_to: installation ruby_version: 3.0.2 order: 0 --- @@ -101,4 +102,4 @@ yarn -v ``` -{% render "docs/install/bridgetown", version: bridgetown.version, edge_version: site.data.edge_version %} +{%@ "docs/install/bridgetown" %} diff --git a/bridgetown-website/src/_docs/installation/macos.md b/bridgetown-website/src/_docs/installation/macos.md index 9d76fbe87..b9ed65cbe 100644 --- a/bridgetown-website/src/_docs/installation/macos.md +++ b/bridgetown-website/src/_docs/installation/macos.md @@ -1,7 +1,8 @@ --- title: Bridgetown on macOS -hide_in_toc: true -category: installation +top_section: Setup +category: installation-guides +back_to: installation ruby_version: 3.0.2 order: 0 --- @@ -90,11 +91,11 @@ gem env And check that `SHELL PATH:` includes to a path to `~/.gem/ruby/X.X.0/bin` -{% rendercontent "docs/note" %} +{%@ Note do %} Every time you update Ruby to a version with a different first two digits, you will need to update your path to match. You will also need to add `--user-install` to any `gem install` statement you run. -{% endrendercontent %} +{% end %} ## Install Node & Yarn {#node} @@ -117,4 +118,4 @@ node -v yarn -v ``` -{% render "docs/install/bridgetown", version: bridgetown.version, edge_version: site.data.edge_version %} +{%@ "docs/install/bridgetown" %} diff --git a/bridgetown-website/src/_docs/installation/ubuntu.md b/bridgetown-website/src/_docs/installation/ubuntu.md index b2e335e23..28b0326df 100644 --- a/bridgetown-website/src/_docs/installation/ubuntu.md +++ b/bridgetown-website/src/_docs/installation/ubuntu.md @@ -1,7 +1,8 @@ --- title: Bridgetown on Ubuntu -hide_in_toc: true -category: installation +top_section: Setup +category: installation-guides +back_to: installation ruby_version: 3.0.2 order: 0 --- @@ -81,5 +82,5 @@ ruby -v And that's it! Check out [rbenv command references](https://github.com/rbenv/rbenv#command-reference) to learn how to use different versions of Ruby in your projects. -{% render "docs/install/node_on_linux" %} -{% render "docs/install/bridgetown", version: bridgetown.version, edge_version: site.data.edge_version %} +{%@ "docs/install/node_on_linux" %} +{%@ "docs/install/bridgetown" %} diff --git a/bridgetown-website/src/_docs/installation/upgrade.md b/bridgetown-website/src/_docs/installation/upgrade.md new file mode 100644 index 000000000..c6c667f8b --- /dev/null +++ b/bridgetown-website/src/_docs/installation/upgrade.md @@ -0,0 +1,48 @@ +--- +title: Upgrading from v0.2x +top_section: Setup +category: installation-guides +back_to: installation +order: 0 +--- + +To upgrade your existing Bridgetown site to 1.0, you’ll need to specify the new version in your Gemfile: + +```ruby +gem "bridgetown", "~> {{ Bridgetown::VERSION }}" +``` + +You’ll also need to add Puma to your Gemfile: + +```ruby +gem "puma", "~> 5.5" +``` + +Then run `bundle install`. (You’ll also want to upgrade to the latest version of any extra plugins you may have added, such as the feed and seo plugins.) + +Next you should run `bundle binstubs bridgetown-core` so you have access to `bin/bridgetown`, as this is now the canonical way of accessing the Bridgetown CLI within your project. + +You will need to add a few additional files to your project, so we suggest using `bridgetown new` to create a separate project, then copy these files over: + +* `config.ru` +* `Rakefile` +* `config/puma.rb` +* `server/*` + +Finally, you can remove `start.js` and `sync.js` and well as any scripts in `package.json` besides `webpack-build` and `webpack-dev` (and you can also remove the `browser-sync` and `concurrently` dev dependencies in `package.json`). + +Going forward, if you need to customize any aspect of Bridgetown’s build scripts or add your own, you can alter your `Rakefile` and utilize Bridgetown’s automatic Rake task support. + +{%@ Note type: :warning do %} + Your plugins folder will now be loaded via Zeitwerk by default. This means you'll need to namespace your Ruby files using certain conventions or reconfigure the loader settings. [Read the documentation here](/docs/plugins#zeitwerk-and-autoloading). +{% end %} + +The other major change you’ll need to work on in your project is switching your plugins/templates to use resources. There’s a fair degree of [documentation regarding resources here](/docs/resources). In addition, if you used the Document Builder API in the past, you’ll need to upgrade to the [Resource Builder API](/docs/plugins/external-apis). + +{%@ Note do %} +#### Get That Live Reloading Going Again + +The live reloading mechanism in v1.0 is no longer injected automatically into your HTML layout, so you'll need to add `{%% live_reload_dev_js %}` (Liquid) or `<%= live_reload_dev_js %>` (ERB) to your HTML head in order to get live reload working. Please make sure you've added `BRIDGETOWN_ENV=production` as an environment variable to your production deployment configuration so live reload requests won't be triggered on your public website. +{% end %} + +We’ve added an **upgrade-help** channel in our [Discord chat](https://discord.gg/4E6hktQGz4) so if you get totally suck, the community can give you a leg up! (Access to the problematic repo in question is almost always a given in order to troubleshoot, so if your code needs to remain private, please create a failing example we can access on GitHub.) diff --git a/bridgetown-website/src/_docs/installation/windows.md b/bridgetown-website/src/_docs/installation/windows.md index 55d9e139d..a4c645ab4 100644 --- a/bridgetown-website/src/_docs/installation/windows.md +++ b/bridgetown-website/src/_docs/installation/windows.md @@ -1,15 +1,16 @@ --- title: Bridgetown on Windows -hide_in_toc: true -category: installation +top_section: Setup +category: installation-guides +back_to: installation order: 0 --- -{% render "docs/help_needed", page: page %} +{%@ "docs/help_needed", resource: resource %} The easiest way to use Bridgetown on Windows is to install the _Windows Subsystem for Linux_. This provides a Linux development environment in which you can install Bash, Ruby, and other tools necessary to run Bridgetown in an optimized fashion. Try reading [these excellent instructions by GoRails](https://gorails.com/setup/windows/10) to install Ubuntu Linux on Windows, and then once you've reached the "**Installing Rails**" portion, you can come back and continue: -{% render "docs/install/node_on_linux" %} -{% render "docs/install/bridgetown", version: bridgetown.version, edge_version: site.data.edge_version %} +{%@ "docs/install/node_on_linux" %} +{%@ "docs/install/bridgetown" %} diff --git a/bridgetown-website/src/_docs/jamstack.md b/bridgetown-website/src/_docs/jamstack.md deleted file mode 100644 index 7e39cbeb2..000000000 --- a/bridgetown-website/src/_docs/jamstack.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: What’s a Jamstack? -order: 22 -top_section: Philosophy -category: jamstack ---- - -According to [Jamstack.org](https://jamstack.org), it's a unique approach to building websites and software for the web: - -{:.my-8} -> **Fast and secure sites and apps delivered by pre-rendering files and serving them directly from a CDN, removing the requirement to manage or run web servers.** - -Jamstack sites deliver better performance, higher security, lower cost of scaling, and a superior developer experience. - -## Comparison - -How does the Jamstack compare with another type of system, such as a monolithic CMS (Content Management System) like WordPress or a bespoke application built in a framework like Ruby on Rails? - -* **Single App Stack: Built Upon Each Request.** WordPress, Ruby on Rails, Node, Squarespace, etc. are all designed to run as server software that delivers website content to site visitors at the moment they request it. In other words, when a web browser goes to a specific page, the server software has to generate that page on the spot and send it to the browser. - -* **Jamstack: Pre-Built When Content Updates.** A Jamstack website is instead served from a CDN (Content Delivery Network) or standard filesystem rather than a dynamic application server. That means when a visitor opens up a Jamstack site, the essential design and content is _not being generated_ on-the-fly, but rather is coming from a _recent, pre-built_ static snapshot. The speed at which that data transfer can happen and the simplicity of scaling that solution to thousands or even millions of users is an order of magnitude simpler (and cheaper) than the dynamic server approach. - -* **Jamstack Interactivity is Added On.** If you do need to add interactivity and fresh real-time information to a Jamstack site, you would need to use JavaScript to load data from an API (Application Programming Interface). You can build an API yourself or employ any number of third-party APIs (including public data services). Using the web development best practice known as _Progressive Enhancement_, you'd build your site for the static snapshot use case **first**, and then add layers of additional interactivity on top **second** (with the goal being any sort of temporary API failure won't terribly degrade the basic website experience). - -{:.mt-12} -## "JAM" (JavaScript, APIs, Markup) Stack - -Because **Bridgetown** is a Jamstack framework/site generator, this is how you'd go about developing a website. The process is essentially reversed from the catchy acronym JAM: you start with the markup and work your way up to dynamic frontend functionality. - -**Markup.** You start by defining the HTML templates of your website and writing CSS to lay elements out on the page, set typography, and add other graphical enhancements. You author content (blog posts, informational pages, structured data collections, etc.) in simple formats like Markdown, YAML, CSV, JSON, etc., and that content gets automatically converted to final HTML whenever **Bridgetown** is instructed to build the site for deployment. - -**APIs.** If you need to pull in data from external sources, or interact with online services via user input, you'll need to find or write one or more APIs. APIs come in many shapes and sizes. Since **Bridgetown** is written in Ruby, one possibility is to use Ruby on Rails to build a custom API, and then use that API either during the website build process (thus "baking" the API's data into the static snapshot for deployment) or on-the-fly via JavaScript (see below). But you can write an API using virtually any language or framework… Node, Python, Go, you name it. Or find a third-party web service which lets you use or adapt existing APIs. - -**JavaScript.** The final piece of the puzzle…frontend JavaScript lets you write interactive components and modules that add fresh information to a webpage, capture and process input from users, and otherwise enhance the functionality of your website. Remember, it's best to try as much as possible to provide a working site _without_ JavaScript running, and then use JavaScript to add new features on top of the basic experience. There are many popular JavaScript frameworks available, and by utilizing the Webpack bundler tool, **Bridgetown** lets you easily add one of your choosing—whether it be [Stimulus](https://stimulusjs.org), [Alpine](https://github.com/alpinejs/alpine/), [Vue](https://vuejs.org), [React](https://reactjs.org), [LitElement](https://lit-element.polymer-project.org), or vanilla [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web_Components). - -{:.mt-12} -## How Do You Edit and Publish Content with the Jamstack? - -There are typically three different ways to author, manage, save, and publish website content when working with Jamstack sites. Some are easier for programmers, others are easier for visually-focused content creators and editors. - -1. **Save Files in the Git Repository.** Because Jamstack sites are typically located in a version-controlled code repository using Git, and saved onto a central repo service such as GitHub, you can clone the site files directly to your device, add Markdown posts and other site content, and _commit_ those changes to the repository. Once you _push_ those changes back up to GitHub (for example), that usually triggers an automated build process to publish the latest changes to the web. Jamstack-focused services such as [Render](https://www.render.com) are a great way to build and publish the website. Unlike hosting services of the past, Render's starting price can't be beat: **it's free** 😁. - -1. **Use a CMS-like editing interface.** There is a growing number of tools which provide a familiar visual editing interface on the web, but under the hood modify the same files in the repo (Markdown posts, data collections, etc.) much like the first process above. Examples of these kinds of tools are Forestry, Siteleaf, Netlify CMS, and many others. - -1. **Store content inside a "headless" CMS.** This utilizes a process closest to the previous era of dynamic CMS applications. With what's called a "headless" CMS, you author content interactively using the CMS, and content is stored in that CMS' database. When content is ready to get published, a build process is triggered for the Jamstack site generator (aka **Bridgetown**), but at that point the generator uses the headless CMS' API to download all relevant data and produce the final website for deployment. There are many headless CMS tools available, and you can even use WordPress itself as one! (Although that's not typically recommended… 😋) - -{:.mt-12} -## How Do I Get Started Building a Jamstack Website? - -We're biased, of course, but our recommendation is simple: install **Bridgetown**, run `bridgetown new` to create a blank site repository, and start customizing your HTML templates, adding a fun CSS framework like Bulma or Tailwind, and authoring some content. Once you have something you like, simply push the repository up to GitHub, connect the repo up to a Jamstack hosting service like Render, and deploy. That might sound like a daunting sequence of steps, but once you get the hang of it the whole process might only take up a breezy afternoon. (Some of us remember spending hours just wrestling with MySQL databases and WordPress theme files! The future is bright, folks! 😃🎉) - -{:.has-text-centered.mt-10} -[Get Started](/docs/){:.button.is-large.is-info} - diff --git a/bridgetown-website/src/_docs/layouts.md b/bridgetown-website/src/_docs/layouts.md index a6efcdb05..d04e66ee4 100644 --- a/bridgetown-website/src/_docs/layouts.md +++ b/bridgetown-website/src/_docs/layouts.md @@ -1,7 +1,7 @@ --- title: Layouts -order: 9 -top_category: Structure +order: 150 +top_section: Designing Your Site category: layouts --- @@ -9,9 +9,9 @@ Layouts are templates that wrap around your [resource's content](/docs/resources Layouts live in the `_layouts` folder. The convention is to have a base template called `default.html` and have other layouts [inherit](#inheritance) from this as needed. -{% rendercontent "docs/note" %} +{%@ Note do %} While you can configure the folder name in which your layouts can reside by setting the `layouts_dir` key in your config file, the folder itself should be located at the root of your site's `source` folder. -{% endrendercontent %} +{% end %} ## Usage @@ -80,11 +80,11 @@ The rendered output of this resource then is: ``` -You can also use [front matter defaults](/docs/configuration/front-matter-defaults/) to to avoid having to set a layout explicitly for every resource. Note that if you have defaults in place and you _don't_ want a certain resource to render in a layout, you can specify `layout: none` in the resource's front matter. +You can also use [front matter defaults](/docs/content/front-matter-defaults/) to to avoid having to set a layout explicitly for every resource. Note that if you have defaults in place and you _don't_ want a certain resource to render in a layout, you can specify `layout: none` in the resource's front matter. -{% rendercontent "docs/note" %} - If you you're using ERB or another Ruby template language for your layout, try using the more idiomatic `yield` instead of `content`. Refer to the [ERB and Beyond](/docs/erb-and-beyond) docs for further details. -{% endrendercontent %} +{%@ Note do %} + If you you're using ERB or another Ruby template language for your layout, try using the more idiomatic `yield` instead of `content`. Refer to the [ERB and Beyond](/docs/template-engines/erb-and-beyond) docs for further details. +{% end %} ## Inheritance diff --git a/bridgetown-website/src/_docs/liquid.md b/bridgetown-website/src/_docs/liquid.md deleted file mode 100644 index 78e6cb93c..000000000 --- a/bridgetown-website/src/_docs/liquid.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Liquid -order: 18.5 -next_page_order: 19 -top_section: Templates -category: liquid ---- - -Bridgetown provides comprehensive support for rich presentation of data and design via the **Liquid** template language, available within documents as well as layouts and [components](/docs/components). If you find that Liquid doesn't suit your needs when building your site templates, [Bridgetown also allows for using ERB (Embedded RuBy)](/docs/erb-and-beyond). You can mix and match ERB and Liquid templates freely throughout your site. - -Generally in Liquid you output content using two curly braces e.g. -{% raw %}`{{ variable }}`{% endraw %} and perform logic statements by -surrounding them in a curly brace percentage sign e.g. -{% raw %}`{% if statement %}`{% endraw %}. To learn more about Liquid, check -out the [official Liquid Documentation](https://shopify.github.io/liquid/). - -The ability to use Liquid within Markdown in posts and pages allows for truly advanced customization of your content pipeline. For example, you can write custom Liquid [tags](/docs/plugins/tags) and [filters](/docs/plugins/filters) and use them throughout your site. - -In addition to Liquid's standard suite of filters and tags, Bridgetown provides a number of useful additions to help you build your site: - - - Filters List - Tags List - diff --git a/bridgetown-website/src/_docs/liquid/filters.md b/bridgetown-website/src/_docs/liquid/filters.md index 53b951e0d..a6249fa3f 100644 --- a/bridgetown-website/src/_docs/liquid/filters.md +++ b/bridgetown-website/src/_docs/liquid/filters.md @@ -1,8 +1,8 @@ --- title: Liquid Filters -hide_in_toc: true +top_section: Designing Your Site order: 0 -category: liquid +category: template-engines shopify_filter_url: https://shopify.github.io/liquid/filters/ shopify_filters: - abs @@ -58,7 +58,7 @@ All of the standard Liquid [filters](#standard-liquid-filters) are supported (se To make common tasks easier, Bridgetown even adds a few handy filters of its own, all of which you can find on this page. You can also create your own filters -using [plugins](/docs/plugins/filters/). +using [plugins](/docs/plugins/filters). @@ -68,22 +68,22 @@ using [plugins](/docs/plugins/filters/). - {% for filter in site.data.bridgetown_filters %} + {% site.data.bridgetown_variables.liquid_filters.each do |filter| %} - {% endfor %} + {% end %}

    {{ filter.name }}

    - {{- filter.description -}} + {{ filter.description | safe }}

    - {%- for example in filter.examples %} + {% filter.examples.each do |example| %}

    {{ example.input }}

    - {% if example.output %}

    {{ example.output }}

    {% endif %} - {% endfor -%} + {% if example.output %}

    {{ example.output }}

    {% end %} + {% end %}
    @@ -144,6 +144,6 @@ Or to get a list of comic-book based movies, one may use the following: For your convenience, here is the list of all [Liquid filters]({{ resource.data.shopify_filter_url }}) with links to examples in the official Liquid documentation. -{% for filter in resource.data.shopify_filters %} +{% resource.data.shopify_filters.each do |filter| %} - [{{ filter }}]({{ filter | prepend: resource.data.shopify_filter_url | append: '/' }}) -{% endfor %} +{% end %} diff --git a/bridgetown-website/src/_docs/liquid/tags.md b/bridgetown-website/src/_docs/liquid/tags.md index 033eedd9c..433070836 100644 --- a/bridgetown-website/src/_docs/liquid/tags.md +++ b/bridgetown-website/src/_docs/liquid/tags.md @@ -1,14 +1,14 @@ --- title: Liquid Tags -hide_in_toc: true +top_section: Designing Your Site order: 0 -category: liquid +category: template-engines --- All of the standard Liquid [tags](https://shopify.github.io/liquid/tags/control-flow/) are supported. Bridgetown has a few built in tags to help you build your site. You can also create -your own tags using [plugins]({{ '/docs/plugins/tags/' | relative_url }}). +your own tags using [plugins](/docs/plugins/tags). ## Component rendering @@ -16,7 +16,7 @@ You can use the `render` and `rendercontent` tags to embed content and template ## Find tag -New in Bridgetown 0.17, you can now use the `find` tag to loop through a data object or collection and pull out one or more items to use in your Liquid template. Whereas before you could use the [`where_exp` filter](/docs/liquid/filters/#binary-operators-in-where_exp-filter){:data-no-swup="true"} to accomplish a similar purpose, this tag is more succinct and has support for single item variables. +You can use the `find` tag to loop through a data object or collection and pull out one or more items to use in your Liquid template. Whereas before you could use the [`where_exp` filter](/docs/liquid/filters/#binary-operators-in-where_exp-filter) to accomplish a similar purpose, this tag is more succinct and has support for single item variables. The syntax of the tag is as follows: @@ -48,7 +48,7 @@ Or to find multiple items and assign that array to the variable `albums`: ``` {% endraw %} -Each expression (separated by a comma) adds an "AND" clause to the conditional logic. If you need OR logic instead, you can still use the `where_exp` filter, or you can write additional `find` tags and [concat](https://shopify.github.io/liquid/filters/concat/){:rel="noopener"} the arrays together (you'll probably also want to use the `uniq` filter to ensure you don't end up with duplicates). +Each expression (separated by a comma) adds an "AND" clause to the conditional logic. If you need OR logic instead, you can still use the `where_exp` filter, or you can write additional `find` tags and [concat](https://shopify.github.io/liquid/filters/concat/) the arrays together (you'll probably also want to use the `uniq` filter to ensure you don't end up with duplicates). {% raw %} ```liquid @@ -108,22 +108,20 @@ language identifier. To find the appropriate identifier to use for the language you want to highlight, look for the “short name” on the [Rouge wiki](https://github.com/jayferd/rouge/wiki/List-of-supported-languages-and-lexers). -{% rendercontent "docs/note", - type: "warning", - extra_margin: true, - title: "Bridgetown processes all Liquid filters in code blocks" %} +{%@ Note type: :warning do %} + #### Bridgetown processes all Liquid filters in code blocks If you are using a language that contains curly braces, you will likely need to place {% raw %} and {% endraw %} tags around your code. If needed, you can add `render_with_liquid: false` in your front matter to disable Liquid entirely for a particular document. -{% endrendercontent %} +{% end %} -{% rendercontent "docs/note" %} +{%@ Note do %} You can also use fenced code blocks in Markdown (starting and ending with three backticks ```) instead of using the `highlight` tag. However, the `highlight` tag includes additional features like line numbers (see below). -{% endrendercontent %} +{% end %} ### Line numbers diff --git a/bridgetown-website/src/_docs/pages.md b/bridgetown-website/src/_docs/pages.md deleted file mode 100644 index 611410aa5..000000000 --- a/bridgetown-website/src/_docs/pages.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Pages -order: 10.5 -next_page_order: 11 -top_section: Content -category: pages -hide_in_toc: true ---- - -{% rendercontent "docs/note", type: "warning" %} -The page as a distinct content type has been removed in Bridgetown 1.0. Read about the new [resource content engine](/docs/resources) to learn more about how to create pages and other types of content in v1.0. -{% endrendercontent %} diff --git a/bridgetown-website/src/_docs/philosophy.md b/bridgetown-website/src/_docs/philosophy.md index df95f8eab..227994a30 100644 --- a/bridgetown-website/src/_docs/philosophy.md +++ b/bridgetown-website/src/_docs/philosophy.md @@ -1,11 +1,17 @@ --- -title: Project Goals -order: 21 -top_section: Philosophy +title: Our Philosophy +order: 30 +top_section: Introduction category: philosophy --- -Every successful open source project has a certain "vibe", those thought patterns and behaviors which ensure meaningful, constant progress forward and the growth of a vibrant developer community. Our project is young, but we feel it's important to start off with a few basic principles and work out way out from here. +Every successful open source project has a certain "vibe", those thought patterns and behaviors which ensure meaningful, constant progress forward and the growth of a vibrant developer community. Our project may be relatively young, yet we feel it's important to lead with a set of basic principles what will help guide the project long into the future. + +(This page is lengthy, so [feel free to skip over to the next section of documentation](/docs/installation)!) + +{{ toc }} + +## Core Principles * **Move fast but try really hard not to break things.** Most developer-focsued software projects err on a side…either the side of extreme backwards-compatibility with past versions, or the side of evolving quickly and requiring devs to go through multiple rounds of ["yak shaving"](http://projects.csail.mit.edu/gsb/old-archive/gsb-archive/gsb2000-02-11.html) when upgrading to new versions. @@ -15,8 +21,59 @@ Every successful open source project has a certain "vibe", those thought pattern * **Convention over configuration.** Again, to take a cue from that other popular Ruby-based framework (😉), we strongly believe Bridgetown should encourage powerful defaults and best-practice conventions to give website developments an instant leg up as they start new projects. If you have to go fishing for a bunch of extra plugins and add a slew of extra libraries and reconfigure settings just to complete basic setup tasks, we're doing it wrong. -* **Grow the Ruby ecosystem.** We're unabashed fans of Ruby and consider it our duty to promote and grow the Ruby ecosystem as part of our work on Bridgetown. This includes contributing Ruby code of course, but it also includes developer advocacy and education. Other languages like Go are popular because they're speedy, or JavaScript because it's, well, JavaScript—but Ruby continues to be a strong contender because [it optimizes for programmer happiness](https://basecamp.com/gettingreal/10.2-optimize-for-happiness). We hope that some day when a Ruby beginner wants to get their feet wet, they'll start by reaching for Bridgetown and writing a custom plugin or two for their website. +* **Grow the Ruby ecosystem.** We're unabashed fans of Ruby and consider it our duty to promote and grow the Ruby ecosystem as part of our work on Bridgetown. This includes contributing Ruby code of course, but it also includes developer advocacy and education. Other languages like Go are popular because they're super speedy, or JavaScript because it's, well, JavaScript—but Ruby continues to be a strong contender because [it optimizes for programmer happiness](https://basecamp.com/gettingreal/10.2-optimize-for-happiness). We hope that some day when a Ruby beginner wants to get their feet wet, they'll start by reaching for Bridgetown and writing a custom plugin or two for their website. + +* **Be a leader in Jamstack-style technology** (_without being constrained by it_)**.** Bridgetown's progenitor ([Jekyll](https://jekyllrb.com)) played a significant role in kicking off the modern explosion of the "Jamstack" due to its static generation bona fides. In fact, there might not _be_ a Jamstack today if Jekyll's popularity as the technology powering GitHub Pages hadn't caught fire in the early 2010s. Our sincere wish is that Bridgetown would play a unique and vital role in the continued expansion of this exciting way of building and deploying websites, while also identifying and correcting ways we feel the Jamstack space has strayed too far from its inaugural mission. (For instance, we're _skeptical_ of building complex fullstack applications using serverless functions. It's a solution in search of a problem not everyone has, and it's often promoted by the very hosting companies who benefit from increased usage of serverless functions _because they offer no alternative_. Buyer beware!) + +## A Brief History of Bridgetown + +Bridgetown started life as a fork of the granddaddy of static site generators, [Jekyll](https://jekyllrb.com). Jekyll came to prominence in the early 2010s due to its slick integration with GitHub, powering thousands of websites for developer tools. In the years since it has grown to provide a popular foundation for a wide variety of sites across the web. + +But as the concepts of modern static site generation and the "Jamstack" came to the forefront, a whole new generation of tools rose up, like [Hugo](https://gohugo.io), [Eleventy](https://www.11ty.dev), [Next.js](http://nextjs.org), and many more. In the face of all this new competition, Jekyll chose to focus on maintaining extensive backwards-compatibility and a paired-down feature set—noble goals for an open source project generally speaking, but ones that were at odds with meaningful portions of the web developer community. + +So in March 2020, Portland-based web studio [Whitefusion](https://www.whitefusion.studio) started on **Bridgetown**, a fork of Jekyll with a brand new set of project goals and a future roadmap. Whitefusion's multi-year experience producing and deploying numerous Jekyll-based websites furnishes a seasoned take on the unique needs of web agencies and their clients. In the intervening months since, we've seen this strategy pay off in a big way. + +Bridgetown has grown considerably since its inception, but in many ways, we're just getting started. We hope you [join our community](/community), build something awesome with Bridgetown, and share it with the world! + +## Future Project Roadmap + +In late 2021, we crafted a new roadmap for our work on Bridgetown's underlying technologies as well as "marketing" focus heading into 2022. Bear in mind many of the plans outlined below are already present and built into Bridgetown v1.0. But to recap: + +We are organizing our work around these three tracks: + +* The Platform Track +* The Content Authoring Track +* The Experiences Track + +### The Platform Track + +These are the core architectural features Bridgetown needs to be successful across all site builds and deployments. + +Included in this track are: + +* Switching the built-in server from WEBrick to Rack + Puma, along with Roda to handle intelligent serving of static assets (more on Roda below). +* Migrating away from relying on `yarn` as the principal CLI tool and standardizing around the `bin/bridgetown` stub + Rake integration. (We'll still use Yarn for installing and bundling frontend dependencies.) +* Putting the finishing touches on a huge effort we’ve been calling “The Great Content Re-alignment” — aka replacing the aging Jekyll-derived content engine with the new Resource engine (which among other things supports conceptual consistency, relationship modeling, and taxonomies). +* Enabling dynamic rendering of specific data and resources within Bridgetown, thus opening the doors to SSR (Server-Side Rendering) and other fascinating use cases. +* Resolving a number of deprecations, alterations, and needed fixes in order to arrive at API stability for 1.0 and beyond. + +### The Content Authoring Track + +These are features needed to make Bridgetown the perfect choice for advanced content authoring requirements. + +* Implementing robust multilingual and localization features (i18n), continuing under-the-hood work we’ve already undertaken. +* Creating integration points and even full gems to provide turn-key solutions for headless CMSes like Prismic and Strapi. +* Adding advanced interactions with file-based content structures and Git state (think `jekyll-compose` on steroids along with WordPress-style status and revision control)…allowing third-parties to build their own Ruby-based “CMS” solutions. +* Providing publishing lifecycle and webhooks so Bridgetown seamlessly fits into a larger editorial pipeline. + +### The Experiences Track -* **Be a leader in [Jamstack](/docs/jamstack/) technology.** Bridgetown's progenitor ([Jekyll](https://jekyllrb.com)) played a significant role in kicking off the modern explosion of Jamstack technology. In fact, there might not _be_ a Jamstack today if Jekyll's popularity as the technology powering GitHub Pages hadn't caught fire in the early 2010s. Our sincere wish is that Bridgetown would play a unique and vital role in the continued expansion of this exciting way of building and deploying websites and frontend applications. +These are features _and_ educational resources needed to improve both the DX (Developer Experience) and UX (User Experience) of Bridgetown-based websites and web applications. This is admittedly the most “fuzzy” category, but nevertheless is a vital aspect of our overall mission. -For more about the future of Bridgetown, read our [project roadmap](/about/#roadmap) and contribute your ideas and feedback! \ No newline at end of file +* Launching an entirely new logo/brand and website for Bridgetown to promote the project, showcase real-world usage, provide world-class documentation to developers, and advocate for Ruby as a premier choice for web developers. **_Done…you're looking at it right now!_** +* Promotion of well-produced themes and theme-like plugins which give teams a huge leg up in starting new Bridgetown sites. +* Ensuring Bridgetown defaults, recommended best practices, and officially supported ecosystem tooling are aligned with the latest standards and features of the web platform (high-quality semantic HTML, truly modern framework-less CSS, vanilla JavaScript with optional partial hydration) along with examples of effectively using platform-aligned third-party projects (such as Lit for web components, Hotwire/Turbo for SPA-like navigation and inline updates, etc.). +* Partnering with and supporting other Ruby-based projects which have goals and use-cases that mesh well with Bridgetown and its approach to web development. +* Moving ahead with architectural advances which would allow Bridgetown to facilitate site interactivity through a bona fide backend (aka write your serverless-less code here folks!), powered by the wicked-fast [Roda framework](http://roda.jeremyevans.net). This is the ultimate culmination of the DREAMstack concept (Delightful Ruby Expressing APIs & Markup). + * Much of the work done for the above will also make Bridgetown + Rails monorepos a legit developer story. +* Along those lines, researching and pioneering new tools and practices around production deployments so we achieve many of the DX and global performance advantages of Jamstack’s “serverless” principles without the many accompanying downsides. Think CDN-like containerization of the backend, static + backend configurations which build and deploy simultaneously, robust connectivity with distributed databases and key-value stores (aka Redis), and other such concerns. \ No newline at end of file diff --git a/bridgetown-website/src/_docs/plugins.md b/bridgetown-website/src/_docs/plugins.md index d8b752af8..bab10cb95 100644 --- a/bridgetown-website/src/_docs/plugins.md +++ b/bridgetown-website/src/_docs/plugins.md @@ -1,6 +1,5 @@ --- -order: 6 -next_page_order: 6.5 +order: 210 title: Extend with Plugins top_section: Configuration category: plugins @@ -17,16 +16,18 @@ for ways to jazz up your website. Whenever you need more information about the plugins installed on your site and what they're doing, you can use the `bridgetown plugins list` command. You can also copy content out of gem-based plugins with the `bridgetown plugins cd` command. [Read the command reference for further details.](/docs/commands/plugins) -{% rendercontent "docs/note", title: "Turn Your Plugins into Gems", extra_margin: true %} -If you'd like to maintain plugin separation from your site source code, -share functionality across multiple projects, and manage dependencies, -you can create a Ruby gem for private or public distribution. This is also -how you'd create a [Bridgetown theme](/docs/themes). +{%@ Note do %} + #### Turn Your Plugins into Gems -[Read further instructions below on how to create and publish a gem.](#creating-a-gem){:data-no-swup="true"} -{% endrendercontent %} + If you'd like to maintain plugin separation from your site source code, + share functionality across multiple projects, and manage dependencies, + you can create a Ruby gem for private or public distribution. This is also + how you'd create a [Bridgetown theme](/docs/themes). -{% toc %} + [Read further instructions below on how to create and publish a gem.](#creating-a-gem) +{% end %} + +{{ toc }} ## Setup @@ -137,7 +138,7 @@ end Bridgetown::MyNiftyPlugin::Builder.register ``` -[Read further instructions below on how to create and publish a gem.](#creating-a-gem){:data-no-swup="true"} +[Read further instructions below on how to create and publish a gem.](#creating-a-gem) ## Internal Ruby API @@ -156,11 +157,11 @@ Create custom Liquid tags or "shortcodes" which you can add to your content or d ### [Filters](/docs/plugins/filters) -Create custom Liquid filters to help transform data and content. +Provide custom Liquid filters to help transform data and content. ### [Helpers](/docs/plugins/helpers) -For Tilt-based templates such as [ERB, Slim, etc.](/docs/erb-and-beyond), you can provide custom helpers which can be called from your templates. +For Ruby-based templates such as ERB, Serbea, etc., you can provide custom helpers which can be called from your templates. ### [HTTP Requests and the Resource Builder](/docs/plugins/external-apis) @@ -182,7 +183,6 @@ Commands extend the `bridgetown` executable using the Thor CLI toolkit. Converters change a markup language from one format to another. -{:.mt-8} #### Priority Flag You can configure a Legacy API plugin (mainly generators and converters) with a specific `priority` flag. This flag determines what order the plugin is loaded in. @@ -215,9 +215,10 @@ plugins/my_plugin/woo/zoo.rb -> MyPlugin::Woo::Zoo You can read more about [Zeitwerk's file conventions here](https://github.com/fxn/zeitwerk#file-structure). -{% rendercontent "docs/note", title: "Take Me Back" %} +{%@ Note do %} + #### Take Me Back If you run into any problems with Zeitwerk after upgrading your Bridgetown project from pre-1.0, you can switch to the previous plugin loading method by adding `plugins_use_zeitwerk: false` to your `bridgetown.config.yml`. Or you can try using the `autoloader_collapsed_paths` setting as described below. -{% endrendercontent %} +{% end %} In addition to the `plugins` folder provided by default, **you can add your own folders** with autoloading support! Simply add to the `autoload_paths` setting in your config YAML: @@ -268,11 +269,7 @@ Bridgetown websites. You'll want to make sure you update the `gemspec`, plugin to ensure all the necessary metadata and user documentation is present and accounted for. -Make sure you [follow these instructions](/docs/plugins/plugins-and-webpack/) to -integrate your plugin's frontend code with the users' Webpack setup. Also read -up on [Source Manifests](/docs/plugins/source-manifests/) if you have layouts, -components, pages, static files, and other content you would like your plugin to -provide. +Make sure you [follow these instructions](/docs/plugins/gems-and-frontend/) to integrate your plugin's frontend code with the users' esbuild or Webpack setup. Also read up on [Source Manifests](/docs/plugins/source-manifests/) if you have layouts, components, resources, static files, and other content you would like your plugin to provide. You can also provide an automation via your plugin's GitHub repository by adding `bridgetown.automation.rb` to the root of your repo. This is a great way to @@ -289,34 +286,36 @@ wide. Plus it's a great way to solicit feedback and improvements in the form of open source code collaboration and discussion. As always, if you have any questions or need support in creating your plugin, -[check out our community resources](/docs/community). +[check out our community resources](/community). -{% rendercontent "docs/note", title: "Testing Your Plugin" %} -As you author your plugin, you'll need a way to _use_ the gem within a live -Bridgetown site. The easiest way to do that is to use a relative local path in -the test site's `Gemfile`. +{%@ Note do %} + #### Testing Your Plugin -```ruby -gem "my-plugin", :path => "../my-plugin", :group => :bridgetown_plugins -``` + As you author your plugin, you'll need a way to _use_ the gem within a live + Bridgetown site. The easiest way to do that is to use a relative local path in + the test site's `Gemfile`. + + ```ruby + gem "my-plugin", :path => "../my-plugin", :group => :bridgetown_plugins + ``` -You would do something similar in your test site's `package.json` as well (be sure to run [yarn link](https://classic.yarnpkg.com/en/docs/cli/link) so Yarn knows not to install your local path into `node_modules`): + You would do something similar in your test site's `package.json` as well (be sure to run [yarn link](https://classic.yarnpkg.com/en/docs/cli/link) so Yarn knows not to install your local path into `node_modules`): -```json -"dependencies": { - "random-js-package": "2.4.6", - "my-plugin": "../my-plugin" -} -``` + ```json + "dependencies": { + "random-js-package": "2.4.6", + "my-plugin": "../my-plugin" + } + ``` -You may need to restart your server at times to pick up changes you make -to your plugin (unfortunately hot-reload doesn't always work with gem-based plugins). + You may need to restart your server at times to pick up changes you make + to your plugin (unfortunately hot-reload doesn't always work with gem-based plugins). -Finally, you should try writing some [tests](http://docs.seattlerb.org/minitest/) -in the `test` folder of your plugin. These tests could ensure your tags, filters, -and other content are working as expected and won't break in the future as code -gets updated. -{% endrendercontent %} + Finally, you should try writing some [tests](http://docs.seattlerb.org/minitest/) + in the `test` folder of your plugin. These tests could ensure your tags, filters, + and other content are working as expected and won't break in the future as code + gets updated. +{% end %} ## Cache API diff --git a/bridgetown-website/src/_docs/plugins/cache-api.md b/bridgetown-website/src/_docs/plugins/cache-api.md index 908373b57..f92068378 100644 --- a/bridgetown-website/src/_docs/plugins/cache-api.md +++ b/bridgetown-website/src/_docs/plugins/cache-api.md @@ -1,7 +1,7 @@ --- title: Cache API -hide_in_toc: true order: 0 +top_section: Configuration category: plugins --- diff --git a/bridgetown-website/src/_docs/plugins/commands.md b/bridgetown-website/src/_docs/plugins/commands.md index d9e8272ad..5d3b61622 100644 --- a/bridgetown-website/src/_docs/plugins/commands.md +++ b/bridgetown-website/src/_docs/plugins/commands.md @@ -1,7 +1,7 @@ --- title: Commands -hide_in_toc: true order: 0 +top_section: Configuration category: plugins --- diff --git a/bridgetown-website/src/_docs/plugins/converters.md b/bridgetown-website/src/_docs/plugins/converters.md index 94c1a2b28..34fd46f62 100644 --- a/bridgetown-website/src/_docs/plugins/converters.md +++ b/bridgetown-website/src/_docs/plugins/converters.md @@ -1,7 +1,7 @@ --- title: Converters -hide_in_toc: true order: 0 +top_section: Configuration category: plugins --- @@ -9,10 +9,11 @@ If you have a new markup or template language you’d like to use with your site you can process it by implementing your own converter. The Markdown and ERB support in Bridgetown is implemented using this very method. -{% rendercontent "docs/note" title="Remember your Front Matter" %} -Bridgetown will only convert files that have a YAML header at the top, even for -converters you add using a plugin. -{% endrendercontent %} +{%@ Note do %} + #### Remember your Front Matter + + Bridgetown will only convert files that have a YAML or Ruby Front Matter header at the top, even for converters you add using a plugin. +{% end %} Below is a converter which will take all posts ending in `.upcase` and process them using the `UpcaseConverter`: diff --git a/bridgetown-website/src/_docs/plugins/external-apis.md b/bridgetown-website/src/_docs/plugins/external-apis.md index cb00bdd67..823d0bf90 100644 --- a/bridgetown-website/src/_docs/plugins/external-apis.md +++ b/bridgetown-website/src/_docs/plugins/external-apis.md @@ -1,7 +1,7 @@ --- title: HTTP Requests and the Resource Builder -hide_in_toc: true order: 0 +top_section: Configuration category: plugins --- @@ -27,7 +27,7 @@ class LoadPostsFromAPI < SiteBuilder end ``` -{% toc %} +{{ toc }} ## Making a Request @@ -84,9 +84,11 @@ end Bridgetown comes with the [Faraday Middleware gem](https://github.com/lostisland/faraday_middleware) out-of-the-box and utilizes a few of its options such as following redirects (if necessary). You can `require` additional middleware to add to your Faraday connection if you like. You can also write your own Faraday middleware, but that's an advanced usage and typically not needed. -{% rendercontent "docs/note", title: "What’s the Deal with HTTP Methods?" %} -Why is only the HTTP GET method supported? What about POST, PUT, etc.? Well the idea behind making requests as part of the site build process is that it's a one-way data flow: you get data from the API to add to your site, and you don't attempt any remote alterations to that data. If your API requires you to make a request using a method such as POST, please let them know you'd like a GET method as well. As a last resort, you can also use the provided Faraday `connection` object to construct a custom request. See the Faraday documentation for further details. -{% endrendercontent %} +{%@ Note do %} + #### What’s the Deal with HTTP Methods? + + Why is only the HTTP GET method supported? What about POST, PUT, etc.? Well the idea behind making requests as part of the site build process is that it's a one-way data flow: you get data from the API to add to your site, and you don't attempt any remote alterations to that data. If your API requires you to make a request using a method such as POST, please let them know you'd like a GET method as well. As a last resort, you can also use the provided Faraday `connection` object to construct a custom request. See the Faraday documentation for further details. +{% end %} ## The Resource Builder @@ -145,7 +147,7 @@ Another aspect of the Resource Builder to keep in mind is that `content` is a "s ### Customizing Permalinks -If you'd like to customize the [permalink](/structure/permalinks) of a new resource, you can specifically set the `permalink` front matter variable: +If you'd like to customize the [permalink](/docs/content/permalinks) of a new resource, you can specifically set the `permalink` front matter variable: ```ruby add_resource :posts, "blog-post.md" do diff --git a/bridgetown-website/src/_docs/plugins/filters.md b/bridgetown-website/src/_docs/plugins/filters.md index 02fa25641..246e847bf 100644 --- a/bridgetown-website/src/_docs/plugins/filters.md +++ b/bridgetown-website/src/_docs/plugins/filters.md @@ -1,11 +1,11 @@ --- title: Filters -hide_in_toc: true order: 0 +top_section: Configuration category: plugins --- -Filters are simple Ruby methods you can provide to Liquid templates to transform input data in various ways. +Filters are simple Ruby methods you can provide to [Liquid templates](/docs/template-engines/liquid) to transform input data in various ways. All methods take at least one argument which represents the input of the filter, and you can also support multiple method arguments (and even optional ones). The return value will be the output of the filter. @@ -111,6 +111,6 @@ When using the filters scope, you have access to the Liquid context via `@contex Filters are great when you want to transform input data from one format to another and potentially allow multiple transformations to be chained together. If instead you simply want to _insert_ a customized piece of content/HTML code into a page, then it's probably better to write a [Tag](/docs/plugins/tags/). -{% rendercontent "docs/note", extra_margin: true %} -If you prefer to use the Legacy API (aka `Liquid::Template.register_filter `) to construct Liquid filters, refer to the [Liquid documentation](https://github.com/Shopify/liquid/wiki/Liquid-for-Programmers) here. -{% endrendercontent %} +{%@ Note do %} + If you prefer to use the Legacy API (aka `Liquid::Template.register_filter `) to construct Liquid filters, refer to the [Liquid documentation](https://github.com/Shopify/liquid/wiki/Liquid-for-Programmers) here. +{% end %} diff --git a/bridgetown-website/src/_docs/plugins/gems-and-webpack.md b/bridgetown-website/src/_docs/plugins/gems-and-frontend.md similarity index 74% rename from bridgetown-website/src/_docs/plugins/gems-and-webpack.md rename to bridgetown-website/src/_docs/plugins/gems-and-frontend.md index 309163fdd..eb5c88292 100644 --- a/bridgetown-website/src/_docs/plugins/gems-and-webpack.md +++ b/bridgetown-website/src/_docs/plugins/gems-and-frontend.md @@ -1,14 +1,14 @@ --- -title: Gem-based Plugins and Webpack -hide_in_toc: true +title: Gem-based Plugins and the Frontend order: 0 +top_section: Configuration category: plugins --- When authoring a [plugin](/docs/plugins#creating-a-gem){:data-no-swup="true"} or [theme](/docs/themes) for Bridgetown, you may find yourself wanting to ensure users of your plugin are able to load in your -frontend assets through Webpack (such as JavaScript, CSS, etc.) The best way to +frontend assets through esbuild or Webpack (such as JavaScript, CSS, etc.) The best way to do this is to set up a `package.json` manifest and [publish your frontend code as a package to the NPM registry](https://docs.npmjs.com/creating-node-js-modules#create-the-file-that-will-be-loaded-when-your-module-is-required-by-another-application). Let's assume you've been building an awesome plugin called, unsurprisingly, @@ -29,14 +29,14 @@ includes a `script/release` command you can use to run the test suite, release a new version of the gem, and release a new version of the NPM package all in one go. (This will also be present if you set up your plugin using the `bridgetown plugins new` command.) -{% rendercontent "docs/note", title: "Make sure you update package.json!", type: "warning" %} -If you bump up your Ruby version number and forget to bump the NPM package version -at the same time, the packages will get out of sync! So remember always to update -`version.rb` and `package.json` so they have the same version number. -{% endrendercontent %} +{%@ Note type: :warning do %} + #### Make sure you update package.json! + + If you bump up your Ruby version number and forget to bump the NPM package version at the same time, the packages will get out of sync! So remember always to update `version.rb` and `package.json` so they have the same version number. +{% end %} You will need to instruct your users how to add the plugin's frontend code to their -Webpack entry points. For example, they might need to update `frontend/javascript/index.js` with: +esbuild/Webpack entry points. For example, they might need to update `frontend/javascript/index.js` with: ```js import MyAwesomePlugin from "my-awesome-plugin" diff --git a/bridgetown-website/src/_docs/plugins/generators.md b/bridgetown-website/src/_docs/plugins/generators.md index 5ee3a0bf0..0ccf2fb93 100644 --- a/bridgetown-website/src/_docs/plugins/generators.md +++ b/bridgetown-website/src/_docs/plugins/generators.md @@ -1,13 +1,13 @@ --- title: Generators -hide_in_toc: true order: 0 +top_section: Configuration category: plugins --- -{% rendercontent "docs/note", type: "warning" %} +{%@ Note type: :warning do %} Generators are currently deprecated and will be removed in a future version of Bridgetown. If all you're doing is creating new resources, perhaps based on data from an external API, you'll likely want to use [Resource Builder API](/docs/plugins/external-apis) rather than write a generator. Otherwise, take a look at [hooks](/docs/plugins/hooks) for fine-grained access to Bridgetown's build lifecycle. -{% endrendercontent %} +{% end %} You can write a generator when you need Bridgetown to add data to existing content or to programmatically create new pages, posts, and the like. Generators run after Bridgetown has made an inventory of the existing content, but before the site is rendered out. diff --git a/bridgetown-website/src/_docs/plugins/helpers.md b/bridgetown-website/src/_docs/plugins/helpers.md index 1712aa4f2..1d23ad3d5 100644 --- a/bridgetown-website/src/_docs/plugins/helpers.md +++ b/bridgetown-website/src/_docs/plugins/helpers.md @@ -1,11 +1,11 @@ --- title: Helpers -hide_in_toc: true order: 0 +top_section: Configuration category: plugins --- -Helpers are Ruby methods you can provide to Tilt-based templates ([ERB, Slim, etc.](/docs/erb-and-beyond)) to transform data or output new content in various ways. +Helpers are Ruby methods you can provide to Tilt-based templates ([ERB, Slim, etc.](/docs/template-engines/erb-and-beyond)) to transform data or output new content in various ways. Example: @@ -120,4 +120,4 @@ Now just call that helper in your template and use the `label` argument: ## Helpers vs. Filters vs. Tags -Filters and tags are aspects of the [Liquid](/docs/liquid) template engine which comes installed by default. The behavior of both filters and tags are roughly analogous to helpers in [Tilt-based templates](/docs/erb-and-beyond). Specialized Bridgetown filters are also made available as helpers, as are a few tags such as `webpack_path`. \ No newline at end of file +Filters and tags are aspects of the [Liquid](/docs/template-engines/liquid) template engine which comes installed by default. The behavior of both filters and tags are roughly analogous to helpers in [Tilt-based templates](/docs/template-engines/erb-and-beyond). Specialized Bridgetown filters are also made available as helpers, as are a few tags such as `webpack_path`. \ No newline at end of file diff --git a/bridgetown-website/src/_docs/plugins/hooks.md b/bridgetown-website/src/_docs/plugins/hooks.md index ce9902b39..3efa22b8c 100644 --- a/bridgetown-website/src/_docs/plugins/hooks.md +++ b/bridgetown-website/src/_docs/plugins/hooks.md @@ -1,7 +1,7 @@ --- title: Hooks -hide_in_toc: true order: 0 +top_section: Configuration category: plugins --- @@ -81,7 +81,7 @@ end Owner - Event + Event Called @@ -199,7 +199,7 @@ end -

    :resources
    :[collection_label]

    +

    :resources
    [collection_label]

    :post_init

    @@ -210,7 +210,7 @@ end -

    :resources
    :[collection_label]

    +

    :resources
    [collection_label]

    :post_read

    @@ -221,7 +221,7 @@ end -

    :resources
    :[collection_label]

    +

    :resources
    [collection_label]

    :pre_render

    @@ -232,7 +232,7 @@ end -

    :resources
    :[collection_label]

    +

    :resources
    [collection_label]

    :post_render

    @@ -243,7 +243,7 @@ end -

    :resources
    :[collection_label]

    +

    :resources
    [collection_label]

    :post_write

    diff --git a/bridgetown-website/src/_docs/plugins/source-manifests.md b/bridgetown-website/src/_docs/plugins/source-manifests.md index e9fb13c46..4ff125e39 100644 --- a/bridgetown-website/src/_docs/plugins/source-manifests.md +++ b/bridgetown-website/src/_docs/plugins/source-manifests.md @@ -1,7 +1,7 @@ --- title: Source Manifests -hide_in_toc: true order: 0 +top_section: Configuration category: plugins --- @@ -61,7 +61,7 @@ changes from there. ### Using Source Manifests to Create Themes Source manifest functionality, along with the ability to publish an NPM module -with [frontend assets for Webpack](/docs/plugins/gems-and-webpack), plus the +with [frontend assets](/docs/plugins/gems-and-frontend), plus the power of [automations](/docs/automations) to simply the setup process means that you can easily design and distribute themes for use by Bridgetown site owners. diff --git a/bridgetown-website/src/_docs/plugins/tags.md b/bridgetown-website/src/_docs/plugins/tags.md index 495a342b8..264fc35ee 100644 --- a/bridgetown-website/src/_docs/plugins/tags.md +++ b/bridgetown-website/src/_docs/plugins/tags.md @@ -1,15 +1,11 @@ --- title: Tags -hide_in_toc: true order: 0 +top_section: Configuration category: plugins --- -It's easy to add new [Liquid](/docs/liquid/) tags (sometimes called "shortcodes") to -your site. Tags provide extra functionality you can use inside of your Markdown -content and any HTML template. Built-in examples added by Bridgetown include the -`post_url` and `webpack_path` tags. Below is an example of a custom Liquid tag that -will output the time the page was rendered: +It's easy to add new [Liquid](/docs/template-engines/liquid/) tags (sometimes called "shortcodes") to your site. Tags provide extra functionality you can use inside of your Markdown content and any HTML template. Built-in examples added by Bridgetown include the `post_url` and `asset_path` tags. Below is an example of a custom Liquid tag that will output the time the page was rendered: ```ruby class RenderTime < SiteBuilder @@ -66,10 +62,9 @@ And we would still get the same output as above on the page:

    page rendered at: Tue June 22 23:38:47 –0500 2010

    ``` -{% rendercontent "docs/note" type="warning" %} -In the above example, the tag block and the tag are both registered with -the name `render_time`, but you'll want to avoid registering a tag and a tag block using the same name in the same project as this will lead to conflicts. -{% endrendercontent %} +{%@ Note type: :warning do %} + In the above example, the tag block and the tag are both registered with the name `render_time`, but you'll want to avoid registering a tag and a tag block using the same name in the same project as this will lead to conflicts. +{% end %} ## Using Instance Methods @@ -133,7 +128,7 @@ content/HTML code into a page. If instead you want to _transform_ input data fro one format to another and potentially allow multiple transformations to be chained together, then it's probably better to write a [Filter](/docs/plugins/filters/). -{% rendercontent "docs/note", extra_margin: true %} +{%@ Note do %} If you prefer to use the Legacy API (aka `Liquid::Template.register_tag`) to construct Liquid tags, refer to the [Liquid documentation](https://github.com/Shopify/liquid/wiki/Liquid-for-Programmers) here. -{% endrendercontent %} \ No newline at end of file +{% end %} \ No newline at end of file diff --git a/bridgetown-website/src/_docs/posts.md b/bridgetown-website/src/_docs/posts.md deleted file mode 100644 index 34679eab3..000000000 --- a/bridgetown-website/src/_docs/posts.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Posts -order: 11 -top_section: Content -category: posts -hide_in_toc: true ---- - -{% rendercontent "docs/note", type: "warning" %} -The post as a distinct content type has been removed in Bridgetown 1.0. Read about the new [resource content engine](/docs/resources) to learn more about how to create blog posts and other types of content in v1.0. -{% endrendercontent %} diff --git a/bridgetown-website/src/_docs/prototype-pages.md b/bridgetown-website/src/_docs/prototype-pages.md index e1366beaf..492b9646f 100644 --- a/bridgetown-website/src/_docs/prototype-pages.md +++ b/bridgetown-website/src/_docs/prototype-pages.md @@ -1,8 +1,8 @@ --- title: Prototype Pages -order: 15 -top_section: Content -category: prototype_pages +order: 110 +top_section: Writing Content +category: prototype-pages --- This feature builds upon the [Pagination functionality](/docs/content/pagination/) and @@ -12,9 +12,9 @@ own page, every tag has its own page, or virtually any other search term. Note that in order to use [pagination](/docs/content/pagination/), you'll need to enable it your site's `bridgetown.config.yml`. -{% toc %} +{{ toc }} -# Simple Usage +## Simple Usage All you need to do is create a page, say `categories/category.html`, and add a `prototype` config to the Front Matter: @@ -80,7 +80,7 @@ This would produce a generated `tigers/countries/india` page that loops through all the tigers in `India`. -# Pulling in Site Data +## Pulling in Site Data Prototype pages can be configured to load in extra data from [data files](/docs/datafiles/) which get matched with the search term for each item in the collection. This is great for common uses like listing out every post by each of the authors in the site. @@ -133,7 +133,7 @@ As you can image, the possibilities are endless! ## Permalinks -You can also customize the [permalinks](/docs/structure/permalinks/) used in Prototype +You can also customize the [permalinks](/docs/content/permalinks) used in Prototype pages using `:term`. For example, using the Tigers example above, you could change the URLs that get generated like so: diff --git a/bridgetown-website/src/_docs/resources.md b/bridgetown-website/src/_docs/resources.md index c81e98674..3673d4821 100644 --- a/bridgetown-website/src/_docs/resources.md +++ b/bridgetown-website/src/_docs/resources.md @@ -1,8 +1,7 @@ --- title: Resources -order: 10 -next_page_order: 10.5 -top_section: Content +order: 80 +top_section: Writing Content category: resources --- @@ -30,7 +29,7 @@ In this example, the [layout](/docs/layouts) of the resource is specified as `pa You can save resources as files within your source tree, and you can also [generate resources programatically](/docs/plugins/external-apis) via a builder plugin—perhaps based on data from a headless CMS or other third-party APIs. -{% toc %} +{{ toc }} ## Technical Architecture @@ -41,7 +40,7 @@ While certain resources don't actually get written to URLs such as data files (a Resources come with a merry band of objects to help them along the way. These are called Origins, Models, Transformers, and Destinations. Here's a diagram of how it all works. ![The Resource Rendering Pipeline](/images/resource-pipeline.png) -{: .my-8} +{:style="margin: 2em 0"} Let's say you add a new blog post by saving `src/_posts/2021-05-10-super-cool-blog-post.md`. To make the transition from a Markdown file with Liquid or ERB template syntax to a final URL on your website, Bridgetown takes your data through several steps: @@ -293,7 +292,7 @@ Bridgetown uses permalink "templates" to determine the default permalink to use * For all other collections, the permalink matches the path of the file along with a collection prefix. So `src/_movies/horror/alien.md` will output to `/movies/horror/alien/` * In addition, if multiple site locales are configured, any content not in the "default" locale will be prefixed by the locale key. So a page offering both English and French variations would be output to `/page-information` and `/fr/page-information`. -Refer to our [permalinks documentation](/docs/structure/permalinks] for further details on how to configure and custom generate permalinks. +Refer to our [permalinks documentation](/docs/content/permalinks) for further details on how to configure and custom generate permalinks. ## Ruby Front Matter and All-Ruby Templates @@ -397,7 +396,7 @@ Prior to Bridgetown 1.0, a different content engine based on Jekyll was used whi * Front matter data is now accessed in Liquid through the `data` variable just like in ERB and skipping `data` is deprecated. Use `{{ post.data.description }}` instead of just `{{ post.description }}`. * In addition, instead of referencing the current "page" through `page` (aka `page.data.title`), you can use `resource` instead: `resource.data.title`. * Resources don't have a `url` variable. Your templates/plugins will need to reference either `relative_url` or `absolute_url`. Also, the site's `base_path` (if configured) is built into both values, so you won't need to prepend it manually. -* Permalink formats have changed somewhat, so please refer to the new [permalink](/docs/structure/permalinks) for how to use the new permalink styles and placeholders. +* Permalink formats have changed somewhat, so please refer to the new [permalink](/docs/content/permalinks) for how to use the new permalink styles and placeholders. * Whereas the `id` of a document is the relative destination URL, the `id` of a resource is its origin id. You can define an id in front matter separately however, which would be available as `resource.data.id`. * The paginator items are now accessed via `paginator.resources` instead of `paginator.documents`. * Instead of `pagination:\n enabled: true` in your front matter for a paginated page, you'll put the collection name instead. Also you can use the term `paginate` instead of `pagination`. So to paginate through posts, just add `paginate:\n collection: posts` to your front matter. diff --git a/bridgetown-website/src/_docs/routes.md b/bridgetown-website/src/_docs/routes.md new file mode 100644 index 000000000..aa442e919 --- /dev/null +++ b/bridgetown-website/src/_docs/routes.md @@ -0,0 +1,145 @@ +--- +title: Dynamic Routes & SSR +order: 250 +top_section: Experimental +category: routes +--- + + +{%@ Note type: "warning" do %} +#### This is just the beginning… + +While Bridgetown's fullstack framework features (aka SSR, file-based routing, and API endpoints) are already being used in production settings, this functionality is still considered "experimental" and subject to further refinement in Bridgetown 1.1 and beyond. Fully-fledged documentation is in the works and ongoing. +{% end %} + +Bridgetown 1.0 comes with a production-ready web server based on the battle-hardened one-two punch of [Rack](https://github.com/rack/rack) + [Puma](https://puma.io). On top of Puma we've layered on [Roda](http://roda.jeremyevans.net), a refreshingly fast & lightweight web routing toolkit created by Jeremy Evans. On a basic level, it handles serving of all statically-built site files you access when you run `bin/bridgetown start`. + +Because Bridgetown uses a Rack-based stack, this means you can potentially add on API endpoints served by a secondary Rails app, or Sinatra, or of course, Roda. In other words, because Rack is fully capable of mounting multiple “apps” within a single server process, you can run Bridgetown alongside your favorite backend/fullstack Ruby app framework. Naturally, we recommend starting out with the framework we've built with Roda as you'll learn more about shortly. + +## Bridgetown SSR via Roda + +Server-Side Rendering, known as SSR, has made its peace with SSG (Static Site Generation), and we are increasingly seeing an SSG/SSR “hybrid” architecture emerge in tooling throughout the web dev industry. + +Bridgetown 1.0 takes advantage of this evolving paradigm by providing a streamlined path for booting a site up in-memory. This means you can write a server-side API to render content whenever it is requested. Here’s an example of what that looks like: + +```ruby +# ./server/routes/preview.rb + +class Routes::Preview < Bridgetown::Rack::Routes + route do |r| + r.on "preview" do + # Our special rendering pathway to preview a page + # route: /preview/:collection/:path + r.get String, String do |collection, path| + item = Bridgetown::Model::Base.find("repo://#{collection}/#{path}") + + unless item.content.present? + next Bridgetown::Model::Base.find("repo://pages/_pages/404.html") + .render_as_resource + .output + end + + item + .render_as_resource + .output + end + end + end +end +``` + +This route handles any `/preview/:collection/:path` URLs which are accessed just like any other statically-generated resource. It will find a content item via a repo origin ID and render that item’s **resource** which is then output as HTML. Needless to say, _this was simply an impossible task_ prior to Bridgetown 1.0. For example: `/preview/posts/_posts%2F2022-01-10-hello-world.md` would SSR the Markdown content located in `src/_posts/2022-01-10-hello-world.md`. + +SSR is great for generating preview content on-the-fly, but you can use it for any number of instances where it’s not feasible to pre-build your content. In addition, you can use SSR to “refresh” stale content…for example, you could pre-build all your product pages statically, but then request a newer version of the page (or better yet, just a component of it) whenever the static page is viewed which would then contain the up-to-date pricing (perhaps coming from a PostgreSQL database or some other external data source). And if you cache _that_ data using Redis in, say, 10-minute increments, you’ve just built yourself an extremely performant e-commerce solution. This is only a single example! + +In order to opt-into SSR support, modify your `server/roda_app.rb` file so it loads the SSR plugin: + +```ruby +class RodaApp < Bridgetown::Rack::Roda + plugin :bridgetown_ssr + + # etc. +end +``` + +## File-based Dynamic Routes + +**But wait, there’s more!** We now ship a new gem you can opt-into (as part of the Bridgetown monorepo) called `bridgetown-routes`. Within minutes of installing it, you gain the ability to write file-based dynamic routes with view templates right inside your source folder! + +Here’s an example of a route saved to `src/_routes/items/index.erb`. It provides the `/items` URL which shows a list of item links: + +```eruby +---<% +# route: /items +r.get do + render_with data: { + layout: :page, + title: "Dynamic Items", + items: [ + { number: 1, slug: "123-abc" }, + { number: 2, slug: "456-def" }, + { number: 3, slug: "789-xyz" }, + ] + } +end +%>--- + + +``` + +Since all the data in the above example is created and rendered by the server in real-time, there’s no way to know ahead of time which routes should be accessible via `/items/:slug`. That’s why `bridgetown-routes` supports routing placeholders at the filesystem level! Let’s go ahead and define our item-specific route in `src/_routes/items/[slug].erb`: + +```eruby +---<% +# route: /items/:slug +r.get do + item_id, *item_sku = r.params[:slug].split("-") + item_sku = item_sku.join("-") + + render_with data: { + layout: :page, + title: "Item Page", + item_id: item_id, + item_sku: item_sku + } +end +%>--- + +

    Item ID: <%= resource.data.item_id %>

    + +

    Item SKU: <%= resource.data.item_sku %>

    + +``` + +This is a contrived example of course, but you can easily imagine loading a specific item from a data source based on the incoming parameter(s) and providing that item data to the view, all within a single file. + +You can even use placeholders in folder names! A route saved to `src/_routes/books/[id]/chapter/[chapter_id].erb` would match to something like `/books/234259/chapter/5` and let you access `r.params[:id]` and `r.params[:chapter_id]`. Pretty nifty. + +Testing is straightforward as well. Simply place `.test.rb` files alongside your routes, and you’ll be able to use Capybara to write **fast** integration tests including interactions requiring Javascript (assuming Cupite is also installed). (_docs coming soon_) + +To opt-into the `bridgetown-routes` gem, make sure it's enabled in your `Gemfile`: + +```ruby +gem "bridgetown-routes", group: :bridgetown_plugins +``` + +and required at the top of your `server/roda_app.rb` file: + +```ruby +require "bridgetown-routes" +``` + +and added in as a Roda plugin below the SSR plugin: + +```ruby +class RodaApp < Bridgetown::Rack::Roda + plugin :bridgetown_ssr + plugin :bridgetown_routes + + # etc. +end +``` diff --git a/bridgetown-website/src/_docs/static_files.md b/bridgetown-website/src/_docs/static-files.md similarity index 79% rename from bridgetown-website/src/_docs/static_files.md rename to bridgetown-website/src/_docs/static-files.md index d869ad6eb..249328106 100644 --- a/bridgetown-website/src/_docs/static_files.md +++ b/bridgetown-website/src/_docs/static-files.md @@ -1,8 +1,8 @@ --- title: Static Files -order: 16 -top_section: Content -category: staticfiles +order: 130 +top_section: Writing Content +category: static-files --- A static file is a file that does not contain any front matter. These @@ -10,9 +10,9 @@ include images, PDFs, and other un-rendered content. You can save static files in any subfolder or directly within the source folder (`src`). A common place to save images specifically is the `src/images` folder. You can reference them from both markup and CSS simply using a relative URL (for example, `/images/logo.svg`). -{% rendercontent "docs/note" %} -Optionally, you can [bundle images through Webpack](/docs/frontend-assets) and reference them with the `webpack_path` helper. Or if you're interested in a full-featured image management solution with the ability to resize and optimize your media sizes, check out [Cloudinary](https://www.cloudinary.com){:rel="noopener"} and the [bridgetown-cloudinary plugin](https://github.com/bridgetownrb/bridgetown-cloudinary){:rel="noopener"}. -{% endrendercontent %} +{%@ Note do %} + Optionally, you can [bundle images through esbuild or Webpack](/docs/frontend-assets) and reference them with the `asset_path` helper. Or if you're interested in a full-featured image management solution with the ability to resize and optimize your media sizes, check out [Cloudinary](https://www.cloudinary.com) and the [bridgetown-cloudinary plugin](https://github.com/bridgetownrb/bridgetown-cloudinary). +{% end %} Static files can be searched and accessed in templates via `site.static_files` and contain the following metadata: @@ -73,7 +73,7 @@ Note that in the above table, `file` representes a variable used in logic such a ## Add front matter to static files -Although you can't directly add front matter values to static files, you can set front matter values through the [defaults property](/docs/configuration/front-matter-defaults/) in your configuration file. When Bridgetown builds the site, it will use the front matter values you set. +Although you can't directly add front matter values to static files, you can set front matter values through the [defaults property](/docs/content/front-matter-defaults/) in your configuration file. When Bridgetown builds the site, it will use the front matter values you set. Here's an example: diff --git a/bridgetown-website/src/_docs/structure.md b/bridgetown-website/src/_docs/structure.md index 12a921eec..29f5a91f2 100644 --- a/bridgetown-website/src/_docs/structure.md +++ b/bridgetown-website/src/_docs/structure.md @@ -1,8 +1,7 @@ --- title: Folder Structure -order: 7 -next_page_order: 7.5 -top_section: Structure +order: 70 +top_section: Writing Content category: structure --- @@ -10,13 +9,15 @@ The typical folder structure for a Bridgetown site usually looks something like ```shell . -├── frontend # this is where you put your CSS and JS for Webpack +├── config # this is where frontend and server defaults are stored +├── frontend # this is where you put your CSS and JS for esbuild/Webpack │ ├── javascript │ │ ├── index.js │ │ └── widget.js │ ├── styles -│ │ ├── index.scss -│ └ └── layout.scss +│ │ ├── index.css +│ └ └── layout.css +├── server # this is where you can (optionally) add API routes using Roda ├── src # this is where you put your resources and design templates │ ├── _components │ │ ├── footer.liquid @@ -25,8 +26,8 @@ The typical folder structure for a Bridgetown site usually looks something like │ │ ├── members.yml │ │ └── site_metadata.yml │ ├── _layouts -│ │ ├── default.html -│ │ └── post.html +│ │ ├── default.erb +│ │ └── post.serb │ ├── _posts │ │ ├── 2019-10-29-why-im-dressing-up-as-thanos-this-year.md │ │ └── 2020-04-12-isolation-is-really-getting-to-me.md @@ -38,14 +39,16 @@ The typical folder structure for a Bridgetown site usually looks something like ├── output # this is the generated site published via bridgetown build/serve ├── plugins # this is where you can write custom plugins ├── bridgetown.config.yml # this is your Bridgetown configuration file +├── config.ru # Puma uses this to boot up the web server +├── esbuild.config.js # frontend bundler config ├── Gemfile -├── package.json -└── webpack.config.js +├── Rakefile +└── package.json ``` {:.minimal-line-height} {:.note} -The location of pages in your source folder structure will by default be mirrored in your output folder, whereas posts are handled in a special way. You can customize these permalinks via front matter and global configuration options. +The location of pages in your source folder structure will by default be mirrored in your output folder, whereas posts are handled in a special way. You can customize these permalinks via front matter and global configuration options. ## Overview of Files & Folders @@ -93,7 +96,7 @@ The location of pages in your source folder structure will by default be mirrore

    - This is where you add dynamic blog-style content. The naming convention of these files is important, and must follow the format: YEAR-MONTH-DAY-post-title.EXT (aka .md, .html, etc.). The permalink can be customized for each post. Posts are a built-in collection, and you can configure other collections in addition to (or even instead of) posts. + This is where you add dynamic blog-style content. The naming convention of these files is important, and must follow the format: YEAR-MONTH-DAY-post-title.EXT (aka .md, .html, etc.). The permalink can be customized for each post. Posts are a built-in collection, and you can configure other collections in addition to (or even instead of) posts.

    @@ -124,7 +127,7 @@ The location of pages in your source folder structure will by default be mirrore

    - Every other directory and file except for those listed above—such as downloadable files, favicon.ico, robots.txt, and so forth—will be copied verbatim to the generated site as Static Files. + Every other directory and file except for those listed above—such as downloadable files, favicon.ico, robots.txt, and so forth—will be copied verbatim to the generated site as Static Files.

    @@ -189,17 +192,17 @@ The location of pages in your source folder structure will by default be mirrore

    - Manifest used by Yarn to install frontend assets and set up commands you can run to compile your JavaScript, CSS, etc. via Webpack. + Manifest used by Yarn to install frontend assets and set up commands you can run to compile your JavaScript, CSS, etc. via esbuild/Webpack.

    -

    webpack.config.js

    +

    esbuild.config.js

    - Configuration file used by Webpack to compile frontend assets and save them to the output folder alongside your Bridgetown content. + Configuration file used by esbuild to compile frontend assets and save them to the output folder alongside your Bridgetown content.

    diff --git a/bridgetown-website/src/_docs/structure/permalinks.md b/bridgetown-website/src/_docs/structure/permalinks.md deleted file mode 100644 index 7514e79a7..000000000 --- a/bridgetown-website/src/_docs/structure/permalinks.md +++ /dev/null @@ -1,202 +0,0 @@ ---- -title: Permalinks -hide_in_toc: true -order: 0 -category: structure ---- - -A permalink is simply the determination of what the output URL of your [resource](/docs/resources) will be. Every resource uses a _permalink processer_ to figure out where to save your transformed resource in the output folder tree. - -Resources in the **pages** collection are the most straightforward. The filenames and folder structure of your pages will result in matching output URLs. For example, a file saved at `src/_pages/this/is/great.md` would be output to `/this/is/great/`. - -For resources in the **posts** collection, Bridgetown ships with few permalink "styles". The posts permalink style is configured by using the `permalink` key in the config file. If the key isn't present, the default is `pretty`. - -The available styles are: - -* `pretty`: `/[locale]/:categories/:year/:month/:day/:slug/` -* `pretty_ext`: `/[locale]/:categories/:year/:month/:day/:slug.*` -* `simple`: `/[locale]/:categories/:slug/` -* `simple_ext`: `[locale]/:categories/:slug.*` - -(Including `.*` at the end simply means it will output the resource with its own slug and extension. Alternatively, `/` at the end will put the resource in a folder of that slug with `index.html` inside.) - -To set a permalink style or template for a **custom collection**, add it to your collection metadata in `bridgetown.config.yml`. For example: - -```yaml -collections: - articles: - permalink: pretty -``` - -would make your articles collection behave the same as posts. Or you can create your own template: - -```yaml -collections: - articles: - permalink: /lots-of/:collection/:year/:title/ -``` - -This would result in URLs such as `/lots-of/articles/2021/super-neato/`. - -### Placeholders - -All of the segments you see above starting with a colon, such as `:year` or `:slug`, are called **placeholders**. Bridgetown ships with a number of placeholders, but you can also create your own! Simply use the `register_placeholder` in a plugin, perhaps at the bottom of your `plugins/site_builder.rb` file. For example, if you wanted a placeholder to resolve a resource data, you could add: - -```ruby -Bridgetown::Resource::PermalinkProcessor.register_placeholder :ymd, ->(resource) do - "#{resource.date.strftime("%Y")}#{resource.date.strftime("%m")}#{resource.date.strftime("%d")}" -end - -Bridgetown::Resource::PermalinkProcessor.register_placeholder :y_m_d, ->(resource) do - "#{resource.date.strftime("%Y")}-#{resource.date.strftime("%m")}-#{resource.date.strftime("%d")}" -end -``` - -Thus with a permalink key of `/blog/:ymd/:slug/`, you'd get `/blog/20211020/my-post/`, or for `/blog/:y_m_d/:slug/` you'd get `/blog/2021-10-20/my-post/`. - -Here's the full list of built-in placeholders available: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    VariableDescription
    -

    :year

    -
    -

    - Four-digit year based on the resource's date. -

    -
    -

    :short_year

    -
    -

    - Two-digit year based on the resource's date within its century (00..99). -

    -
    -

    :month

    -
    -

    - Month based on the resource's date (01..12). -

    -
    -

    :i_month

    -
    -

    - Month based on the resource's date without leading zeros (1..12). -

    -
    -

    :day

    -
    -

    - Day of the month based on the resource's date (01..31). -

    -
    -

    :i_day

    -
    -

    - Day of the month based on the resource's date without leading zeros (1..31). -

    -
    -

    :categories

    -
    -

    - The specified categories for the resource. If a resource has multiple - categories, Bridgetown will create a hierarchy (e.g. /category1/category2). - Bridgetown automatically parses out double slashes in the URLs, - so if no categories are present, it will ignore this. -

    -
    -

    :locale, :lang

    -
    -

    - Adds the locale key of the current rendering context, if its not the default site locale. -

    -
    -

    :title

    -
    -

    - Title from the resource's front mattter (aka `title: My Resource Title`), slugified (aka any character - except numbers and letters is replaced as hyphen). -

    -
    -

    :slug

    -
    -

    - Extracted from the resources’s filename. May be overridden via the resources’s slug front matter. -

    -
    -

    :name

    -
    -

    - Extracted from the resources’s filename and cannot be overridden. -

    -
    -

    :path

    -
    -

    - Constructs URL segments out of the relative path of the resource within its collection folder. Used by the **pages** collection as well as custom collections if no specific permalink config is provided. -

    -
    -

    :collection

    -
    -

    - Outputs the label of the resource's custom collection (will be blank for the built-in pages and posts collections). -

    -
    diff --git a/bridgetown-website/src/_docs/template-engines.md b/bridgetown-website/src/_docs/template-engines.md index aa63ed403..18e8fda76 100644 --- a/bridgetown-website/src/_docs/template-engines.md +++ b/bridgetown-website/src/_docs/template-engines.md @@ -1,29 +1,41 @@ --- -title: Choose Your Engine -order: 18 -next_page_order: 18.5 -top_section: Templates -category: engines +title: Choose Your Template Engine +order: 140 +top_section: Designing Your Site +category: template-engines --- -Bridgetown's primary template language is [**Liquid**](/docs/liquid), due to historical reasons (its heritage coming from Jekyll) and well as Liquid's simple syntax and safe execution context making it ideal for designer-led template creation. +Bridgetown's default configured template language is **Liquid**. Liquid's simple syntax and safe execution context making it ideal for designer-led template creation. -However, you're welcome to use a variety of different template engines within Bridgetown simply by using the appropriate file extension (aka `.erb`), or by specifying the template engine in your resource's front matter. You can also configure Bridgetown to use a language other than Liquid as the "default" template engine regardless of file extension. +However, you can use a variety of different template engines within Bridgetown simply by using the appropriate file extension (aka `.erb`), or by specifying the template engine in your resource's front matter. Out of the box, Bridgetown provides support for both **ERB** and **Serbea**, and you can also use Haml or Slim by installing additional plugins. -Out of the box, Bridgetown provides support for both [ERB and Serbea](/docs/erb-and-beyond) and you can also use Haml or Slim by installing additional plugins. +To configure a new Bridgetown site to use a language other than Liquid as the default template engine regardless of file extension, use the `-t`/`--templates` option when running `bridgetown new`. + +For documentation on how to use Liquid or Ruby-based syntax in Bridgetown content and templates: + +

    + + + Liquid + + + + + + ERB, Serbea, & More + + + +

    ## Why Switch from Liquid? Liquid is a great way to start out if you're not that familiar with Ruby, because it feels more akin to template engines like Mustache, Jinja, Nunjucks, Twig, and so forth. Simple tags and filters, along with loops and conditional statements, let you construct templates quickly and easily. -But if you need more power (especially when writing [components](/docs/components)) or you're already familiar with Ruby and engines such as ERB, then the cognitive overhead to learn and stick with Liquid can actually become a hindrance. In addition, it's an important goal for Bridgetown to integrate well with a development workflow which already incorporates the [Ruby on Rails framework](https://rubyonrails.org){:rel="noopener"}. Or perhaps you're looking to switch from [Middleman](https://middlemanapp.com){:rel="noopener"} which uses ERB by default. +But if you need more power (especially when writing [components](/docs/components)) or you're already familiar with Ruby and engines such as ERB, then the cognitive overhead to learn and stick with Liquid can actually become a hindrance. In addition, it's an important goal for Bridgetown to integrate well with a development workflow which already incorporates the [Ruby on Rails framework](https://rubyonrails.org). Or perhaps you're looking to switch from [Middleman](https://middlemanapp.com) which uses ERB by default. In any case, the ability to "pick your flavor" of template engines on a site-by-site or file-by-file basis is one of Bridgetown's core strengths as a web framework. -{% rendercontent "docs/note" %} -For more information on how to use Ruby-based templates in general, take a look at [ERB and Beyond](/docs/erb-and-beyond). -{% endrendercontent %} - ## Per-file Engine Configuration When the default Liquid template engine is configured, Bridgetown processes files through Liquid even when they don't have a `.liquid` extension. For example, `posts.json` or `about.md` or `authors.html` will all get processed through Liquid during the build process. @@ -34,18 +46,18 @@ So instead of doing that, you can switch template engines directly. All you need ## Front Matter Defaults -Besides adding `template_engine` directly in your file's front matter, you could use [front matter defaults](/docs/configuration/front-matter-defaults) to specify a template engine for a folder or folder tree or files which match a particular "glob pattern". That way you could, say, use Liquid for most of the site but use ERB just for a certain group of files. +Besides adding `template_engine` directly in your file's front matter, you could use [front matter defaults](/docs/content/front-matter-defaults) to specify a template engine for a folder or folder tree or files which match a particular "glob pattern". That way you could, say, use Liquid for most of the site but use ERB just for a certain group of files. ## Site-wide Configuration -Most likely, however, you'll want to switch your site wholesale from one engine to another. That's where `bridgetown.config.yml` comes in. Simply add `template_engine: erb` right in your config, and suddenly *everything* will get processed through ERB regardless of file extension. Serbea works in the same manner: `template_engine: serbea`. Write HTML, XML, Markdown, JSON, CSV, whatever you like—and _still_ access the full power of your Ruby template language of choice. You don't even need to give up on Liquid completely—just save files with `.liquid` or use `template_engine: liquid` front matter. +Most likely, however, you'll want to switch your site wholesale from one engine to another. That's where `bridgetown.config.yml` comes in. Simply add `template_engine: erb` right in your config, and suddenly *everything* will get processed through ERB regardless of file extension. (This will have been done for you if you used the `-t` option when running `bridgetown new`.) Serbea works in the same manner: `template_engine: serbea`. Write HTML, XML, Markdown, JSON, CSV, whatever you like—and _still_ access the full power of your Ruby template language of choice. You don't even need to give up on Liquid completely—just save files with `.liquid` or use `template_engine: liquid` front matter. It's worth noting that by combining Markdown, ERB/Serbea, components, and frontend JavaScript "sprinkles" (or "spices" as we like to say), you can author extremely sophisticated documents which boast stunning performance and SEO scores while at the same time providing impressive interactivity in the browser. This is quickly becoming a "best practice" in the web development industry, and Bridgetown will help get you there. -{% rendercontent "docs/note", type: "warning", extra_margin: true %} -While it's true you can use ERB or Serbea site-wide, the [Haml](https://github.com/bridgetownrb/bridgetown-haml){:rel="noopener"} and [Slim](https://github.com/bridgetownrb/bridgetown-slim){:rel="noopener"} plugins do _not_ allow site-wide configuration. That's because both Haml and Slim start with pure HTML/XML output using special syntax, and if you want to do something else like write Markdown or JSON, you'll have to use their "embedded" language support. Read their documentation for further details. -{% endrendercontent %} +{%@ Note type: :warning do %} + While it's true you can use ERB or Serbea site-wide, the [Haml](https://github.com/bridgetownrb/bridgetown-haml) and [Slim](https://github.com/bridgetownrb/bridgetown-slim) plugins do _not_ allow site-wide configuration. That's because both Haml and Slim start with pure HTML/XML output using special syntax, and if you want to do something else like write Markdown or JSON, you'll have to use their "embedded" language support. Read their documentation for further details. +{% end %} ## It's Up to You -Regardless of which template engine you pick, whether it's [Liquid](/docs/liquid), [ERB, Serbea](/docs/erb-and-beyond), or something else, Bridgetown has got you covered. We continue to look for ways to make switching engines easier while reducing the number of "sharp edges" that can arise to differences in how various template engines process content, so please don't hesitate to [let us know](/docs/community) if you run in to any issues. \ No newline at end of file +Regardless of which template engine you pick, whether it's [Liquid](/docs/template-engines/liquid), [ERB, Serbea](/docs/template-engines/erb-and-beyond), or something else, Bridgetown has got you covered. We continue to look for ways to make switching engines easier while reducing the number of "sharp edges" that can arise to differences in how various template engines process content, so please don't hesitate to [let us know](/community) if you run in to any issues. \ No newline at end of file diff --git a/bridgetown-website/src/_docs/erb-and-beyond.md b/bridgetown-website/src/_docs/template-engines/erb-and-beyond.md similarity index 95% rename from bridgetown-website/src/_docs/erb-and-beyond.md rename to bridgetown-website/src/_docs/template-engines/erb-and-beyond.md index 9b6f30614..953ea697e 100644 --- a/bridgetown-website/src/_docs/erb-and-beyond.md +++ b/bridgetown-website/src/_docs/template-engines/erb-and-beyond.md @@ -1,18 +1,18 @@ --- title: ERB and Beyond -order: 19 -top_section: Templates -category: erb +order: 0 +top_section: Designing Your Site +category: template-engines template_engine: erb --- -Bridgetown's primary template language is [**Liquid**](/docs/liquid), due to historical reasons (its heritage coming from Jekyll) and well as Liquid's simple syntax and safe execution context making it ideal for designer-led template creation. - -However, Bridgetown's implementation language, Ruby, has a rich history of providing [ERB (Embedded RuBy)](https://docs.ruby-lang.org/en/2.7.0/ERB.html) for templates and view layers across a wide variety of tools and frameworks. Other Ruby-based template languages such as [Haml](https://haml.info), [Slim](http://slim-lang.com), and [Serbea](https://www.serbea.dev) garner enthusiastic usage as well. +Bridgetown's implementation language, Ruby, has a rich history of providing [ERB (Embedded RuBy)](https://docs.ruby-lang.org/en/2.7.0/ERB.html) for templates and view layers across a wide variety of tools and frameworks. Other Ruby-based template languages such as [Haml](https://haml.info), [Slim](http://slim-lang.com), and [Serbea](https://www.serbea.dev) garner enthusiastic usage as well. Bridgetown makes it easy to add both ERB-based and Serbea-based templates and components to any site. In additional, there are plugins you can easily install for Haml and Slim support. Under the hood, Bridgetown uses the [Tilt gem](https://github.com/rtomayko/tilt) to load and process these Ruby templates. -Interested in switching your entire site to use ERB or Serbea by default? [It's possible to do that too!](/docs/template-engines) +<%= render Note.new do %> + Interested in switching your entire site to use ERB or Serbea by default? [It's possible to do that with just a simple configuration change.](/docs/template-engines#site-wide-configuration) +<% end %> <%= toc %> @@ -251,7 +251,7 @@ Alternatively, you can author a document with a `.md` extension and configure it Sometimes you may want to output a file that doesn't end in `.html`. Perhaps you want to create a JSON index of a collection, or a special XML feed. If you have familiarity with other Ruby site generators or frameworks, you might instinctively reach for the solution where you use a double extension, say, `posts.json.erb` to indicate the final extension (`json`) and the template type (`erb`). -Bridgetown doesn't support double extensions but rather provides a couple of alternative mechanisms to specify your template engine of choice. The first option is to set the file's permalink using front matter. Here's an example of `posts.json.erb` using a [custom permalink](/docs/structure/permalinks): +Bridgetown doesn't support double extensions but rather provides a couple of alternative mechanisms to specify your template engine of choice. The first option is to set the file's permalink using front matter. Here's an example of `posts.json.erb` using a [custom permalink](/docs/content/permalinks): ```eruby --- diff --git a/bridgetown-website/src/_docs/template-engines/liquid.md b/bridgetown-website/src/_docs/template-engines/liquid.md new file mode 100644 index 000000000..97c692c73 --- /dev/null +++ b/bridgetown-website/src/_docs/template-engines/liquid.md @@ -0,0 +1,33 @@ +--- +title: Liquid +order: 0 +top_section: Designing Your Site +category: template-engines +--- + +Bridgetown provides comprehensive support for rich presentation of data and design via the **Liquid** template language, available within documents as well as layouts and [components](/docs/components). If you find that Liquid doesn't suit your needs when building your site templates, [Bridgetown also allows for using ERB (Embedded RuBy)](/docs/template-engines/erb-and-beyond). You can mix and match ERB and Liquid templates freely throughout your site. + +Generally in Liquid you output content using two curly braces e.g. +{% raw %}`{{ variable }}`{% endraw %} and perform logic statements by +surrounding them in a curly brace percentage sign e.g. +{% raw %}`{% if statement %}`{% endraw %}. To learn more about Liquid, check +out the [official Liquid Documentation](https://shopify.github.io/liquid/). + +The ability to use Liquid within Markdown in posts and pages allows for advanced customization of your content pipeline. For example, you can write custom plugins to supply new Liquid [tags](/docs/plugins/tags) and [filters](/docs/plugins/filters) and use them throughout your site. + +In addition to Liquid's standard suite of filters and tags, Bridgetown provides a number of useful additions to help you build your site: + +

    + + + Filters List + + + + + + Tags List + + + +

    diff --git a/bridgetown-website/src/_docs/testing.md b/bridgetown-website/src/_docs/testing.md index e5da082bd..bb45fa2a4 100644 --- a/bridgetown-website/src/_docs/testing.md +++ b/bridgetown-website/src/_docs/testing.md @@ -1,8 +1,7 @@ --- -order: 4.7 -next_page_order: 5 +order: 190 title: Automated Testing -top_section: Setup +top_section: Publishing Your Site category: testing --- @@ -10,7 +9,7 @@ Running an automated test suite after your Bridgetown site has been built is a g Bridgetown doesn't come with an opinionated testing setup, so you're welcome to choose from a variety of approaches—and perhaps even use several at once! -{% toc %} +{{ toc }} ## Use Ruby and Minitest to Test HTML Directly diff --git a/bridgetown-website/src/_docs/themes.md b/bridgetown-website/src/_docs/themes.md index 9f2932514..8205de5d8 100644 --- a/bridgetown-website/src/_docs/themes.md +++ b/bridgetown-website/src/_docs/themes.md @@ -1,13 +1,12 @@ --- title: Themes -order: 7.5 -next_page_order: 8 -top_section: Structure +order: 220 +top_section: Configuration category: themes --- Themes are [plugins](/docs/plugins) you can add to your Bridgetown website -which may provide layouts, content, Liquid components, and frontend assets, as +which may provide layouts, content, components, and frontend assets, as well as perform other tasks to enhance the functionality of your site. You install a theme the same way you'd install any plugin, either by running @@ -31,30 +30,27 @@ you can add to your site templates. Or perhaps the theme will come with layouts you can assign to your content such as posts or collection documents. Sometimes you might want to copy files out of a theme and into your site -repo directly. The [`bridgetown plugins cd` command](/docs/commands/plugins#copying-files-out-of-plugin-source-folders){:data-no-swup="true"} +repo directly. The [`bridgetown plugins cd` command](/docs/commands/plugins#copying-files-out-of-plugin-source-folders) will help you do just that. -{% rendercontent "docs/note" %} +{%@ Note do %} Looking for a theme to install on your site? [Check out our plugins directory](/plugins/) for a growing collection of themes and other useful plugins! -{% endrendercontent %} +{% end %} ## Creating a Theme -To design a theme to distribute to others, simply [create a standard -gem-based plugin](/docs/plugins#creating-a-gem){:data-no-swup="true"} using the `bridgetown plugins new NAME` -command. Follow that link for more on live testing strategies and how to -release and publish your theme. +To design a theme to distribute to others, simply [create a standard gem-based plugin](/docs/plugins#creating-a-gem) using the `bridgetown plugins new NAME` command. Follow that link for more on live testing strategies and how to release and publish your theme. You'll need to use a [Source Manifest](/docs/plugins/source-manifests/) to instruct the Bridgetown build process where to find your theme files. -To provide frontend assets via Webpack, [follow these instructions](/docs/plugins/gems-and-webpack/). +To provide frontend assets via esbuild or Webpack, [follow these instructions](/docs/plugins/gems-and-frontend). To aid your users in installing your plugin and setting up configuration options and so forth, add a `bridgetown.automation.rb` [automation script](/docs/automations) to your theme repo. As always, if you have any questions or need support in creating your theme, -[check out our community resources](/docs/community). \ No newline at end of file +[check out our community resources](/community). \ No newline at end of file diff --git a/bridgetown-website/src/_docs/variables.md b/bridgetown-website/src/_docs/variables.md index 102dcf40c..6d3a6043b 100644 --- a/bridgetown-website/src/_docs/variables.md +++ b/bridgetown-website/src/_docs/variables.md @@ -1,28 +1,30 @@ --- title: Variables -order: 20 -top_section: Templates +order: 240 +top_section: Configuration category: variables --- Bridgetown traverses your site looking for files to process. Any files with [front matter](/docs/front-matter/) are subject to processing. For each of these -files, Bridgetown makes a variety of data available via the [Liquid](/docs/liquid/) template language. +files, Bridgetown makes a variety of data available via the [Liquid](/docs/template-engines/liquid/) template language. The following is a reference of the available data. ## Global Variables -{% render "docs/variables_table", scope: site.data.bridgetown_variables.global %} +{%@ Documentation::VariablesTable data: site.data, scope: :global %} ## Site Variables -{% render "docs/variables_table", scope: site.data.bridgetown_variables.site %} +{%@ Documentation::VariablesTable data: site.data, scope: :site %} ## Resource Variables -{% render "docs/variables_table", scope: site.data.bridgetown_variables.page %} +{%@ Documentation::VariablesTable data: site.data, scope: :page %} + +{%@ Note do %} + #### Top Tip: Use Custom Front Matter -{% rendercontent "docs/note", title: "Top Tip: Use Custom Front Matter" %} Any custom front matter that you specify will be available under `resource`. For example, if you specify `custom_css: true` in a resource’s front matter, that value will be available as `resource.data.custom_css`. @@ -30,4 +32,4 @@ The following is a reference of the available data. If you specify front matter in a layout, access that via `layout`. For example, if you specify `class: full_page` in a layout’s front matter, that value will be available as `layout.data.class` in the layout. -{% endrendercontent %} \ No newline at end of file +{% end %} \ No newline at end of file diff --git a/bridgetown-website/src/_layouts/component_preview.liquid b/bridgetown-website/src/_layouts/component_preview.liquid deleted file mode 100644 index 4c5f034c5..000000000 --- a/bridgetown-website/src/_layouts/component_preview.liquid +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: default ---- -{% rendercontent "shared/page_layout" %} - {% rendercontent "shared/box" %} - {% render "shared/back_to_button", label: "Components List", url: "/components/" %} - {% render "shared/header_subpage", title: page.title %} - - - {% render "component_preview/metadata", component: page.component %} - {% render "component_preview/variables", component: page.component %} - - {% endrendercontent %} - {% render "component_preview/preview_area", page: page %} -{% endrendercontent %} diff --git a/bridgetown-website/src/_layouts/default.erb b/bridgetown-website/src/_layouts/default.erb deleted file mode 100644 index 2a8af26b4..000000000 --- a/bridgetown-website/src/_layouts/default.erb +++ /dev/null @@ -1,25 +0,0 @@ ---- ---- - - - - <%= render Shared::Head.new(metadata: site.metadata, title: resource.data.title) %> - - - - Rubyists Assemble! We're currently raising funds to help drive the launch of 1.0! Join the effort today ▸ - - - <%= - render Shared::Navbar.new( - metadata: site.metadata, resource: resource, edge_version: site.data.edge_version - ) - %> - -
    - <%= yield %> -
    - - <%= liquid_render "shared/footer", metadata: site.metadata, bridgetown: Bridgetown::Drops::BridgetownDrop.global %> - - diff --git a/bridgetown-website/src/_layouts/default.serb b/bridgetown-website/src/_layouts/default.serb new file mode 100644 index 000000000..5f50dd872 --- /dev/null +++ b/bridgetown-website/src/_layouts/default.serb @@ -0,0 +1,15 @@ + + + + {%@ "head" %} + + + {%@ Shared::Navbar metadata: site.metadata, resource: resource %} + +
    + {%= yield %} +
    + + {%@ "footer", metadata: site.metadata %} + + diff --git a/bridgetown-website/src/_layouts/docs.liquid b/bridgetown-website/src/_layouts/docs.liquid deleted file mode 100644 index 014d4e787..000000000 --- a/bridgetown-website/src/_layouts/docs.liquid +++ /dev/null @@ -1,58 +0,0 @@ ---- -layout: default ---- - -
    - - - {% rendercontent "shared/box" %} - {% assign url_sections = page.relative_url | split: "/" %} - {% if url_sections.size > 3 %} - {% assign button_label = page.category | capitalize | replace: "-", " " | prepend: "Back to " %} - {% assign button_url = "/docs/" | append: page.category %} - {% render "shared/back_to_button", label: button_label, url: button_url %} -

    {{ page.title }}

    - {% else %} -

    {{ page.title }}

    - {% endif %} - - - - {{ content }} - - - {% if url_sections.size > 3 %} -

    - - Back to {{ page.category | capitalize }} -

    - {% else %} - {% assign next_order = page.next_page_order %} - {% unless next_order %} - {% assign next_order = page.order | plus: 1 %} - {% endunless %} - {% assign alldocs = collections.docs.resources %} - {% find next_page in alldocs, order == next_order %} - {% if next_page %} -

    - Next: {{ next_page.title }} - -

    - {% endif %} - {% endif %} - {% endrendercontent %} -
    - - {% render "docs/toc", docs: collections.docs.resources, page: page %} - -
    -
    - - diff --git a/bridgetown-website/src/_layouts/docs.serb b/bridgetown-website/src/_layouts/docs.serb new file mode 100644 index 000000000..b176fb6f7 --- /dev/null +++ b/bridgetown-website/src/_layouts/docs.serb @@ -0,0 +1,55 @@ +--- +layout: default +--- + +{% url_sections = resource.relative_url.split "/" %} +
    + + + + Documentation + {{ resource.data.top_section }} + {% if url_sections.size > 3 %} + {% crumb_label = resource.data.category.gsub("-", " ").titleize %} + {% crumb_url = "/docs/#{resource.data.back_to || resource.data.category}" %} + {{ crumb_label }} + {% end %} + + + +

    {{ resource.data.title }}

    + + {%= yield %} + + {% if url_sections.size > 3 %} +

    + + Back to {{ resource.data.category | titleize }} + + +

    + {% else %} + {% next_order = resource.data.next_page_order %} + {% unless next_order %} + {% next_order = page.data.order + 10 %} + {% end %} + {% alldocs = collections.docs.resources %} + {% next_page = collections.docs.resources.find { _1.data.order == next_order } %} + {% if next_page %} +

    + + {{ next_page.data.title }} + + +

    + {% end %} + {% end %} +
    + + diff --git a/bridgetown-website/src/_layouts/home.liquid b/bridgetown-website/src/_layouts/home.liquid deleted file mode 100644 index c5735a489..000000000 --- a/bridgetown-website/src/_layouts/home.liquid +++ /dev/null @@ -1,32 +0,0 @@ ---- -layout: default ---- - -{% rendercontent "shared/page_layout" %} - {% if site.data.edge_version %} - - You’re looking at the edge site for the latest pre-release of Bridgetown. Switch to the current production site. - - {% endif %} - {% rendercontent "shared/box" %} - - -

    Bridgetown

    - - - {{ content }} - - {% endrendercontent %} - - - -

    News Updates

    - - {% for post in collections.posts.resources limit:4 %} - {% render "content/news_item", post: post, authors: site.data.authors %} - {% endfor %} - - -{% endrendercontent %} diff --git a/bridgetown-website/src/_layouts/page.liquid b/bridgetown-website/src/_layouts/page.liquid deleted file mode 100644 index 984a8a39e..000000000 --- a/bridgetown-website/src/_layouts/page.liquid +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: default ---- - -{% rendercontent "shared/page_layout" %} - {% rendercontent "shared/box" %} -

    - {{ page.title }} -

    - - - {{ content }} - - {% endrendercontent %} -{% endrendercontent %} \ No newline at end of file diff --git a/bridgetown-website/src/_layouts/page.serb b/bridgetown-website/src/_layouts/page.serb new file mode 100644 index 000000000..6cb5fb597 --- /dev/null +++ b/bridgetown-website/src/_layouts/page.serb @@ -0,0 +1,15 @@ +--- +layout: default +--- + + +
    + + {%= resource.data.breadcrumbs_for_layout %} + +

    {{ resource.data.title }}

    + + {%= yield %} + +
    +
    diff --git a/bridgetown-website/src/_layouts/post.liquid b/bridgetown-website/src/_layouts/post.liquid deleted file mode 100644 index 939a8236d..000000000 --- a/bridgetown-website/src/_layouts/post.liquid +++ /dev/null @@ -1,48 +0,0 @@ ---- -layout: default ---- - -{% rendercontent "shared/page_layout" %} - {% rendercontent "shared/box" %} - - {% endrendercontent %} -{% endrendercontent %} \ No newline at end of file diff --git a/bridgetown-website/src/_layouts/post.serb b/bridgetown-website/src/_layouts/post.serb new file mode 100644 index 000000000..c31dd56f1 --- /dev/null +++ b/bridgetown-website/src/_layouts/post.serb @@ -0,0 +1,53 @@ +--- +layout: default +--- + + +
    + + + + + Blog + Category: {{ resource.data.category | titleize }} + + + +
    +

    {{ resource.data.title }}

    + + + {% author = site.data.authors[resource.data.author] %} + {{ author.name }} + {{ author.name }} + on {{ resource.date | strftime: "%B %-d, %Y" }} + + + {%= yield %} + +

    + + + Share This Article + +

    +
    + +

    + +

    + +

    + +

    Latest on the Blog

    + +
      + {% collections.posts.resources.reject { _1.data.exclude_from_pagination }[0...6].each do |post| %} +
    • {%@ PostCard post: post %}
    • + {% end %} +
    + +
    +
    diff --git a/bridgetown-website/src/_pages/404.html b/bridgetown-website/src/_pages/404.html new file mode 100644 index 000000000..6e5336f09 --- /dev/null +++ b/bridgetown-website/src/_pages/404.html @@ -0,0 +1,9 @@ +--- +permalink: /404.html +layout: page +title: Whoops! 404 Not Found +--- + +

    Welp, that didn't work!

    + +

    Check out the rest of the site or use the search box above. Hope you find what you're looking for. 😃

    diff --git a/bridgetown-website/src/_pages/_defaults.yml b/bridgetown-website/src/_pages/_defaults.yml new file mode 100644 index 000000000..744e2507f --- /dev/null +++ b/bridgetown-website/src/_pages/_defaults.yml @@ -0,0 +1 @@ +layout: page \ No newline at end of file diff --git a/bridgetown-website/src/_pages/about.md b/bridgetown-website/src/_pages/about.md deleted file mode 100644 index 73e501ac8..000000000 --- a/bridgetown-website/src/_pages/about.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -layout: page -title: The History and Future of Bridgetown ---- - -**September 2021 Update**: We're in the process of revising our website and [just released a brand-new roadmap. Check it out!](/future/roadmap-to-1.0/) - ----- - -### Circa 2020: - -Bridgetown started life as a fork of the granddaddy of static site generators, [Jekyll](https://jekyllrb.com). Jekyll came to prominence in the early 2010s due to its slick integration with GitHub, powering thousands of websites for developer tools. In the years since it has grown to provide a popular foundation for a wide variety of sites across the web. - -But as the concepts of modern static site generation and the [Jamstack](/docs/jamstack/) came to the forefront, a whole new generation of tools rose up, like [Hugo](https://gohugo.io), [Eleventy](https://www.11ty.dev), [Gatsby](http://gatsbyjs.org), and many more. In the face of all this new competition, Jekyll chose to focus on maintaining extensive backwards-compatibility and a paired-down feature set—noble goals for an open source project generally speaking, but ones that were at odds with meaningful portions of the web developer community. - -So in March 2020, Portland-based web studio [Whitefusion](https://www.whitefusion.studio) started on **Bridgetown**, a fork of Jekyll with a brand new set of project goals and a future roadmap. Whitefusion's multi-year experience producing and deploying numerous Jekyll-based websites furnishes a seasoned take on the unique needs of web agencies and their clients. - -It's early days yet, but our goal is to keep adding new features at a steady and predictable pace, grow the open source community around the project, and ensure a lively future for a top-tier Ruby-based static site generator moving forward. - -## Roadmap - -As of spring 2020, here is the vision for where Bridgetown is headed. And this is just a start! If you have [ideas and feature requests (and code!) to contribute](/docs/community/#ways-to-contribute), let's do it! - -([You also might want to take a look at our Project Goals page.](/docs/philosophy/)) - -{:.note} -- ✅ _DONE!_ **Retool the codebase** into a monorepo of multiple gems (like Rails/Spree/etc.) -- ✅ _DONE!_ **Streamline internals** to remove deprecated or legacy code paths and reduce confusing configuration options. -- ✅ _DONE!_ **Improve default site file/folder structure** to bring Bridgetown in line with other popular static site generators. -- ✅ _DONE!_ Add a `bridgetown console` command to **interactively interact with the site data and plugins** (just like the Rails console). -- ✅ _DONE!_ Remove the aging asset pipeline and **regroup around a modern solution: Webpack**. (Similar to how Rails adopted Webpack and distanced itself from Sprockets.) [Check out the preliminary documentation here.](/docs/frontend-assets/) -- ✅ _DONE!_ Integrate **pagination features** directly into the monorepo. [Preliminary docs here.](/docs/content/pagination/) -- ✅ _DONE!_ Add streamlined **taxonomy pages (for categories, tags, and other metadata)** solution (called [Prototype Pages](/docs/prototype-pages/)). -- ✅ _DONE!_ Move most site data vars to a **reloadable file** (aka `_data/site_metadata.yml`) and support [env-specific settings (development vs. production)](/docs/configuration/environments). -- ✳️ _DONE!_ External theme support is nearly here with the arrival of [Source Manifests](/docs/plugins/source-manifests) in Bridgetown 0.13. Stay tuned for an official guide on how to build modern themes for the next release of Bridgetown. -- ✳️ _DONE!_ **Auto-reload plugins** during development. (No more stop-and-restart every 5 seconds!) -- ✳️ _DONE!_ **Liquid Components** — this would build upon the new `render` tag functionality and [add a ton of new features](/docs/components) to make component-based design and authoring a reality, bringing Ruby/Liquid syntax closer to the world of React & Vue. -- ✳️ _DONE!_ Officially-sanctioned **site testing framework** to [verify content and functionality](/docs/testing) after new builds. -- ✳️ _IN PROGRESS…_ Modernize various aspects of the codebase, incrementally **improving - the developer experience (DX)** on a number of different fronts. -- ✳️ _IN PROGRESS…_ Ensure all **documentation, configuration, and deployment recommendations are fully up-to-date** and in line with best practices encouraged by the web development industry. -- Straightforward support for **third-party data APIs** (think GraphQL as a first-class citizen). -- Easy **multilingual setup** right out of the box. -- Support **additional template languages** popular in the Ruby community such as ERB, HAML, and Slim. -- **Simple webhooks** — allow remote webhooks to be pinged after a successful build. - - **“Private” pages** — aka put a website section behind a randomized URL that changes frequently and then allow that to be pinged to a webhook somewhere. -- Investigate potentially huge wins regarding **headless CMS + Bridgetown integrations** as officially recommended plugins. - -And generally speaking, as an [open source](https://en.wikipedia.org/wiki/Open_source) project we want to be good stewards of the codebase and community, which starts with adhering to a predictable release schedule. Based on [SemVer](https://semver.org), our goal is to strive for: - -- **Major** releases every three to six months (1.0, 2.0, 3.0, etc.) -- **Minor** releases twice a month (1.2, 1.3, 1.4, etc.) -- **Patch** releases in between as needed (1.3.2, 1.3.3, etc.) - -We also want to ensure Bridgetown is a **reliable partner** for commercial solution providers by ensuring their frontline work with clients goes well and feedback flows positively into the Bridgetown feature set. What does this mean in a nutshell? It means if you make a living building websites using Bridgetown and run into major workflow hiccups, [we want to know about it](/docs/community/). - -**So, ready to try out Bridgetown for yourself?** - -{:.has-text-centered.mt-10} -[Get Started](/docs/){:.button.is-large.is-info} diff --git a/bridgetown-website/src/_pages/authors/[author].serb b/bridgetown-website/src/_pages/authors/[author].serb new file mode 100644 index 000000000..f6927b275 --- /dev/null +++ b/bridgetown-website/src/_pages/authors/[author].serb @@ -0,0 +1,58 @@ +--- +title: "Articles by :prototype-data-label" +exclude_from_search: true +prototype: + collection: posts + term: author + data: authors + data_label: name +--- + +{% resource.data.breadcrumbs_for_layout = capture do %} + + + + Blog + + +{% end %} + +

    + +

    + +{% author = page.data.author_data %} +

    + Connect with + {{ author.name | split: " " | first }} + on the + Web + or on + {% if author.twitter %} + Twitter + {% elsif author.github %} + GitHub + {% end %} +

    + +
      + {% paginator.resources.each do |post| %} +
    • {%@ PostCard post: post %}
    • + {% end %} +
    + +

    + {% if paginator.previous_page %} + + Previous Page + + + {% end %} + {% if paginator.next_page %} + + Next Page + + + {% end %} +

    + diff --git a/bridgetown-website/src/authors/index.json b/bridgetown-website/src/_pages/authors/index.json similarity index 70% rename from bridgetown-website/src/authors/index.json rename to bridgetown-website/src/_pages/authors/index.json index 17d46b613..9c28645ef 100644 --- a/bridgetown-website/src/authors/index.json +++ b/bridgetown-website/src/_pages/authors/index.json @@ -1,10 +1,11 @@ --- +layout: none template_engine: erb --- { <% site.data[:authors].each_with_index do |author, index| -%> - "<%= author[0] %>": <%= author[1].to_json %> + "<%= author[0] %>": <%= author[1].to_json.html_safe %> <%= index < site.data[:authors].length - 1 ? "," : nil -%> <% end -%> } \ No newline at end of file diff --git a/bridgetown-website/src/_pages/blog.html b/bridgetown-website/src/_pages/blog.html deleted file mode 100644 index 0bad67415..000000000 --- a/bridgetown-website/src/_pages/blog.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: default -title: News -exclude_from_search: true -paginate: - collection: posts ---- - -{% rendercontent "shared/page_layout" %} -

    {{ page.title }}

    - - {% for post in paginator.resources %} - {% render "content/news_item", post: post, authors: site.data.authors %} - {% endfor %} - - {% render "shared/pagination", paginator: paginator %} -{% endrendercontent %} diff --git a/bridgetown-website/src/_pages/blog.serb b/bridgetown-website/src/_pages/blog.serb new file mode 100644 index 000000000..7213abeb2 --- /dev/null +++ b/bridgetown-website/src/_pages/blog.serb @@ -0,0 +1,42 @@ +--- +title: The Bridgetown Blog +exclude_from_search: true +paginate: + collection: posts +--- + +{% if paginator.previous_page %} + {% resource.data.breadcrumbs_for_layout = capture do %} + + + + Blog + + + {% end %} +{% end %} + +

    + +

    + +
      + {% paginator.resources.each do |post| %} +
    • {%@ PostCard post: post %}
    • + {% end %} +
    + +

    + {% if paginator.previous_page %} + + Previous Page + + + {% end %} + {% if paginator.next_page %} + + Next Page + + + {% end %} +

    diff --git a/bridgetown-website/src/_pages/blog/[category].serb b/bridgetown-website/src/_pages/blog/[category].serb new file mode 100644 index 000000000..6a2826888 --- /dev/null +++ b/bridgetown-website/src/_pages/blog/[category].serb @@ -0,0 +1,42 @@ +--- +title: "Blog Category: :prototype-term-titleize" +exclude_from_search: true +prototype: + collection: posts + term: category +--- + +{% resource.data.breadcrumbs_for_layout = capture do %} + + + + Blog + + +{% end %} + +

    + +

    + +
      + {% paginator.resources.each do |post| %} +
    • {%@ PostCard post: post %}
    • + {% end %} +
    + +

    + {% if paginator.previous_page %} + + Previous Page + + + {% end %} + {% if paginator.next_page %} + + Next Page + + + {% end %} +

    + diff --git a/bridgetown-website/src/_pages/community.md b/bridgetown-website/src/_pages/community.md new file mode 100644 index 000000000..1d1f9a251 --- /dev/null +++ b/bridgetown-website/src/_pages/community.md @@ -0,0 +1,115 @@ +--- +title: Community +--- + +{{ svg "/images/community.svg", style: "max-width:750px; margin:0 auto 2rem; display:block" }} + +## Where to Get Help and Share Ideas + +### Official Channels + +* Start by reading the [Bridgetown Documentation](/docs/). +* Kick off a discussion on the [Discussions Board on GitHub](https://github.com/bridgetownrb/bridgetown/discussions). +* Or chat with Bridgetowners live on our [Discord server](https://discord.gg/4E6hktQGz4). + +There are a bunch of helpful core team and community members available that should be able to point you in the right direction. + +### Bridgetown Cards: Share what you know. Build what you learn. + +[Bridgetown Cards](https://bridgetown.cards) is a community site, for Bridgetowners, by Bridgetowners. Browse through a selection of tips & tricks, with accompanying code snippets, to help you get a leg up on your site build. Then when you come up with a cool new technique or pull in a sweet Ruby gem or neat-o NPM package, and want to share that know-how with others, [this is the place to do it](https://github.com/bridgetownrb/bridgetown-cards). Have fun! 😃 + +### Commercial Support + +There's also a growing number of companies which provide commercial support for advanced Bridgetown site builds. These include: + +* [Whitefusion](https://www.whitefusion.studio) +* [Radioactive Toy](https://radioactivetoy.tech) + +## Say Hello to the Core Team + + + + + + + + + + + +[@jaredcwhite](https://github.com/jaredcwhite) • +[@ParamagicDev](https://github.com/ParamagicDev) • +[@ayushn21](https://github.com/ayushn21) • +[@adrianvalenz](https://github.com/adrianvalenz) +{:style="text-align:center"} + +## Bridgetown in the Wild + +**People are using Bridgetown to build amazing things!** Here are just a few of the projects launched over the past 20 months: + +* [Eager](https://eager.app){:target="_blank"} +* [Mrujs docs](https://mrujs.com){:target="_blank"} +* [JaredWhite.com](https://jaredwhite.com){:target="_blank"} +* [Doorkeep](https://doorkeep.co){:target="_blank"} +* [Andy Peters](https://andypeters.com){:target="_blank"} +* [805 Babies](https://805babies.com){:target="_blank"} +* [Crow's Nest](https://www.crowsnestapp.com){:target="_blank"} +* [Felipe Vogel](https://fpsvogel.com){:target="_blank"} +* [Kris Bogdanov](https://krisbogdanov.com){:target="_blank"} +* [William Kennedy](https://williamkennedy.ninja){:target="_blank"} +* [Fullstack Ruby](https://www.fullstackruby.dev){:target="_blank"} +* [fslash42](https://fslash42.com){:target="_blank"} +* [Helena's Nursery](https://helenas-nursery.com){:target="_blank"} + +In addition, members of the Bridgetown Core Team have appeared in podcasts and presentations across the web promoting Bridgetown! Check it out: + +* [The Ruby on Rails Podcast](https://www.therubyonrailspodcast.com/374){:target="_blank"} +* [Code with Jason](https://www.codewithjason.com/code-with-jason-podcast/episodes/{:target="_blank"}115-organizing-large-rails-apps-with-jared-white-DIQGZHGQ/){:target="_blank"} +* [Computer Science: Just the Useful Bits](https://justtheusefulbits.com/jtub/jared-white-the-trip-from-php-to-ruby/){:target="_blank"} +* [Remote Ruby](https://remoteruby.com/78){:target="_blank"} +* [The Drunken UX Podcast](https://drunkenux.com/podcast/dux65/){:target="_blank"} +* [Ruby on the Jamstack, or, Why I Forked Jekyll (YouTube)](https://www.youtube.com/watch?v=btOuSOZd-6c){:target="_blank"} +* [An Intro to Bridgetown (Presented at the London Ruby Users' Group)](https://assets.lrug.org/videos/2021/february/ayush-newatia-an-intro-to-bridgetown-a-static-site-generator-for-the-modern-jamstack-era-lrug-feb-2021.mp4){:target="_blank"} + +## Ways to Contribute + +Whether you're a developer, designer, or overall Bridgetown enthusiast, there are lots of ways to contribute to our open source project. Here's a few ideas: + +* Comment on some of the project's [open issues](https://github.com/{{ site.metadata.github }}/issues). Have you experienced the same problem? Know a work around? Do you have a suggestion for how the feature could be better? +* Read through the [documentation](/docs/) and file a pull request (PR) by forking the [Bridgetown repo on GitHub](https://github.com/{{ site.metadata.github }}/fork) and adding your changes or suggestions for something that could be improved. +* Browse through the latest [chat room activity](https://discord.gg/4E6hktQGz4) and lend a hand answering questions or proposing awesome new features. There's a good chance other folks are in the same boat as you. +* Help evaluate [open pull requests](https://github.com/{{ site.metadata.github }}/pulls) by testing the changes locally and reviewing what's proposed. Or if you [have a PR you'd like to submit](https://github.com/bridgetownrb/bridgetown/blob/main/CONTRIBUTING.md) for a new feature or a bugfix, we'd be thrilled to evaluate it and guide it through the release cycle if it adheres to our [project goals](/docs/philosophy/). + +{%@ Note type: "warning" do %} +**Reminder:** Bridgetown's issue tracker on GitHub is not a support forum. Only file issues for reproducible problems you've identified while using Bridgetown. +{% end %} + +## Bridgetown Contributor Code of Conduct + +As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. + +Read our full [code of conduct](https://github.com/bridgetownrb/bridgetown/blob/main/CODE_OF_CONDUCT.md). + +{%@ Note do %} +Want to give us a public shoutout? Check out our [official Twitter account](https://twitter.com/{{ site.metadata.twitter }})! +{% end %} + +
    + +

    + + Children silhouette designed by Kjpargeter / Freepik + +

    diff --git a/bridgetown-website/src/_pages/index.md b/bridgetown-website/src/_pages/index.md index b22c0e27c..15c4ad125 100644 --- a/bridgetown-website/src/_pages/index.md +++ b/bridgetown-website/src/_pages/index.md @@ -1,36 +1,291 @@ --- -layout: home +layout: default +exclude_from_search: true +page_class: homepage --- -## A Webpack-aware, Ruby-powered static site generator
    for the modern Jamstack era. -{:.mb-10.has-text-centered.title.is-4.has-text-primary} + + + {{ svg "/images/waves/wave_1.svg" }} +
    - - Install v{{ bridgetown.version }} - Er, Jamwhat? - -Built upon proven open source technology, **Bridgetown** is a _fast_, _scalable_, _modular_, and _thoroughly forward-looking_ framework for building websites and frontend applications. +

    + +

    -* **Craft Clever Content.**{:.is-size-5.has-text-brown} Content in Bridgetown is simply text files and assets in your repository. Write flexible **Markdown** and use sophisticated **Liquid** tags to enhance your presentation and functionality. Using a headless CMS or third-party APIs? That works too! +## A next-generation, progressive site generator & fullstack framework, powered by Ruby. -* **Design with Components.**{:.is-size-5.has-text-brown} Encapsulate common building-blocks of your design which can be reused across multiple pages and contexts or displayed in an always up-to-date style guide. Use components provided by [themes and plugins](/plugins/) or write your own. +Built upon venerated open source technologies such as **Ruby**, **Puma**, and **Roda** — and grown on the fertile soil of **Rails** & **Jekyll** — **Bridgetown** puts power back in the hands of individuals to create extraordinary things. -* **Customize with Plugins.**{:.is-size-5.has-text-brown} Develop your own plugins in the delightful Ruby programming language to enable totally custom projects, or [install community gems](/plugins/) to supercharge your site build. Sprinkle Ruby Front Matter on templates to bring them to life. +While your competitors are wrestling with complicated build tools, limited programming idioms, and mountains of boilerplate, **you’re out changing the world**. +{:style="margin-left:auto; margin-right:auto; max-width:43em"} -* **Add a Modern Frontend.**{:.is-size-5.has-text-brown} Bridgetown comes with support for **Webpack** out-of-the-box, which means you can add JavaScript frameworks like **React**, **Vue**, **Stimulus** as well as CSS frameworks like **Bulma** or **Tailwind** to get a leg up fast. +

    + + + Get Started Today + +

    +{:style="text-align:center; margin-top:3rem"} -* **Deploy Anywhere.**{:.is-size-5.has-text-brown} Use an automated hosting service like [Render](https://www.render.com) to deploy your site upon every update, or just sync the `output` folder to a standard web server and you're done. It's without a doubt the most flexible publishing system available. +Version {{ Bridgetown::VERSION }} released {{ current_version_date }} +Looking for [0.2x documentation](https://bridgetown-v0.onrender.com/)? +{:style="color:var(--sl-color-neutral-300)"} -### Watch the Comprehensive Overview Video -{: .has-text-centered .has-text-danger .mt-10} -
    - -
    +
    + {{ svg "/images/waves/wave_2.svg" }} +
    + +
    - - Get Started - Need Help? - +

    + +

    + +## Listen to what they're saying about Bridgetown: +{:style="font-size:2.3rem"} + +{:.info-grid} +- + + Bridgetown is so cool. It’s the most fun I’ve had outside of Rails in a long time. + + [@_williamkennedy](https://twitter.com/_williamkennedy/status/1323023702502658049?s=21) + +- + + Coherent, thought through, well-structured, yet powerful and efficient SSG. This is GREAT! + + [@noam__shemesh](https://twitter.com/noam__shemesh/status/1362228411826069504?s=21) + +- + + With Rails 7, Hotwire, Stimulus, Strada, Bridgetown, Render, and things like this, I believe Ruby is about to have a renaissance. + + [@aviflombaum](https://twitter.com/aviflombaum/status/1470438543159930886?s=21) + +- + + Within a very short period of time I went from a blank VSCode editor to fully designed and deployed website using Bridgetown! 👏 + + [@rabbigreenberg](https://twitter.com/rabbigreenberg/status/1462403305334788099?s=21) + +- + + I made my Bridgetown site 'come alive' with automatic redeploys where the site's content is updated via an API. In lieu of a Frankenstein emoji… BRRAAAAAINS!! 🧟🧟🧟 + + [@fpsvogel](https://twitter.com/fpsvogel/status/1446469364874625025?s=21) + +- + + If you need a static site generator and like Ruby, go for + Bridgetown. I'm using it on 3 projects right now and it's awesome. + + [@stevediaconou](https://twitter.com/stevediaconou/status/1467124931729178625?s=20) + +- + + I wish more new tools were doing this well out of the box. Congrats, and good luck! + + [@slightlylate](https://twitter.com/slightlylate/status/1467293827245375492?s=21) + +- + + Every time I turn around — something new from Bridgetown. + + [@jeffreyguenther](https://twitter.com/jeffreyguenther/status/1464277154154254339?s=21) + +- + + I just started my first project using Bridgetown today and I’m already loving it! + + [@theluctus](https://twitter.com/theluctus/status/1459287487373877248?s=21) + +- + + Bridgetown rules. + + [@middlemanapp](https://twitter.com/middlemanapp/status/1264014892673069057?s=20) + + +
    +
    + + +
    + +

    + +

    + +## Build fast. Deploy fast. Serve fast. +{:.serif .colorful} + +Like the Ruby language itself, **Bridgetown** is optimized for [web developer happiness](/docs/philosophy). Express yourself in code which is elegant and maintainable. Bundled configurations and community resources like our [Discord Chat](https://discord.gg/4E6hktQGz4) and [Bridgetown Cards](https://bridgetown.cards) help you quickly get a leg up. Go from zero to hero in no time with HTML-first build artifacts and rapid Git-based deployment on services like [Render](https://www.render.com). + + +

    + + + Install Now + +

    +{:style="text-align:center; margin-top:3rem"} + +
    +
    + + +
    + + {%@ Note type: :warning, icon: "map/map-pin-user" do %} + + Bridgetown is made possible by the generous contributions of our [GitHub sponsors](https://github.com/bridgetownrb/bridgetown#special-thanks-to-our-founding-members--). Please [consider becoming a sponsor](https://github.com/sponsors/jaredcwhite) today and support the ongoing development of open source, Ruby-first & HTML-first software projects. + + {% end %} + +
    +
    + + +
    + +

    + +

    + +## Super-dee-dooper features galore. +{:.serif .colorful} + +Bridgetown's philosophy is if we take the time to build what you'll actually need, you wont have to. Without having to hunt for any additional add-ons or extra recipes, **Bridgetown** gives you right out of the box from day one: + +{:.info-grid.highlighted-cards} +- + + + + ### Static Site Generator + + All of the features you’ve grown to love from the world of static site generation. Front Matter. Markdown. Easy permalinks. File-based content deployment with Git history and atomic builds. Data transformation pipelines. Paginated archives. It's all here and ready to roll. + +

    + Read the Docs + +

    + +- + + + + ### Powerful Content Engine + + Set up collections for whatever types of content you need. Define taxonomies. Create relationships between different pieces of content. And when you need to, easily generate new content at build-time (or in real-time!) by connecting to a Headless CMS and other web APIs. + +

    + Read the Docs + +

    + +- + + + + ### World-Class Template Engine + + Actually more than one. Actually three! Liquid. ERB. Serbea. Increasing levels of power and sophistication with each step. Liquid, created by Shopify, is easy to get started with. Upgrade to ERB for the same syntax Ruby on Rails employs. Or choose Serbea, a superset of ERB which brings the best of Ruby and Liquid templates together. + +

    + Read the Docs + +

    + +- + + + + ### Componentized View Layer + + Best practices in modern web design revolve around components, discrete building blocks of visual and semantic functionality. Use Bridgetown components for a modular approach to your site design, pull in GitHub's ViewComponent for even more power, or sprinkle frontend web components on top for that extra sizzle. + +

    + Read the Docs + +

    + +- + + + + ### Fullstack Framework + + Some projects don't need an SSR backend. But for the ones that do, Bridgetown's got you covered. It comes with Roda baked-in, one of the fastest Ruby web frameworks in the biz. And when we say "baked-in", we literally mean it. Create a regular view template and add a dynamic route block at the top which can handle all the requests you'll throw at it. Need even more power? Mount a Rails API using Rack. All in one monorepo. Now that's a stack. + +

    + Read the Docs + +

    + +- + + + + ### Modern Frontend Build System + + Bridgetown sets you up with blazing-fast, zero-config esbuild & PostCSS. Or pick Webpack if you prefer. Either way, add modern JavaScript libraries like Turbo, Stimulus, Lit, even Preact with a simple command. Install comprehensive component libraries such as Shoelace for rapid UI development. Go big with interactive functionality or stay minimalist for that “zero JS" experience. It's totally your choice. + +

    + Read the Docs + +

    + +- + + + + ### Sky-High Plugin Architecture + + Bridgetown might just be the easiest way to get started learning and writing Ruby code. Craft custom plugins to enhance your site build and content with a straightforward DSL and make huge strides in only a few lines! If you already have experience writing Rails apps, you should feel right at home. (Yes, we love Active Support too!) + +

    + Read the Docs + +

    + +- + + + + ### Sensible Deployment Strategy + + For static-only projects, you can deploy Bridgetown sites literally anywhere which supports HTML/CSS/JS files. Jamstack-style hosts are great options for performance and security. For a full-stack production setup with database access, Redis caching, and all the rest, Render is our recommended hosting platform. + +

    + Read the Docs + +

    + + +Then when you're ready, [bundled configurations](/docs/bundled-configurations) and [plugins](/plugins) can take you even farther. Add SEO/social graph support, news feeds, inlined SVGs, asset management integration, headless CMS integration, automated testing, Hotwire, TailwindCSS, Lit SSR + Hydration, and a whole lot more. +{:style="text-align:center; margin-top:3rem; margin-left:auto; margin-right:auto; max-width:50em"} + +

    + + Start Your Build Today + + +

    +{:style="text-align:center; margin-top:3rem"} + + +
    +
    +
    diff --git a/bridgetown-website/src/_pages/inverse_logo.html b/bridgetown-website/src/_pages/inverse_logo.html deleted file mode 100644 index e55ab2a07..000000000 --- a/bridgetown-website/src/_pages/inverse_logo.html +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: default -exclude_from_search: true ---- - -{% rendercontent "shared/page_layout" %} - - - -

    Bridgetown

    - - -

    Webpack-aware, Ruby-powered
    static site generator for the
    modern Jamstack era

    -
    -
    -{% endrendercontent %} diff --git a/bridgetown-website/src/_pages/plugins.serb b/bridgetown-website/src/_pages/plugins.serb index fbbac6957..14a39f5b5 100644 --- a/bridgetown-website/src/_pages/plugins.serb +++ b/bridgetown-website/src/_pages/plugins.serb @@ -1,66 +1,65 @@ ~~~{% { - layout: :default, title: "Jazz Up Your Site with Themes & Plugins", + exclude_from_search: true, plugins: -> do - endpoint = "https://api.github.com/search/repositories?q=topic:bridgetown-plugin%20archived:false" + ::Builders::Versions.cache.getset("plugins") do + endpoint = "https://api.github.com/search/repositories?q=topic:bridgetown-plugin%20archived:false" - conn = Faraday.new( - url: endpoint, - headers: {"Accept" => "application/vnd.github.v3+json"} - ) - if ENV["BRIDGETOWN_GITHUB_TOKEN"] - username, token = ENV["BRIDGETOWN_GITHUB_TOKEN"].split(":") - conn.basic_auth(username, token) - end - items = JSON.parse(conn.get.body)["items"].sort_by {|item| item["name"]} + conn = Faraday.new( + url: endpoint, + headers: {"Accept" => "application/vnd.github.v3+json"} + ) + if ENV["BRIDGETOWN_GITHUB_TOKEN"] + username, token = ENV["BRIDGETOWN_GITHUB_TOKEN"].split(":") + conn.basic_auth(username, token) + end + items = JSON.parse(conn.get.body)["items"].sort_by {|item| item["name"]} - items.each do |item| - begin - gem_url = "https://raw.githubusercontent.com/#{item["full_name"]}/master/lib/#{item["name"]}/version.rb" + items.each do |item| + branchname = item.fetch("default_branch", "master") + gem_url = "https://raw.githubusercontent.com/#{item["full_name"]}/#{branchname}/lib/#{item["name"]}/version.rb" result = Faraday.get(gem_url).body - item["gem_version"] = result.match(/VERSION = "(.*?)"/)[1] - rescue begin - gem_url = "https://raw.githubusercontent.com/#{item["full_name"]}/main/lib/#{item["name"]}/version.rb" - result = Faraday.get(gem_url).body item["gem_version"] = result.match(/VERSION = "(.*?)"/)[1] - rescue + rescue NoMethodError end end end - - items end } %}~~~ -{%= liquid_render "shared/page_layout" do %} -

    {{ page.data.title }}

    - -

    - Peruse our growing collection of official and third-party plugins which provide new capabilities to your Bridgetown site. If you've authored a plugin gem, add the bridgetown-plugin topic to your GitHub repo to include it here. -

    +

    + Peruse our growing collection of official and third-party plugins which provide new capabilities to your Bridgetown site. If you've authored a plugin gem, add the bridgetown-plugin topic to your GitHub repo to include it here. +

    + + diff --git a/bridgetown-website/src/_partials/_footer.serb b/bridgetown-website/src/_partials/_footer.serb new file mode 100644 index 000000000..b8f2f8a27 --- /dev/null +++ b/bridgetown-website/src/_partials/_footer.serb @@ -0,0 +1,86 @@ +{{ svg "/images/waves/wave_1.svg" }} + diff --git a/bridgetown-website/src/_partials/_head.serb b/bridgetown-website/src/_partials/_head.serb new file mode 100644 index 000000000..d6041b6a8 --- /dev/null +++ b/bridgetown-website/src/_partials/_head.serb @@ -0,0 +1,15 @@ + + + + + + + + +{%= seo %} + + + + +{%= feed_meta %} +{%= live_reload_dev_js %} diff --git a/bridgetown-website/src/_partials/docs/_help_needed.serb b/bridgetown-website/src/_partials/docs/_help_needed.serb new file mode 100644 index 000000000..196728c5b --- /dev/null +++ b/bridgetown-website/src/_partials/docs/_help_needed.serb @@ -0,0 +1,3 @@ +{%@ Note type: "warning" do %} +**Help Needed!** This Documentation page is in need of review and possible revision. Can you help us out?
    [We'd greatly appreciate it!](https://github.com/bridgetownrb/bridgetown/issues/new?assignees=&labels=documentation&template=documentation.md&title=docs%3A+{{ resource.relative_url | cgi_escape }}) 😃👍 +{% end %} \ No newline at end of file diff --git a/bridgetown-website/src/_components/docs/install/bridgetown.liquid b/bridgetown-website/src/_partials/docs/install/_bridgetown.serb similarity index 83% rename from bridgetown-website/src/_components/docs/install/bridgetown.liquid rename to bridgetown-website/src/_partials/docs/install/_bridgetown.serb index 12be95966..82842877f 100644 --- a/bridgetown-website/src/_components/docs/install/bridgetown.liquid +++ b/bridgetown-website/src/_partials/docs/install/_bridgetown.serb @@ -2,15 +2,15 @@ Now all that is left is to install Bridgetown! -{%- if edge_version %} +{%- if site.data.edge_version %} ``` -gem install bridgetown -N -v {{ version }} +gem install bridgetown -N -v {{ Bridgetown::VERSION }} ``` {%- else %} ``` gem install bridgetown -N ``` -{%- endif %} +{%- end %} Create a new Bridgetown site at `./mysite`, as well as run `bundle install` and `yarn install` automatically: @@ -27,4 +27,4 @@ Now you should be able to build the site and run a live-reload server: $ bin/bridgetown start ``` -Try opening the site up in [http://localhost:4000](http://localhost:4000){:target="_blank"}. See something? Awesome, you're ready to roll! If not, try revisiting your installation and setup steps, and if all else fails, [reach out to the Bridgetown community for support](/docs/community/). +Try opening the site up in [http://localhost:4000](http://localhost:4000){:target="_blank"}. See something? Awesome, you're ready to roll! If not, try revisiting your installation and setup steps, and if all else fails, [reach out to the Bridgetown community for support](/community/). diff --git a/bridgetown-website/src/_components/docs/install/node_on_linux.liquid b/bridgetown-website/src/_partials/docs/install/_node_on_linux.serb similarity index 100% rename from bridgetown-website/src/_components/docs/install/node_on_linux.liquid rename to bridgetown-website/src/_partials/docs/install/_node_on_linux.serb diff --git a/bridgetown-website/src/_posts/2020/2020-04-17-time-to-visit-bridgetown.md b/bridgetown-website/src/_posts/2020/2020-04-17-time-to-visit-bridgetown.md index 6db62ec0a..79770db75 100644 --- a/bridgetown-website/src/_posts/2020/2020-04-17-time-to-visit-bridgetown.md +++ b/bridgetown-website/src/_posts/2020/2020-04-17-time-to-visit-bridgetown.md @@ -75,6 +75,6 @@ Get started today. (or [find out how you can become a contributor](/docs/community/)…or perhaps join the Bridgetown core team!) {:.has-text-centered} -{% rendercontent "docs/note", extra_margin: true %} +{%@ Note do %} P. S. Let us know if you plan to build something awesome with Bridgetown! And be sure to use the hashtag [**#SpinUpBridgetown**](https://twitter.com/intent/tweet?url=https%3A%2F%2Fbridgetownrb.com&via=bridgetownrb&text=Check%20out%20this%20awesome%20new%20static%20site%20generator%20built%20in%20Ruby%21&hashtags=SpinUpBridgetown%2CJamstack) and spread the word! 😃 -{% endrendercontent %} +{% end %} diff --git a/bridgetown-website/src/_posts/2020/2020-05-05-supercharge-your-bridgetown-site-with-ruby-front-matter.md b/bridgetown-website/src/_posts/2020/2020-05-05-supercharge-your-bridgetown-site-with-ruby-front-matter.md index 2635bd5b7..1356b9255 100644 --- a/bridgetown-website/src/_posts/2020/2020-05-05-supercharge-your-bridgetown-site-with-ruby-front-matter.md +++ b/bridgetown-website/src/_posts/2020/2020-05-05-supercharge-your-bridgetown-site-with-ruby-front-matter.md @@ -1,24 +1,30 @@ ---- -title: Supercharge Your Bridgetown Site with Ruby Front Matter -subtitle: You can now write real Ruby code directly in your Front Matter! This feature is available for pages, posts, and other documents–as well as layouts for site-wide access to your Ruby return values. -author: jared -category: feature -calculation: !ruby/string:Rb | - [2 * 4, 5 + 2].min -title_fragment: Title of a Page -example_title: !ruby/string:Rb | - "This is the #{data["title_fragment"].sub("Title", "Name")}" -seo_tag_gem_version: !ruby/string:Rb | - url = "https://raw.githubusercontent.com/bridgetownrb/bridgetown-seo-tag/master/lib/bridgetown-seo-tag/version.rb" - result = Faraday.get(url).body - result.match(/VERSION = "(.*?)"/)[1] ---- +~~~{% +front_matter do + title "Supercharge Your Bridgetown Site with Ruby Front Matter" + subtitle "You can now write real Ruby code directly in your Front Matter! This feature is available for pages, posts, and other documents–as well as layouts for site-wide access to your Ruby return values." + author "jared" + category "feature" + calculation [2 * 4, 5 + 2].min + title_fragment "Title of a Page" + example_title "This is the #{title_fragment.sub("Title", "Name")}" + seo_tag_gem_version begin + url = "https://raw.githubusercontent.com/bridgetownrb/bridgetown-seo-tag/master/lib/bridgetown-seo-tag/version.rb" + result = Faraday.get(url).body + result.match(/VERSION = "(.*?)"/)[1] + end +end +%}~~~ + + +{%@ Note type: :warning do %} +This kind of Ruby front matter has been removed from Bridgetown in favor of a pure [Ruby front matter](/docs/front-matter#the-power-of-ruby-in-front-matter) format. This blog post is kept here only for historical reasons. +{% end %} Starting in Bridgetown v0.13, you can now write real Ruby code directly in your [Front Matter](/docs/front-matter/)! 🤯 This feature is available for pages, posts, and other documents–as well as layouts for site-wide access to your Ruby return values. -{% rendercontent "docs/note" %} +{%@ Note do %} This requires the environment variable `BRIDGETOWN_RUBY_IN_FRONT_MATTER` to be set to `"true"` in your development and deployment setups. Otherwise the code will not be executed and will be treated as a raw string. -{% endrendercontent %} +{% end %} Now you may be wondering, _how is this even possible?_ Front Matter is in YAML format, and the only place you can write actual code is in a custom plugin, right? _RIGHT??_ @@ -40,7 +46,7 @@ Calc Result: {{ page.calculation }} In this example, the value of the `calculation` variable is the return value of the Ruby code defined by the special string `!ruby/string:Rb`. The `|` symbol at the end just means all the indented code in the line(s) below are attached to that front matter variable. -The value printed out in the rendered page for the calculation will be **{{ page.calculation }}** (since 7 is less than 8 and thus the minimum integer in the array). In fact, on this very page you're reading, that number **{{ page.calculation }}** is actually being generated by Ruby Front Matter, not hard-coded in this article! Thus you know the system works. ☺️ +The value printed out in the rendered page for the calculation will be **{{ page.data.calculation }}** (since 7 is less than 8 and thus the minimum integer in the array). In fact, on this very page you're reading, that number **{{ page.data.calculation }}** is actually being generated by Ruby Front Matter, not hard-coded in this article! Thus you know the system works. ☺️ In Ruby Front Matter you can return any kind of value that is accessible from a Liquid template. So strings, numbers, arrays, hashes, integers: they all work. Even _objects_ can be returned if they are [implemented as a Liquid drop](https://github.com/Shopify/liquid/wiki/Introduction-to-Drops). @@ -54,7 +60,7 @@ title: !ruby/string:Rb | --- ``` -Now the page title will read: **{{ page.example_title }}** +Now the page title will read: **{{ page.data.example_title }}** ### Use Cases for Ruby Front Matter @@ -69,9 +75,9 @@ seo_tag_gem_version: !ruby/string:Rb | --- ``` -This will pull the current gem version of the master branch from [bridgetown-seo-tag](https://github.com/bridgetownrb/bridgetown-seo-tag) and output it via {% raw %}`{{ page.seo_tag_gem_version }}`{% endraw %} (it's **{{ page.seo_tag_gem_version }}**). +This will pull the current gem version of the master branch from [bridgetown-seo-tag](https://github.com/bridgetownrb/bridgetown-seo-tag) and output it via {% raw %}`{{ page.seo_tag_gem_version }}`{% endraw %} (it's **{{ page.data.seo_tag_gem_version }}**). -Another example is a feature we include on this very website's footer to show the average number of commits to the Bridgetown project on GitHub over the past month. (At the time this site was last built, that number is **{{ layout.github_participation }}**.) +Another example is a feature we include on this very website's footer to show the average number of commits to the Bridgetown project on GitHub over the past month. Here's the Ruby Front Matter we include in `_layouts/default.html`: @@ -105,9 +111,9 @@ But if you just need to add a little bit of dynamic functionality to a page or a And remember, this isn't a "lite" or stripped-down version of Ruby. **This is 100% full Ruby.** So you can process page or site data, instantiate objects, require gems, perform network requests, interact with the underlying filesystem, monkeypatch and metaprogram and do anything you'd ever need to do via Ruby. -{% rendercontent "docs/note", type: "warning" %} +{%@ Note type: :warning do %} For security reasons, please _do not allow_ untrusted content into your repository to be executed in an unsafe environment (aka outside of a Docker container or similar). Just like with custom plugins, a malicious content contributor could potentially introduce harmful code into your site and thus any computer system used to build that site. Enable Ruby Front Matter _only_ if you feel confident in your ability to control and monitor all on-going updates to repository files and data. -{% endrendercontent %} +{% end %} In summary, if you're excited to give Ruby Front Matter a try, all you have to do is [install Bridgetown v0.13 or later](/docs/), set `BRIDGETOWN_RUBY_IN_FRONT_MATTER` to `"true"` in your development environment, and go to town (Bridge…town 😋). And be sure to share your sweet solutions on Twitter with the hashtag [**\#SpinUpBridgetown**](https://twitter.com/search?q=%23SpinUpBridgetown) to let the community know what you've built with Ruby Front Matter! diff --git a/bridgetown-website/src/_posts/2020/2020-05-27-bridgetown-around-the-web-late-may-2020.md b/bridgetown-website/src/_posts/2020/2020-05-27-bridgetown-around-the-web-late-may-2020.md index a7e3f700e..59770a4f2 100644 --- a/bridgetown-website/src/_posts/2020/2020-05-27-bridgetown-around-the-web-late-may-2020.md +++ b/bridgetown-website/src/_posts/2020/2020-05-27-bridgetown-around-the-web-late-may-2020.md @@ -63,4 +63,4 @@ Finally, we [got a shoutout from Netlify](https://twitter.com/netlify/status/125 So that's it for this month's installment of **Bridgetown Around the Web**. Pop back in next month for more tweets, podcasts, links, tutorials, and all that jazz. 🎷 -And if you're interesting in trying out Bridgetown or using it fo your next project, [read the docs to get started](https://www.bridgetownrb.com/docs). \ No newline at end of file +And if you're interesting in trying out Bridgetown or using it for your next project, [read the docs to get started](https://www.bridgetownrb.com/docs). \ No newline at end of file diff --git a/bridgetown-website/src/_posts/2020/2020-06-18-major-workflow-advances-in-0.15-overlook.md b/bridgetown-website/src/_posts/2020/2020-06-18-major-workflow-advances-in-0.15-overlook.md index caf18747a..026778f11 100644 --- a/bridgetown-website/src/_posts/2020/2020-06-18-major-workflow-advances-in-0.15-overlook.md +++ b/bridgetown-website/src/_posts/2020/2020-06-18-major-workflow-advances-in-0.15-overlook.md @@ -13,8 +13,8 @@ It's time to unveil some of those initiatives today with the release of Bridgeto Before we get into the meat of the release, there's a brand-new overview video you can watch to learn more about Bridgetown! -
    - +
    +
    This is the first video in an ongoing series, so keep an eye out for future installments. diff --git a/bridgetown-website/src/_posts/2020/2020-11-09-easily-configure-template-engines.md b/bridgetown-website/src/_posts/2020/2020-11-09-easily-configure-template-engines.md index d09c1798c..978a6372b 100644 --- a/bridgetown-website/src/_posts/2020/2020-11-09-easily-configure-template-engines.md +++ b/bridgetown-website/src/_posts/2020/2020-11-09-easily-configure-template-engines.md @@ -6,8 +6,8 @@ author: jared category: videos --- -
    - +
    +
    New for the Bridgetown 0.18 "Taylor Street" release, you can now [mix-and-match Liquid, ERB, and other template engines](/docs/template-engines) freely throughout your site on a per-file basis or as the configured default to be used in conjunction with Markdown and other output formats. Here's how! diff --git a/bridgetown-website/src/_posts/2021/2021-09-13-rip-jekyll.md b/bridgetown-website/src/_posts/2021/2021-09-13-rip-jekyll.md index cd3c1dada..25245a273 100644 --- a/bridgetown-website/src/_posts/2021/2021-09-13-rip-jekyll.md +++ b/bridgetown-website/src/_posts/2021/2021-09-13-rip-jekyll.md @@ -3,13 +3,14 @@ title: Jekyll and the Genesis of the Jamstack subtitle: "Let's look at some positive developments that will provide a path forward for Jekyll users." author: jared category: future +exclude_from_pagination: true --- **September 15 Update:** There's been a fair amount of internet consternation since I published this article. While I do stand by everything in the post factually-speaking, I apologize for the insensitive timing of this article—coming so soon after Frank's passing. I'm genuinely sorry this came across as a "Jared vs. Frank" debacle. Should I have waited a few more weeks or months? Probably. Perhaps it was originally a mistake for me to refrain from publicly commenting on the statements regarding Jekyll's "permanent hiatus" back in May. It's hard to say. At the very least, I hope we can all agree that Jekyll's legacy as the "first among many" of modern static site generators is meaningful to a lot of people, even if we sometimes disagree on the best way to honor that legacy and push Ruby on the Jamstack forward. If the one thing that comes out of all this is that more people step forward to share their positive experiences with Jekyll, Ruby, and building websites, that's a good thing. ---- -### Original Article as Published: +## Original Article as Published: {:style="text-align:center"} @@ -54,7 +55,7 @@ Lack of any one of these points isn't the end of the world, but at the present m Is Jekyll truly dead, as Frank surmised in his May 2021 comments? It all depends on how you look at it. But any honest assessment of the situation must acknowledge that Jekyll's future is in grave peril. -### Bridgetown's Road to 1.0 and the Future of Ruby Static Site Generators +## Bridgetown's Road to 1.0 and the Future of Ruby Static Site Generators Let's look at some positive developments that will provide a path forward for Jekyll users. diff --git a/bridgetown-website/src/_posts/2021/2021-10-24-era-of-bridgetown-v1.md b/bridgetown-website/src/_posts/2021/2021-10-24-era-of-bridgetown-v1.md index 5e1b86cb6..f9a735263 100644 --- a/bridgetown-website/src/_posts/2021/2021-10-24-era-of-bridgetown-v1.md +++ b/bridgetown-website/src/_posts/2021/2021-10-24-era-of-bridgetown-v1.md @@ -16,7 +16,7 @@ Therefore, **[we’ve launched a dedicated fundraising site for Bridgetown](http Now without further ado, onto the latest version of Bridgetown codenamed “Pearl”. I’ve talked about some of the changes therein previously, but let’s recap what’s new in this release! -### Ruby-Centric Tooling (Rake, Rack, Puma, & Roda) +## Ruby-Centric Tooling (Rake, Rack, Puma, & Roda) In prior versions of Bridgetown, we had leaned on some Node-based tooling to provide features such as CLI scripts (via Yarn/package.json), executing multiple processes simultaneously (Bridgetown’s dev server + Webpack), and live-reloading. @@ -26,7 +26,7 @@ Bridgetown’s new dev server is based on the battle-hardened one-two punch of [ By moving to a Rack-based stack, this means _every Bridgetown site is potentially a Rails app, or Sinatra, or Roda itself, or…_. Because Rack can mount multiple “apps” within a single server process, you can run Bridgetown alongside your favorite backend/fullstack Ruby app framework. Yet with Roda on the scene, we just couldn’t help ourselves… -### Bridgetown SSR, Roda API, and File-based Dynamic Routes +## Bridgetown SSR, Roda API, and File-based Dynamic Routes Server-Side Rendering, known as SSR, has made its peace with SSG (Static Site Generation), and we are increasingly seeing an SSG/SSR “hybrid” architecture emerge in tooling throughout the web dev industry. @@ -126,25 +126,29 @@ Testing is straightforward as well. Simply place `.test.rb` files alongside your Rest assured, a **full setup guide & tutorial** for all this stuff is on its way. ([Want to get it sooner?](https://fundraising.bridgetownrb.com) 😉) -### The DREAMstack Has Arrived +## The DREAMstack Has Arrived The bottom line it this: Bridgetown has evolved into more than “just” a static site generator and can now be considered a fullstack web framework, thanks to the incredible building blocks of Rack, Puma, Roda, and what’s come before in Bridgetown. You’re certainly under no obligation to use _any_ of this new dynamic routing functionality, but it’s there _if and when_ you need it. This is the final realization of what I have lovingly referred to as the “DREAMstatck” — **D**elightful **R**uby **E**xpressing **A**PIs **A**nd **M**arkup. In terms of a deployment strategy, we highly recommend [Render](https://render.com). With a simple `render.yaml` file, you can deploy both a static site and a dynamic server from a single codebase (monorepo) which are then both refreshed in tandem any time you commit and push to GitHub. We’ll post an entire article all about this deployment strategy in the coming days. And if you don’t expect a whole lot of traffic, you can even jettison the static site entirely and only deploy the server, letting Puma handle all incoming traffic. It’s not as crazy as you might think because any static-only content is _always_ pre-built and served as static assets (even if Bridgetown SSR is enabled) whenever you run `bin/bridgetown start`. The only downside would be it’s not cached on a global CDN as a fully-fledged static site on Render would be. -### The Migration to Resources is Now Complete +## The Migration to Resources is Now Complete The other major shift in Bridgetown 1.0 is the removal of the “legacy” content engine in favor of the new “resource” content engine. By consolidating all disparate types of content—datafiles, posts, pages, and custom collection entries—down to one singular and powerful concept (the resource), a vast number of limitations, confusing discrepancies, and outright bugs have been eliminated, and we’re well on our way to providing next-gen content modeling and authoring capabilities rivaling the world’s finest SSGs. I’ve been using resources exclusively on all Bridgetown site projects for a while now, and it’s been a blast. I simply can’t wait to see what Ruby web developers near and far create using this new technology. [Resource documentation is now available on our edge site](https://edge.bridgetownrb.com/docs/resources). (If you aren't in a position to migrate your codebase to use resources just yet, no worries. We'll continue to update the 0.2x version of Bridgetown with major bugfixes/security patches until well after 1.0's official release.) -### More Awesomeness to Come (I18n, esbuild, ERB/Serbea starter kits, SSR enhancements…) +## More Awesomeness to Come (I18n, esbuild, ERB/Serbea starter kits, SSR enhancements…) Bridgetown 1.0 “Pearl” is already the most action-packed release since the initial launch of the framework, but in many ways we’re just getting started. From full internationalization (I18n) features to blazing-fast frontend bundling via esbuild, from new supercharged starter kits to numerous SSR and Roda API improvements, we expect subsequent releases past 1.0 to continue the trend of making rapid progress for maximum DX (Developer Experience). We encourage you to [try Bridgetown 1.0 alpha today](https://edge.bridgetownrb.com), and then jump into our [Discord chat](https://discord.gg/4E6hktQGz4) to let us know what you think. Your feedback and ideas are invaluable in shaping the future of Bridgetown and helping make it the best site generator for Rubyists everywhere. -### Upgrading from v0.2x +## Upgrading from v0.2x + +{%@ Note type: :warning do %} +There's now an official up-to-date [upgrade guide available here](/docs/installation/upgrade). +{% end %} First, you’ll need to specify the new version in your Gemfile: diff --git a/bridgetown-website/src/_posts/2021/2021-11-16-twitter-spaces-ama-recording-and-transcript.md b/bridgetown-website/src/_posts/2021/2021-11-16-twitter-spaces-ama-recording-and-transcript.md index 1e154c248..f5afb3161 100644 --- a/bridgetown-website/src/_posts/2021/2021-11-16-twitter-spaces-ama-recording-and-transcript.md +++ b/bridgetown-website/src/_posts/2021/2021-11-16-twitter-spaces-ama-recording-and-transcript.md @@ -12,9 +12,19 @@ Topics included a progress report on the [Bridgetown fundraising campaign](https **Enjoy!** (And stay tuned for another Twitter Spaces discussion in December…) -

    - -### Transcript +

    + +

    + + +## Transcript _Automatic transcription by Happy Scribe, with light edits_ {:style="text-align:center"} diff --git a/bridgetown-website/src/_posts/2021/2021-12-03-progress-report-esbuild-aware.md b/bridgetown-website/src/_posts/2021/2021-12-03-progress-report-esbuild-aware.md index d3f55e938..c73c8c958 100644 --- a/bridgetown-website/src/_posts/2021/2021-12-03-progress-report-esbuild-aware.md +++ b/bridgetown-website/src/_posts/2021/2021-12-03-progress-report-esbuild-aware.md @@ -33,7 +33,7 @@ Developer time has slightly outpaced fundraising at this point, but that's not u There's also been a flurry of effort not included in this direct report to further ecosystem enhancements (plugins, methodologies, etc.) which tie into the overall 1.0 launch, such as our [Prismic CMS plugin](https://github.com/bridgetownrb/bridgetown-prismic), [CableCar/mrujs integration](https://github.com/bridgetownrb/bridgetown/pull/465), and seamless support for ActiveRecord (yes, [that ActiveRecord!](https://guides.rubyonrails.org/active_record_basics.html)) & databases. -### So, about that "esbuild" line item… +## So, about that "esbuild" line item… First, a little history lesson… @@ -65,7 +65,7 @@ In fact, we're so confident in our ability to iterate rapidly on this integratio Webpack will continue to be available _and_ supported. But with the release of Bridgetown 1.0, we're all in on esbuild—and PostCSS as well. We believe this is the right path forward for frontend bundling—not just for Bridgetown but for web frameworks across our industry. -### FAQ: Vite? Import maps? Migration strategy? +## FAQ: Vite? Import maps? Migration strategy? Three answers to likely questions before I close: diff --git a/bridgetown-website/src/_posts/_defaults.yml b/bridgetown-website/src/_posts/_defaults.yml index bf162af9f..9388f3d78 100644 --- a/bridgetown-website/src/_posts/_defaults.yml +++ b/bridgetown-website/src/_posts/_defaults.yml @@ -1,2 +1,3 @@ layout: post +author: jared category: news diff --git a/bridgetown-website/src/apple-touch-icon.png b/bridgetown-website/src/apple-touch-icon.png index 6058c93ed..58a694e60 100644 Binary files a/bridgetown-website/src/apple-touch-icon.png and b/bridgetown-website/src/apple-touch-icon.png differ diff --git a/bridgetown-website/src/authors/author.html b/bridgetown-website/src/authors/author.html deleted file mode 100644 index 4a3ad0f15..000000000 --- a/bridgetown-website/src/authors/author.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: default -title: Articles by :prototype-data-label -exclude_from_search: true -prototype: - collection: posts - term: author - data: authors - data_label: name ---- - -{% assign author = page.author_data %} -{% rendercontent "shared/page_layout" %} -

    Articles by - {{ author.name | split: " " | first }}

    - -

    - Connect with - {{ author.name }} - on the - Web - or - {% if author.twitter %} - Twitter - {% elsif author.github %} - GitHub - {% endif %} -

    - - {% for post in paginator.resources %} - {% render "content/news_item", post: post, authors: site.data.authors %} - {% endfor %} - - {% render "shared/pagination", paginator: paginator %} -{% endrendercontent %} diff --git a/bridgetown-website/src/categories/category.html b/bridgetown-website/src/categories/category.html deleted file mode 100644 index 5e2a8409f..000000000 --- a/bridgetown-website/src/categories/category.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: default -title: "Browse Category: :prototype-term-titleize" -exclude_from_search: true -prototype: - collection: posts - term: category ---- - -{% rendercontent "shared/page_layout" %} -

    {{ page.title }}

    - - {% for post in paginator.resources %} - {% render "content/news_item", post: post, authors: site.data.authors %} - {% endfor %} - - {% render "shared/pagination", paginator: paginator %} -{% endrendercontent %} diff --git a/bridgetown-website/src/favicon-16x16.png b/bridgetown-website/src/favicon-16x16.png index 5a809f923..81dd8e81e 100644 Binary files a/bridgetown-website/src/favicon-16x16.png and b/bridgetown-website/src/favicon-16x16.png differ diff --git a/bridgetown-website/src/favicon-32x32.png b/bridgetown-website/src/favicon-32x32.png index 33938175c..eae4ad9e9 100644 Binary files a/bridgetown-website/src/favicon-32x32.png and b/bridgetown-website/src/favicon-32x32.png differ diff --git a/bridgetown-website/src/favicon.ico b/bridgetown-website/src/favicon.ico index 2edd171df..70d223c79 100644 Binary files a/bridgetown-website/src/favicon.ico and b/bridgetown-website/src/favicon.ico differ diff --git a/bridgetown-website/src/images/.keep b/bridgetown-website/src/images/.keep new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/bridgetown-website/src/images/.keep @@ -0,0 +1 @@ + diff --git a/bridgetown-website/src/images/Bridgetown-Logo-Squished.svg b/bridgetown-website/src/images/Bridgetown-Logo-Squished.svg deleted file mode 100644 index 953c96b81..000000000 --- a/bridgetown-website/src/images/Bridgetown-Logo-Squished.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bridgetown-website/src/images/Bridgetown-Logo.svg b/bridgetown-website/src/images/Bridgetown-Logo.svg deleted file mode 100644 index 2d5dacb2a..000000000 --- a/bridgetown-website/src/images/Bridgetown-Logo.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bridgetown-website/src/images/Screen Shot 2021-05-14 at 11.11.01 AM.png b/bridgetown-website/src/images/Screen Shot 2021-05-14 at 11.11.01 AM.png deleted file mode 100644 index efba47e13..000000000 Binary files a/bridgetown-website/src/images/Screen Shot 2021-05-14 at 11.11.01 AM.png and /dev/null differ diff --git a/bridgetown-website/src/images/Screen Shot 2021-05-14 at 11.13.31 AM.png b/bridgetown-website/src/images/Screen Shot 2021-05-14 at 11.13.31 AM.png deleted file mode 100644 index e39892da9..000000000 Binary files a/bridgetown-website/src/images/Screen Shot 2021-05-14 at 11.13.31 AM.png and /dev/null differ diff --git a/bridgetown-website/src/images/bridgetown-avatar.png b/bridgetown-website/src/images/bridgetown-avatar.png new file mode 100644 index 000000000..72f32bccd Binary files /dev/null and b/bridgetown-website/src/images/bridgetown-avatar.png differ diff --git a/bridgetown-website/src/images/bridgetown-background.jpg b/bridgetown-website/src/images/bridgetown-background.jpg new file mode 100644 index 000000000..73975a790 Binary files /dev/null and b/bridgetown-website/src/images/bridgetown-background.jpg differ diff --git a/bridgetown-website/src/images/bridgetown-logo-2022.svg b/bridgetown-website/src/images/bridgetown-logo-2022.svg new file mode 100644 index 000000000..3006b5ea4 --- /dev/null +++ b/bridgetown-website/src/images/bridgetown-logo-2022.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bridgetown-website/src/images/bridgetown-logo-twitter-card.jpg b/bridgetown-website/src/images/bridgetown-logo-twitter-card.jpg index d61b064a7..2426ce008 100644 Binary files a/bridgetown-website/src/images/bridgetown-logo-twitter-card.jpg and b/bridgetown-website/src/images/bridgetown-logo-twitter-card.jpg differ diff --git a/bridgetown-website/src/images/community.svg b/bridgetown-website/src/images/community.svg new file mode 100644 index 000000000..e1a9405f3 --- /dev/null +++ b/bridgetown-website/src/images/community.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/bridgetown-website/src/images/ruby-plain.svg b/bridgetown-website/src/images/ruby-plain.svg new file mode 100644 index 000000000..635286dd5 --- /dev/null +++ b/bridgetown-website/src/images/ruby-plain.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/bridgetown-website/src/images/waves/wave_1.svg b/bridgetown-website/src/images/waves/wave_1.svg new file mode 100644 index 000000000..4477d585b --- /dev/null +++ b/bridgetown-website/src/images/waves/wave_1.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/bridgetown-website/src/images/waves/wave_2.svg b/bridgetown-website/src/images/waves/wave_2.svg new file mode 100644 index 000000000..47a8f0a48 --- /dev/null +++ b/bridgetown-website/src/images/waves/wave_2.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/bridgetown-website/test/helper.rb b/bridgetown-website/test/helper.rb deleted file mode 100644 index 31f127786..000000000 --- a/bridgetown-website/test/helper.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true - -require "nokogiri" -require "minitest/autorun" -require "minitest/reporters" -require "minitest/profile" -require "shoulda" -require "rails-dom-testing" - -# Report with color. -Minitest::Reporters.use! [ - Minitest::Reporters::DefaultReporter.new( - color: true - ), -] - -Minitest::Test.class_eval do - include Rails::Dom::Testing::Assertions - - def site - @site ||= Bridgetown.sites.first - end - - def nokogiri(input) - input.respond_to?(:output) ? Nokogiri::HTML(input.output) : Nokogiri::HTML(input) - end - - def document_root(root) - @document_root = root.is_a?(Nokogiri::XML::Document) ? root : nokogiri(root) - end - - def document_root_element - if @document_root.nil? - raise "Call `document_root' with a Nokogiri document before testing your assertions" - end - - @document_root - end -end diff --git a/bridgetown-website/test/test_blog.rb b/bridgetown-website/test/test_blog.rb deleted file mode 100644 index 8efc9a590..000000000 --- a/bridgetown-website/test/test_blog.rb +++ /dev/null @@ -1,87 +0,0 @@ -# frozen_string_literal: true - -require_relative "./helper" - -class TestBlog < Minitest::Test - context "blog page" do - setup do - page = site.generated_pages.find { |doc| doc.url == "/blog/index.html" } - document_root page - end - - should "show authors" do - assert_select ".box .author img" do |imgs| - assert_dom_equal imgs.first.to_html, - 'Jared White' - end - end - - should "have correct microformat markup" do - assert_select ".h-entry h2.p-name" - assert_select ".h-entry article-content.p-summary" - assert_select ".h-entry article-author.p-author" - end - end - - context "blog page" do - setup do - page = site.collections.docs.resources.find { |doc| doc.relative_url == "/docs/plugins" } - document_root nokogiri(page) - end - - should "have a formatted JSON code example" do - assert_select "div.language-json pre.highlight", <<~JSON - "dependencies": { - "random-js-package": "2.4.6", - "my-plugin": "../my-plugin" - } - JSON - end - end - - context "blog post" do - setup do - page = site.collections.posts.resources.find { |doc| doc.relative_url == "/release/whats-new-in-0.14-hazelwood/" } - document_root nokogiri(page) - end - - should "display a Builder code example" do - assert_select ".box > article > h1" do |h1| - assert_dom_equal h1.to_html, '

    A Bridge to the Future: What’s New in Bridgetown 0.14 “Hazelwood”

    ' - end - - code_example = <<~RUBY - # plugins/builders/welcome_to_hazelwood.rb - class WelcomeToHazelwood < SiteBuilder - def build - liquid_tag "welcome" do |attributes| - "Welcome to Hazelwood, \#{attributes}!" - end - liquid_filter "party_time", :party_time - - add_new_posts - end - - def party_time(input) - "\#{input} 🥳" - end - - def add_new_posts - get "https://domain.com/posts.json" do |data| - data.each do |post| - doc "\#{post[:slug]}.md" do - front_matter post - categories post[:taxonomy][:category].map { |category| category[:slug] } - date Bridgetown::Utils.parse_date(post[:date]) - content post[:body] - end - end - end - end - end - RUBY - - assert_select ".content > div.language-ruby:nth-of-type(1) pre.highlight", code_example - end - end -end diff --git a/bridgetown-website/test/test_documentation.rb b/bridgetown-website/test/test_documentation.rb deleted file mode 100644 index 2bbd64f60..000000000 --- a/bridgetown-website/test/test_documentation.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -require_relative "./helper" - -class TestDocumentation < Minitest::Test - context "plugins page" do - setup do - page = site.collections.docs.resources.find { |doc| doc.relative_url == "/docs/plugins" } - document_root nokogiri(page) - end - - should "have a formatted JSON code example" do - assert_select "div.language-json pre.highlight", <<~JSON - "dependencies": { - "random-js-package": "2.4.6", - "my-plugin": "../my-plugin" - } - JSON - end - end -end diff --git a/bridgetown-website/test/test_homepage.rb b/bridgetown-website/test/test_homepage.rb deleted file mode 100644 index a0a90421f..000000000 --- a/bridgetown-website/test/test_homepage.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -require_relative "./helper" - -class TestHomepage < Minitest::Test - context "homepage" do - setup do - page = site.collections.pages.resources.find { |doc| doc.relative_url == "/" } - document_root page - end - - should "exist" do - assert_select "body" - end - end -end diff --git a/bridgetown-website/test/test_navbar.rb b/bridgetown-website/test/test_navbar.rb deleted file mode 100644 index 4a8fddc17..000000000 --- a/bridgetown-website/test/test_navbar.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -require_relative "./helper" - -class TestNavbar < Minitest::Test - context "top navbar" do - setup do - page = site.collections.pages.resources.find { |doc| doc.relative_url == "/about/" } - document_root page - end - - should "have a star link" do - assert_select "nav .navbar-end a:nth-of-type(1)", "Star" - end - - should "have a news link" do - assert_select "nav .navbar-start a:nth-of-type(3)", "News" - end - end -end diff --git a/bridgetown-website/webpack.config.js b/bridgetown-website/webpack.config.js deleted file mode 100644 index e0e134985..000000000 --- a/bridgetown-website/webpack.config.js +++ /dev/null @@ -1,46 +0,0 @@ -const { merge } = require('webpack-merge') - -var config = require("./config/webpack.defaults.js") - -var ruby2jsconfig = { - test: /\.js\.rb$/, - use: [ - { - loader: "esbuild-loader", - options: { - target: 'es2016' - }, - }, - "@ruby2js/webpack-loader" - ] -} - -config.module.rules.push(ruby2jsconfig) - -// Add any overrides to the default webpack config here: -// -// Eg: -// -// ``` -// const path = require("path") -// config.resolve.modules.push(path.resolve(__dirname, 'frontend', 'components')) -// config.resolve.alias.frontendComponents = path.resolve(__dirname, 'frontend', 'components') -// ``` -// -// You can also merge in a custom config using the included `webpack-merge` package. -// Complete docs available at: https://github.com/survivejs/webpack-merge -// -// Eg: -// -// ``` -// const customConfig = { ..... } -// config = merge(config, customConfig) -// ``` - - - - - -//////////////////////////////////////////////////////// - -module.exports = config \ No newline at end of file diff --git a/bridgetown-website/yarn.lock b/bridgetown-website/yarn.lock index 2d176ba17..53fd619d4 100644 --- a/bridgetown-website/yarn.lock +++ b/bridgetown-website/yarn.lock @@ -3,177 +3,145 @@ "@babel/code-frame@^7.0.0": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: - "@babel/highlight" "^7.10.4" + "@babel/highlight" "^7.16.7" -"@babel/helper-validator-identifier@^7.10.4": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== +"@babel/highlight@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b" + integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" + "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" js-tokens "^4.0.0" "@babel/runtime@^7.10.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" - integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.5.tgz#7f3e34bf8bdbbadf03fbb7b1ea0d929569c9487a" + integrity sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA== dependencies: regenerator-runtime "^0.13.4" -"@discoveryjs/json-ext@^0.5.0": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" - integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== +"@csstools/convert-colors@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-2.0.0.tgz#6dd323583b40cfe05aaaca30debbb30f26742bbf" + integrity sha512-P7BVvddsP2Wl5v3drJ3ArzpdfXMqoZ/oHOV/yFiGFb3JQr9Z9UXZ9tnHAKJsO89lfprR1F9ExW3Yij21EjEBIA== + +"@hotwired/turbo@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.1.0.tgz#27e44e0e3dc5bd1d4bda0766d579cf5a14091cd7" + integrity sha512-Q8kGjqwPqER+CtpQudbH+3Zgs2X4zb6pBAlr6NsKTXadg45pAOvxI9i4QpuHbwSzR2+x87HUm+rot9F/Pe8rxA== -"@linthtml/linthtml@^0.5.1": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@linthtml/linthtml/-/linthtml-0.5.2.tgz#cd11e30ad2bac5e704aa181cf79a6cf6d333612a" - integrity sha512-r15DNteFCS7kw6oP3yCg+xWnWmJRY7KVmalAlb6kvpAR54atXf9OFuobuIwHOwHUquJTy5aF87k6cKRWLBa3BQ== +"@linthtml/linthtml@^0.8.4": + version "0.8.4" + resolved "https://registry.yarnpkg.com/@linthtml/linthtml/-/linthtml-0.8.4.tgz#d2a08dbcf46c5933981debc72a0cce3b634b647d" + integrity sha512-fFbG5s+3gp9KQtYPnLiapYDjCj5s67MTo6qNOFfu1e2aZMIUlRU0yRRbYdURBWh7VAL5pYvpPN+tzyWe5q0fYw== dependencies: bulk-require "1.0.1" - chalk "4.1.0" - cosmiconfig "6.0.0" - globby "11.0.1" - htmlparser2 "^4.1.0" + chalk "4.1.1" + cosmiconfig "7.0.0" + global-modules "^2.0.0" + globby "^11.0.2" + htmlparser2 "^6.1.0" ignore "^5.1.4" - inquirer "^7.0.4" + inquirer "^8.1.1" + js-yaml "^3.14.0" kebabcase "1.0.1" lodash.pull "4.1.0" - meow "7.1.1" - ora "5.1.0" + meow "^9.0.0" + ora "^5.3.0" + resolve-from "^5.0.0" table-layout "1.0.1" - yaml "^1.7.2" + +"@lit-labs/react@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@lit-labs/react/-/react-1.0.1.tgz#35f4a8fe12501f79e3973b408e67aa75dcd45ff4" + integrity sha512-ShvoOB34Oj0ZkSnlWdGIWzSiEBP1MUY81nC3nAsNoWqbYMS2F/EskGzwSQj7mCKNznUCbmpB272AvSMwejm3Nw== "@lit/reactive-element@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-1.0.1.tgz#853cacd4d78d79059f33f66f8e7b0e5c34bee294" integrity sha512-nSD5AA2AZkKuXuvGs8IK7K5ZczLAogfDd26zT9l6S7WzvqALdVWcW5vMUiTnZyj5SPcNwNNANj0koeV1ieqTFQ== -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - "@nodelib/fs.stat" "2.0.4" + "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: - "@nodelib/fs.scandir" "2.1.4" + "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@ruby2js/webpack-loader@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@ruby2js/webpack-loader/-/webpack-loader-1.3.1.tgz#340c1e3d0483ad63c440e1420ddd1169e2f7306f" - integrity sha512-taDoJpYBoctjp71/3z5hornm1yMp6n+43q6mdmr6iYk7zKDx1nhWXli4oBKsnN+Ti4yZRxbb5xshTvrFbsFFsg== - dependencies: - loader-utils "^2.0.0" - -"@swup/body-class-plugin@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@swup/body-class-plugin/-/body-class-plugin-1.0.2.tgz#40bffaf73e950ee5149267da669457e18fd1c957" - integrity sha512-fzK/sY1QeDJje0mNgPuETRmdLOrdJZzoG96GTcTEjBATXAjDbcGvodCCRDE8eNYQMWayHD2Lks4avV9e5cvQ7A== - dependencies: - "@swup/plugin" "^1.0.0" - -"@swup/plugin@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@swup/plugin/-/plugin-1.0.1.tgz#10606322508724a5beaed6a09326d8c30c7041fa" - integrity sha512-QrTGn1DLx+50CNsk6oGzUFnyNyLkDK6iLb032qKImmAXS+0Dd1cwa8cSGvJ+I27J4qR8y6oJNurgHIEc6ZCTrg== - -"@swup/scroll-plugin@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@swup/scroll-plugin/-/scroll-plugin-1.0.6.tgz#9a0b28a7f47750c6d5e69e988e42da31264e385e" - integrity sha512-uUzgbFYdkLIKCk0DiIrkQwYQYkI2lh4NwJlY28nOhmgivgyYRCRgGHXSHyvJEJwDDVSW7w48myq5b1g9HrVeEg== - dependencies: - "@swup/plugin" "^1.0.0" - scrl "^1.0.0" - -"@swup/slide-theme@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@swup/slide-theme/-/slide-theme-1.0.5.tgz#743aab844be68c089e0c9b49b906b2a4c2495738" - integrity sha512-0xxqtURSMDScjLMRdNjtxzo8NGCPcmp6VXrQcxIQzQDSAvwNnP8Zw871C+FSL1EMe8OhAzWAP3E3x9vzH+iLHg== - dependencies: - "@swup/theme" "^1.0.6" - -"@swup/theme@^1.0.6": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@swup/theme/-/theme-1.0.7.tgz#e276fa769af0d800a8df16cbaf71efb665bee297" - integrity sha512-OINEaf34fYs90l7/YUUKfOf+paY7/FDhOBLwYxrD0w1OjBiItZpw3N+ATA/QklJwmoUu3KkDFOaQG0zT4KxmmA== +"@popperjs/core@^2.7.0": + version "2.10.2" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.10.2.tgz#0798c03351f0dea1a5a4cabddf26a55a7cbee590" + integrity sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ== -"@types/eslint-scope@^3.7.0": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e" - integrity sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g== +"@ruby2js/esbuild-plugin@^0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@ruby2js/esbuild-plugin/-/esbuild-plugin-0.0.2.tgz#ce0a42ad59dff4e80e7bddac55c93427a6d25a96" + integrity sha512-gcqCBel1h7o+tJWPPL6wI4kQbBfi/BdrLmTnM+ok4dPHde+0Bb5rj0gab6S+RoXfIqXg+JoNuV8VCTNhv1+bzQ== dependencies: - "@types/eslint" "*" - "@types/estree" "*" + "@ruby2js/ruby2js" ">0.0.1" + convert-source-map "^1.8.0" -"@types/eslint@*": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.0.tgz#7e41f2481d301c68e14f483fe10b017753ce8d5a" - integrity sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "0.0.50" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" - integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== - -"@types/estree@^0.0.47": - version "0.0.47" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" - integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== +"@ruby2js/ruby2js@>0.0.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@ruby2js/ruby2js/-/ruby2js-0.2.1.tgz#0b3036e88305e1c671eb00b65006bc04e52e1a4d" + integrity sha512-WYMhAgY2m74xbMa6tHNSUU+uCS3EA4GDZfbhEafnYtJyMsxGszpKqkrjB+9hf6FePQoMX+x4jfXM73AUgkFg7A== -"@types/json-schema@*": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" - integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== +"@shoelace-style/animations@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@shoelace-style/animations/-/animations-1.1.0.tgz#17539abafd6dcbf2a79e089e1593175e9f7835b5" + integrity sha512-Be+cahtZyI2dPKRm8EZSx3YJQ+jLvEcn3xzRP7tM4tqBnvd/eW/64Xh0iOf0t2w5P8iJKfdBbpVNE9naCaOf2g== -"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" - integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== +"@shoelace-style/localize@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@shoelace-style/localize/-/localize-2.1.3.tgz#20c8d8d9ac6259764b2a502cdcde39304b594543" + integrity sha512-AY3uF1Dzg3sBK4nKxvZ2KAjsdFxhLfHVWUpXXjIPaR+rPp8fxBWoNVvnLiROOV/cLg/zdLcU+Nn/xJdqcbEuDw== + +"@shoelace-style/shoelace@^2.0.0-beta.62": + version "2.0.0-beta.62" + resolved "https://registry.yarnpkg.com/@shoelace-style/shoelace/-/shoelace-2.0.0-beta.62.tgz#83491da0c645cc1374dbc38e88512b95fa3d5b39" + integrity sha512-RT8GF6IBnuznupHme5IJYWKP8v5DjC2swRbkouubw6hJLCLrIWOpQJPzwwkOiSdS7AOWKGf/SIWRdYDpNWydUA== + dependencies: + "@lit-labs/react" "^1.0.1" + "@popperjs/core" "^2.7.0" + "@shoelace-style/animations" "^1.1.0" + "@shoelace-style/localize" "^2.1.3" + color "4.1" + lit "^2.0.2" + qr-creator "^1.0.0" "@types/minimist@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" - integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== - -"@types/node@*": - version "16.3.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.3.tgz#0c30adff37bbbc7a50eb9b58fae2a504d0d88038" - integrity sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ== - -"@types/node@^14.11.10": - version "14.14.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.21.tgz#d934aacc22424fe9622ebf6857370c052eae464e" - integrity sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A== + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/parse-json@^4.0.0": version "4.0.0" @@ -185,189 +153,14 @@ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== -"@webassemblyjs/ast@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" - integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - -"@webassemblyjs/floating-point-hex-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" - integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== - -"@webassemblyjs/helper-api-error@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" - integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== - -"@webassemblyjs/helper-buffer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" - integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== - -"@webassemblyjs/helper-numbers@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" - integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" - integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== - -"@webassemblyjs/helper-wasm-section@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" - integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - -"@webassemblyjs/ieee754@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" - integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" - integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" - integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== - -"@webassemblyjs/wasm-edit@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" - integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/helper-wasm-section" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-opt" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - "@webassemblyjs/wast-printer" "1.11.0" - -"@webassemblyjs/wasm-gen@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" - integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wasm-opt@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" - integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - -"@webassemblyjs/wasm-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" - integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wast-printer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" - integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.4.tgz#f03ce6311c0883a83d04569e2c03c6238316d2aa" - integrity sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ== - -"@webpack-cli/info@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.3.0.tgz#9d78a31101a960997a4acd41ffd9b9300627fe2b" - integrity sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.5.1.tgz#b5fde2f0f79c1e120307c415a4c1d5eb15a6f278" - integrity sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -acorn@^8.2.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" - integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -animated-scroll-to@^2.0.5: - version "2.0.12" - resolved "https://registry.yarnpkg.com/animated-scroll-to/-/animated-scroll-to-2.0.12.tgz#f2197b3cfc644b932678b7a0209aadf68dffe478" - integrity sha512-08TlNWa0Os38ShzScfrlV7c4w3QCZWUG+jhrx2ojMmI8apR8o3C1RwLxEaSKyu8RmcJvU89z3HcKObbAdHMHGQ== - dependencies: - "@types/node" "^14.11.10" - ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: - type-fest "^0.11.0" + type-fest "^0.21.3" -ansi-regex@^5.0.0: +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -386,18 +179,17 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" + sprintf-js "~1.0.2" array-back@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.1.tgz#9b80312935a52062e1a233a9c7abeb5481b30e90" - integrity sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg== + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== array-union@^2.1.0: version "2.1.0" @@ -409,20 +201,36 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +autoprefixer@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.0.tgz#c3577eb32a1079a440ec253e404eaf1eb21388c8" + integrity sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA== + dependencies: + browserslist "^4.17.5" + caniuse-lite "^1.0.30001272" + fraction.js "^4.1.1" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.1.0" + balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" brace-expansion@^1.1.7: version "1.1.11" @@ -432,7 +240,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -448,21 +256,24 @@ bridgetown-quick-search@1.1.3: lit "^2.0.0" lunr "^2.3.8" -browserslist@^4.14.5: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== +browserslist@^4.17.5: + version "4.18.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f" + integrity sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ== dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" + caniuse-lite "^1.0.30001280" + electron-to-chromium "^1.3.896" escalade "^3.1.1" - node-releases "^1.1.71" + node-releases "^2.0.1" + picocolors "^1.0.0" -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" bulk-require@1.0.1: version "1.0.1" @@ -471,11 +282,6 @@ bulk-require@1.0.1: dependencies: glob "^7.1.1" -bulma@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.8.2.tgz#5d928f16ed4a84549c2873f95c92c38c69c631a7" - integrity sha512-vMM/ijYSxX+Sm+nD7Lmc1UgWDy2JcL2nTKqwgEqXuOMU+IGALbXd5MLt/BcjBAPLIx36TtzhzBcSnOP974gcqA== - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -490,30 +296,25 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== +caniuse-lite@^1.0.30001272, caniuse-lite@^1.0.30001280: + version "1.0.30001286" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz#3e9debad420419618cfdf52dc9b6572b28a8fff6" + integrity sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ== -caniuse-lite@^1.0.30001219: - version "1.0.30001230" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71" - integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ== - -chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== +chalk@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^2.0.0, chalk@^2.4.2: +chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -522,33 +323,19 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -"chokidar@>=3.0.0 <4.0.0": - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -556,25 +343,16 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" - integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== +cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -599,73 +377,71 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@~1.1.4: +color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +color-string@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa" + integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" -commander@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +color@4.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/color/-/color-4.1.0.tgz#9502e6a2dcacb26adf4c60910a27628d010b3de3" + integrity sha512-o2rkkxyLGgYoeUy1OodXpbPAQNmlNBrirQ8ODO8QutzDiDMNdezSOZLNnusQ6pUpCQJUsaJIo9DZJKqa2HgH7A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -cosmiconfig@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== +convert-source-map@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cosmiconfig@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== dependencies: "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" + import-fresh "^3.2.1" parse-json "^5.0.0" path-type "^4.0.0" - yaml "^1.7.2" + yaml "^1.10.0" -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" +css-blank-pseudo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-2.0.0.tgz#10667f9c5f91e4fbde76c4efac55e8eaa6ed9967" + integrity sha512-n7fxEOyuvAVPLPb9kL4XTIK/gnp2fKQ7KFQ+9lj60W9pDn/jTr5LjS/kHHm+rES/YJ3m0S6+uJgYSuAJg9zOyA== -css-loader@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" - integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== +css-has-pseudo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-2.0.0.tgz#43ae03a990cf3d9e7356837c6b500e04037606b5" + integrity sha512-URYSGI0ggED1W1/xOAH0Zn1bf+YL6tYh1PQzAPlWddEAyyO37mPqMbwCzSjTTNmeCR8BMNXSFLaT5xb6MERdAA== dependencies: - camelcase "^6.0.0" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^2.0.0" - postcss "^7.0.32" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.3" - postcss-modules-scope "^2.2.0" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^2.7.1" - semver "^7.3.2" + postcss-selector-parser "^6" + +css-prefers-color-scheme@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-5.0.0.tgz#a89bc1abfe946e77a1a1e12dbc25a1439705933f" + integrity sha512-XpzVrdwbppHm+Nnrzcb/hQb8eq1aKv4U8Oh59LsLfTsbIZZ6Fvn9razb66ihH2aTJ0VhO9n9sVm8piyKXJAZMA== + +cssdb@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-5.0.0.tgz#96db23e70dda3d03a32346de611f0e79fee68b7f" + integrity sha512-Q7982SynYCtcLUBCPgUPFy2TZmDiFyimpdln8K2v4w2c07W4rXL7q5F1ksVAqOAQfxKyyUGCKSsioezKT5bU1Q== cssesc@^3.0.0: version "3.0.0" @@ -697,11 +473,6 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -delegate@3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.1.3.tgz#9a8251a777d7025faa55737bc3b071742127a9fd" - integrity sha1-moJRp3fXAl+qVXN7w7BxdCEnqf0= - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -710,74 +481,49 @@ dir-glob@^3.0.1: path-type "^4.0.0" dom-serializer@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" - integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== dependencies: domelementtype "^2.0.1" - domhandler "^4.0.0" + domhandler "^4.2.0" entities "^2.0.0" -domelementtype@^2.0.1, domelementtype@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" - integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== - -domhandler@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== - dependencies: - domelementtype "^2.0.1" +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== -domhandler@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e" - integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA== +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" + integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== dependencies: - domelementtype "^2.1.0" + domelementtype "^2.2.0" -domutils@^2.0.0: - version "2.4.4" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3" - integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA== +domutils@^2.5.2: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^4.0.0" + domelementtype "^2.2.0" + domhandler "^4.2.0" -electron-to-chromium@^1.3.723: - version "1.3.739" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz#f07756aa92cabd5a6eec6f491525a64fe62f98b9" - integrity sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A== +electron-to-chromium@^1.3.896: + version "1.4.16" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.16.tgz#38ddecc616385e6f101359d1b978c802664157d2" + integrity sha512-BQb7FgYwnu6haWLU63/CdVW+9xhmHls3RCQUFiV4lvw3wimEHTVcUk2hkuZo76QhR8nnDdfZE7evJIZqijwPdA== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -enhanced-resolve@^5.8.0: - version "5.8.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" - integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - entities@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" - integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== - -envinfo@^7.7.3: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== error-ex@^1.3.1: version "1.3.2" @@ -786,131 +532,113 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-module-lexer@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" - integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA== - -esbuild-android-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz#3fc3ff0bab76fe35dd237476b5d2b32bb20a3d44" - integrity sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg== - -esbuild-darwin-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz#8e9169c16baf444eacec60d09b24d11b255a8e72" - integrity sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ== - -esbuild-darwin-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz#1b07f893b632114f805e188ddfca41b2b778229a" - integrity sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ== - -esbuild-freebsd-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz#0b8b7eca1690c8ec94c75680c38c07269c1f4a85" - integrity sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA== - -esbuild-freebsd-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz#2e1a6c696bfdcd20a99578b76350b41db1934e52" - integrity sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ== - -esbuild-linux-32@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz#6fd39f36fc66dd45b6b5f515728c7bbebc342a69" - integrity sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g== - -esbuild-linux-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz#9cb8e4bcd7574e67946e4ee5f1f1e12386bb6dd3" - integrity sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA== - -esbuild-linux-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz#3891aa3704ec579a1b92d2a586122e5b6a2bfba1" - integrity sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA== - -esbuild-linux-arm@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz#8a00e99e6a0c6c9a6b7f334841364d8a2b4aecfe" - integrity sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA== - -esbuild-linux-mips64le@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz#36b07cc47c3d21e48db3bb1f4d9ef8f46aead4f7" - integrity sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg== - -esbuild-linux-ppc64le@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz#f7e6bba40b9a11eb9dcae5b01550ea04670edad2" - integrity sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ== - -esbuild-loader@^2.16.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-2.16.0.tgz#a44a57a77ed2810d6b278579271f77d739aa7bc9" - integrity sha512-LCJEwkf+nMJbNmVYNgg/0PaIZDdr5OcHw1qbWAZLkrmBRX+KwHY/yAS6ia98UBtwzk/WhsftUBNB6tfPHgFIxw== - dependencies: - esbuild "^0.13.4" - joycon "^3.0.1" - json5 "^2.2.0" - loader-utils "^2.0.0" - tapable "^2.2.0" - type-fest "^1.4.0" - webpack-sources "^2.2.0" - -esbuild-netbsd-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz#a2fedc549c2b629d580a732d840712b08d440038" - integrity sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w== - -esbuild-openbsd-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz#b22c0e5806d3a1fbf0325872037f885306b05cd7" - integrity sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g== - -esbuild-sunos-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz#d0b6454a88375ee8d3964daeff55c85c91c7cef4" - integrity sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw== - -esbuild-windows-32@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz#c96d0b9bbb52f3303322582ef8e4847c5ad375a7" - integrity sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw== - -esbuild-windows-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz#1f79cb9b1e1bb02fb25cd414cb90d4ea2892c294" - integrity sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ== - -esbuild-windows-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz#482173070810df22a752c686509c370c3be3b3c3" - integrity sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA== - -esbuild@^0.13.15, esbuild@^0.13.4: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.15.tgz#db56a88166ee373f87dbb2d8798ff449e0450cdf" - integrity sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw== +esbuild-android-arm64@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz#256b7cf2f9d382a2a92a4ff4e13187587c9b7c6a" + integrity sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw== + +esbuild-darwin-64@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz#891a59ce6bc3aded0265f982469b3eb9571b92f8" + integrity sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA== + +esbuild-darwin-arm64@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz#ab834fffa9c612b2901ca1e77e4695d4d8aa63a2" + integrity sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A== + +esbuild-freebsd-64@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz#f7fc87a83f02de27d5a48472571efa1a432ae86d" + integrity sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ== + +esbuild-freebsd-arm64@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz#bc8758420431106751f3180293cac0b5bc4ce2ee" + integrity sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ== + +esbuild-linux-32@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz#0cc2dcd816d6d66e255bc7aeac139b1d04246812" + integrity sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ== + +esbuild-linux-64@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz#c790f739aa75b15c153609ea3457153fbe4db93d" + integrity sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg== + +esbuild-linux-arm64@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz#96858a1f89ad30274dec780d0e3dd8b5691c6b0c" + integrity sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww== + +esbuild-linux-arm@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz#03e193225afa9b1215d2ec6efe8edf0c03eeed6f" + integrity sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ== + +esbuild-linux-mips64le@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz#972f218d2cb5125237376d40ad60a6e5356a782c" + integrity sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ== + +esbuild-linux-ppc64le@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz#20b71622ac09142b0e523f633af0829def7fed6b" + integrity sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA== + +esbuild-netbsd-64@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz#dbd6a25117902ef67aa11d8779dd9c6bca7fbe82" + integrity sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw== + +esbuild-openbsd-64@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz#3c5f199eed459b2f88865548394c0b77383d9ca4" + integrity sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q== + +esbuild-sunos-64@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz#900a681db6b76c6a7f60fc28d2bfe5b11698641c" + integrity sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow== + +esbuild-windows-32@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz#61e0ba5bd95b277a55d2b997ac4c04dfe2559220" + integrity sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ== + +esbuild-windows-64@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz#6ab59ef721ff75c682a1c8ae0570dabb637abddb" + integrity sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg== + +esbuild-windows-arm64@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz#aca2a4f83d2f0d1592ad4be832ed0045fc888cda" + integrity sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA== + +esbuild@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.2.tgz#9c1e1a652549cc33e44885eea42ea2cc6267edc2" + integrity sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg== optionalDependencies: - esbuild-android-arm64 "0.13.15" - esbuild-darwin-64 "0.13.15" - esbuild-darwin-arm64 "0.13.15" - esbuild-freebsd-64 "0.13.15" - esbuild-freebsd-arm64 "0.13.15" - esbuild-linux-32 "0.13.15" - esbuild-linux-64 "0.13.15" - esbuild-linux-arm "0.13.15" - esbuild-linux-arm64 "0.13.15" - esbuild-linux-mips64le "0.13.15" - esbuild-linux-ppc64le "0.13.15" - esbuild-netbsd-64 "0.13.15" - esbuild-openbsd-64 "0.13.15" - esbuild-sunos-64 "0.13.15" - esbuild-windows-32 "0.13.15" - esbuild-windows-64 "0.13.15" - esbuild-windows-arm64 "0.13.15" + esbuild-android-arm64 "0.14.2" + esbuild-darwin-64 "0.14.2" + esbuild-darwin-arm64 "0.14.2" + esbuild-freebsd-64 "0.14.2" + esbuild-freebsd-arm64 "0.14.2" + esbuild-linux-32 "0.14.2" + esbuild-linux-64 "0.14.2" + esbuild-linux-arm "0.14.2" + esbuild-linux-arm64 "0.14.2" + esbuild-linux-mips64le "0.14.2" + esbuild-linux-ppc64le "0.14.2" + esbuild-netbsd-64 "0.14.2" + esbuild-openbsd-64 "0.14.2" + esbuild-sunos-64 "0.14.2" + esbuild-windows-32 "0.14.2" + esbuild-windows-64 "0.14.2" + esbuild-windows-arm64 "0.14.2" escalade@^3.1.1: version "3.1.1" @@ -922,50 +650,10 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== external-editor@^3.0.3: version "3.1.0" @@ -976,37 +664,21 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== +fast-glob@^3.2.9: + version "3.2.10" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.10.tgz#2734f83baa7f43b7fd41e13bc34438f4ffe284ee" + integrity sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" + glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + micromatch "^4.0.4" fastq@^1.6.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" - integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" @@ -1017,14 +689,6 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1032,7 +696,7 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-up@^4.0.0, find-up@^4.1.0: +find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -1040,47 +704,32 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -fork-awesome@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/fork-awesome/-/fork-awesome-1.1.7.tgz#1427da1cac3d1713046ee88427e5fcecb9501d21" - integrity sha512-IHI7XCSXrKfUIWslse8c/PaaVDT1oBaYge+ju40ihL2ooiQeBpTr4wvIXhgTd2NuhntlvX+M5jYHAPTzNlmv0g== +fraction.js@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.2.tgz#13e420a92422b6cf244dff8690ed89401029fbe8" + integrity sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA== fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@^5.1.0, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.0.0, glob@^7.1.1: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^7.1.1, glob@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1089,28 +738,34 @@ glob@^7.0.0, glob@^7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -globby@11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" - integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globby@^11.0.2: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.1.2: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - hard-rejection@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" @@ -1138,21 +793,28 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -htmlparser2@^4.1.0: +hosted-git-info@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hotkeys-js@^3.8.7: + version "3.8.7" + resolved "https://registry.yarnpkg.com/hotkeys-js/-/hotkeys-js-3.8.7.tgz#c16cab978b53d7242f860ca3932e976b92399981" + integrity sha512-ckAx3EkUr5XjDwjEHDorHxRO2Kb7z6Z2Sxul4MbBkN8Nho7XDslQsgMJT+CiJ5Z4TgRxxvKHEpuLE3imzqy4Lg== + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" + domhandler "^4.0.0" + domutils "^2.5.2" entities "^2.0.0" -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -1160,19 +822,24 @@ iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ignore@^5.1.4, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" + integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== + dependencies: + import-from "^3.0.0" -import-fresh@^3.1.0: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -1180,24 +847,18 @@ import-fresh@^3.1.0: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== +import-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" + integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" + resolve-from "^5.0.0" indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1206,58 +867,57 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inquirer@^7.0.4: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inquirer@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.0.tgz#f44f008dd344bbfc4b30031f45d984e034a3ac3a" + integrity sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ== dependencies: ansi-escapes "^4.2.1" - chalk "^4.1.0" + chalk "^4.1.1" cli-cursor "^3.1.0" cli-width "^3.0.0" external-editor "^3.0.3" figures "^3.0.0" - lodash "^4.17.19" + lodash "^4.17.21" mute-stream "0.0.8" + ora "^5.4.1" run-async "^2.4.0" - rxjs "^6.6.0" + rxjs "^7.2.0" string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== -is-core-module@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== +is-core-module@^2.2.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" -is-core-module@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" - integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== +is-core-module@^2.5.0, is-core-module@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== dependencies: has "^1.0.3" @@ -1271,10 +931,10 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -1293,83 +953,39 @@ is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== +is-url-superb@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-4.0.0.tgz#b54d1d2499bb16792748ac967aa3ecb41a33a8c2" + integrity sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -jest-worker@^27.0.2: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.6.tgz#a5fdb1e14ad34eb228cfe162d9f729cdbfa28aed" - integrity sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -joycon@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.0.1.tgz#9074c9b08ccf37a6726ff74a18485f85efcaddaf" - integrity sha512-SJcJNBg32dGgxhPtM0wQqxqV0ax9k/9TaUskGDSJkSFSQOEWWvQ3zzWdGQRIUry2j1zA5+ReH13t0Mf3StuVZA== - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +js-yaml@^3.14.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - -json5@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - kebabcase@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/kebabcase/-/kebabcase-1.0.1.tgz#422a08b9bce6b8512bb15d942fd11d967914a74d" @@ -1380,10 +996,15 @@ kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +lilconfig@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" + integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== + lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lit-element@^3.0.0: version "3.0.1" @@ -1400,7 +1021,7 @@ lit-html@^2.0.0: dependencies: "@types/trusted-types" "^2.0.2" -lit@^2.0.0: +lit@^2.0.0, lit@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lit/-/lit-2.0.2.tgz#5e6f422924e0732258629fb379556b6d23f7179c" integrity sha512-hKA/1YaSB+P+DvKWuR2q1Xzy/iayhNrJ3aveD0OQ9CKn6wUjsdnF/7LavDOJsKP/K5jzW/kXsuduPgRvTFrFJw== @@ -1409,29 +1030,6 @@ lit@^2.0.0: lit-element "^3.0.0" lit-html "^2.0.0" -loader-runner@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" - integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== - -loader-utils@^1.2.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -1444,17 +1042,18 @@ lodash.pull@4.1.0: resolved "https://registry.yarnpkg.com/lodash.pull/-/lodash.pull-4.1.0.tgz#60060cc6bd625b4d4567ec27dc45cd1be9eec012" integrity sha1-YAYMxr1iW01FZ+wn3EXNG+nuwBI= -lodash@^4.17.19: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" - integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^4.0.0" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" lru-cache@^6.0.0: version "6.0.0" @@ -1474,56 +1073,40 @@ map-obj@^1.0.0: integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= map-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" - integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== -meow@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306" - integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA== +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.2.2" + decamelize "^1.2.0" decamelize-keys "^1.1.0" hard-rejection "^2.1.0" minimist-options "4.1.0" - normalize-package-data "^2.5.0" + normalize-package-data "^3.0.0" read-pkg-up "^7.0.1" redent "^3.0.0" trim-newlines "^3.0.0" - type-fest "^0.13.1" - yargs-parser "^18.1.3" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + type-fest "^0.18.0" + yargs-parser "^20.2.3" -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: braces "^3.0.1" - picomatch "^2.0.5" - -mime-db@1.48.0: - version "1.48.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== - -mime-types@^2.1.27: - version "2.1.31" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== - dependencies: - mime-db "1.48.0" + picomatch "^2.2.3" mimic-fn@^2.1.0: version "2.1.0" @@ -1535,15 +1118,6 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@^1.3.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.6.tgz#02e2b477aa7ab2579c7ea2854a875897a8b8dad0" - integrity sha512-t86rLnySRQgN2+58gAIARTEtnClLNZoC99shNrvQ960V/wB9n50AUKJyqly76/s4fT0zwaLFIDFZAW7aK25pvg== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - webpack-sources "^1.1.0" - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -1560,30 +1134,20 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nanoid@^3.1.20: - version "3.1.20" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" - integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== +nanoid@^3.1.30: + version "3.1.30" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" + integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== -neo-async@^2.6.1, neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -node-releases@^1.1.71: - version "1.1.72" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" - integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== normalize-package-data@^2.5.0: version "2.5.0" @@ -1595,17 +1159,20 @@ normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: - path-key "^3.0.0" + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= once@^1.3.0: version "1.4.0" @@ -1614,29 +1181,25 @@ once@^1.3.0: dependencies: wrappy "1" -onetime@^5.1.0, onetime@^5.1.2: +onetime@^5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -opencollective-postinstall@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" - integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== - -ora@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.1.0.tgz#b188cf8cd2d4d9b13fd25383bc3e5cba352c94f8" - integrity sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w== +ora@^5.3.0, ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: + bl "^4.1.0" chalk "^4.1.0" cli-cursor "^3.1.0" - cli-spinners "^2.4.0" + cli-spinners "^2.5.0" is-interactive "^1.0.0" - log-symbols "^4.0.0" - mute-stream "0.0.8" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" strip-ansi "^6.0.0" wcwidth "^1.0.1" @@ -1652,13 +1215,6 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -1679,9 +1235,9 @@ parent-module@^1.0.0: callsites "^3.0.0" parse-json@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" - integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" @@ -1698,12 +1254,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -1713,110 +1264,315 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== +picomatch@^2.2.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +postcss-attribute-case-insensitive@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz#39cbf6babf3ded1e4abf37d09d6eda21c644105c" + integrity sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ== dependencies: - find-up "^4.0.0" + postcss-selector-parser "^6.0.2" -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== +postcss-color-functional-notation@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.0.1.tgz#2fd769959e7fe658b4c0e7d40b0ab245fc8664f1" + integrity sha512-qxD/7Q2rdmqJLSYxlJFJM9gVdyVLTBVrOUc+B6+KbOe4t2G2KnoI3HdimdK4PerGLqAqKnEVGgal7YKImm0g+w== dependencies: - postcss "^7.0.5" + postcss-values-parser "6.0.1" -postcss-modules-local-by-default@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== +postcss-color-hex-alpha@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.0.tgz#84bfd985a93b0a18e047ebcb5fd463e2cae5e7a6" + integrity sha512-Z0xiE0j+hbefUj0LWOMkzmTIS7k+dqJKzLwoKww0KJhju/sWXr+84Yk7rmvFoML/4LjGpJgefZvDwExrsWfHZw== dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" + postcss-values-parser "^6.0.0" -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== +postcss-color-rebeccapurple@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.0.tgz#980fbd98eb68ebbb38be02a82c7554e043c8fdf4" + integrity sha512-+Ogw3SA0ESjjO87S8Dn+aAEHK6hFAWAVbTVnyXnmbV6Xh0TKi0vXpzhlKG/yrxujxtlgQcMQNQjg75uWWv28xA== + dependencies: + postcss-values-parser "^6" + +postcss-custom-media@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz#1be6aff8be7dc9bf1fe014bde3b71b92bb4552f1" + integrity sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g== + +postcss-custom-properties@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.0.0.tgz#fd01ec9bd1462336ea8af7ba3c1a2c47c203031e" + integrity sha512-eAyX3rMjZKxdne6tWKjkWbNWfw6bbv4xTsrjNJ7C3uGDODrzbQXR+ueshRkw7Lhlhc3qyTmYH/sFfD0AbhgdSQ== + dependencies: + postcss-values-parser "^6" + +postcss-custom-selectors@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz#022839e41fbf71c47ae6e316cb0e6213012df5ef" + integrity sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-dir-pseudo-class@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.0.tgz#7026a070a4849072a232eaf0cdd960de3013658d" + integrity sha512-TC4eB5ZnLRSV1PLsAPualEjxFysU9IVEBx8h+Md2qzo8iWdNqwWCckx5fTWfe6dJxUpB0TWEpWEFhZ/YHvjSCA== dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" + postcss-selector-parser "6.0.6" -postcss-modules-values@^3.0.0: +postcss-double-position-gradients@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.0.1.tgz#3c21ad52b6f13d81caf2563b0010a2c5872272af" + integrity sha512-L18N4Y1gpKQPEnZ6JOxO3H5gswZzTNR+ZqruZG7cOtOF/GR6J1YBRKn5hdTn3Vs4Y9XuDqaBD8vIXFIEft9Jqw== + dependencies: + postcss-values-parser "6.0.1" + +postcss-env-function@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.2.tgz#5509d008ff0f069fa18bd2eace4f3fdb18150c28" + integrity sha512-VXKv0Vskq7olS3Q2zj38G4au4PkW+YWBRgng2Czx0pP9PyqU6uzjS6uVU1VkJN8i0OTPM7g82YFUdiz/7pEvpg== + dependencies: + postcss-values-parser "6.0.1" + +postcss-flexbugs-fixes@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d" + integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== + +postcss-focus-visible@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.1.tgz#b12a859616eca7152976fec24ef337ab29bbc405" + integrity sha512-UddLlBmJ78Nu7OrKME70EKxCPBdxTx7pKIyD3GDNRM8Tnq19zmscT9QzsvR8gygz0i0nNUjMtSz4N3AEWZ5R/Q== + +postcss-focus-within@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.1.tgz#615659122325d86e00bc8ed84ab6129d0b3a0f62" + integrity sha512-50v1AZVlFSVzLTNdBQG521Aa54VABf/X1RkhR8Fm/9dDQby0W0XdwOnuo8Juvf0ZZXbKkxyTkyyQD0QaNVZVGg== + +postcss-font-variant@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== + +postcss-gap-properties@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.0.tgz#8941c400df902247603fd915c7dc81e1d7686b15" + integrity sha512-QJOkz1epC/iCuOdhQPm3n9T+F25+P+MYJEEcs5xz/Q+020mc9c6ZRGJkzPJd8FS9hFmT9eEKFEx9PEDl+lH5og== + +postcss-image-set-function@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.2.tgz#95b64db01b8812fcbece3bb36a3f2b8133bf7c91" + integrity sha512-NbTOc3xOq/YjIJS8/UVnhI16NxRuCiEWjem0eYt87sKvjdpk00niQ9oVo3eSR+kmMKWIO979x3j5i1GYJNxe1A== + dependencies: + postcss-values-parser "6.0.1" + +postcss-import@^14.0.2: + version "14.0.2" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.0.2.tgz#60eff77e6be92e7b67fe469ec797d9424cae1aa1" + integrity sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-initial@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" + integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== + +postcss-lab-function@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.0.1.tgz#b6a1fb1032ddd7f4f7198ca78ec84c9b5bc7d80e" + integrity sha512-8F2keZUlUiX/tznbCZ5y3Bmx6pnc19kvL4oq+x+uoK0ZYQjUWmHDdVHBG6iMq2T0Fteu+AgGAo94UcIsL4ay2w== dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" + "@csstools/convert-colors" "2.0.0" + postcss-values-parser "6.0.1" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" - integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== +postcss-load-config@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.0.tgz#d39c47091c4aec37f50272373a6a648ef5e97829" + integrity sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g== + dependencies: + import-cwd "^3.0.0" + lilconfig "^2.0.3" + yaml "^1.10.2" + +postcss-logical@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.0.tgz#f646ef6a3562890e1123a32e695d14cc271afb21" + integrity sha512-fWEWMn/xf6F9SMzAD7OS0GTm8Qh1BlBmEbVT/YZGYhwipQEwOpO7YOOu+qnzLksDg9JjLRj5tLmeN8OW8+ogIA== + +postcss-media-minmax@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" + integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== + +postcss-nesting@^10.0.2: + version "10.0.2" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.0.2.tgz#0cf9e81712fe7b6c3005e7d884cce2cb0a06326e" + integrity sha512-FdecapAKIe+kp6uLNW7icw1g1B2HRhAAfsNv/TPzopeM08gpUbnBpqKSVqxrCqLDwzQG854ZJn5I0BiJ35WvmA== + dependencies: + postcss-selector-parser "6.0.6" + +postcss-overflow-shorthand@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.0.tgz#f57631672333b302ffdcfc0735b8b7d0244c2a25" + integrity sha512-4fTapLT68wUoIr4m3Z0sKn1NbXX0lJYvj4aDA2++KpNx8wMSVf55UuLPz0nSjXa7dV1p0xQHlJ0iFJRNrSY2mw== + +postcss-page-break@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== + +postcss-place@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.1.tgz#9fbd18b3d1d438d313b2a29f5a50424c8ebca28d" + integrity sha512-X+vHHzqZjI4JbSoj3uYpL6rGRUHE1O9F8g+jBFn5U94U0t6GjJuL/xSN7tU6Pnm9tpfXioHfxwt9E8+JrCB9OQ== + dependencies: + postcss-values-parser "6.0.1" + +postcss-preset-env@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.0.1.tgz#7f1fc5ac38e60a8e5ff9a920396d936a830e6120" + integrity sha512-oB7IJGwLBEwnao823mS2b9hqbp5Brm0EZKWRVROayjGwyPQVjY9gZpPZk/ItFakdx7GAPgv3ya+9R3KrUqCwYA== + dependencies: + autoprefixer "^10.4.0" + browserslist "^4.17.5" + caniuse-lite "^1.0.30001272" + css-blank-pseudo "^2.0.0" + css-has-pseudo "^2.0.0" + css-prefers-color-scheme "^5.0.0" + cssdb "^5.0.0" + postcss "^8.3" + postcss-attribute-case-insensitive "^5.0.0" + postcss-color-functional-notation "^4.0.1" + postcss-color-hex-alpha "^8.0.0" + postcss-color-rebeccapurple "^7.0.0" + postcss-custom-media "^8.0.0" + postcss-custom-properties "^12.0.0" + postcss-custom-selectors "^6.0.0" + postcss-dir-pseudo-class "^6.0.0" + postcss-double-position-gradients "^3.0.1" + postcss-env-function "^4.0.2" + postcss-focus-visible "^6.0.1" + postcss-focus-within "^5.0.1" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^3.0.0" + postcss-image-set-function "^4.0.2" + postcss-initial "^4.0.1" + postcss-lab-function "^4.0.1" + postcss-logical "^5.0.0" + postcss-media-minmax "^5.0.0" + postcss-nesting "^10.0.2" + postcss-overflow-shorthand "^3.0.0" + postcss-page-break "^3.0.4" + postcss-place "^7.0.1" + postcss-pseudo-class-any-link "^7.0.0" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^5.0.0" + +postcss-pseudo-class-any-link@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.0.0.tgz#b06483c8a241cee1e420f9ebd08680d4f95b2b20" + integrity sha512-Q4KjHlyBo91nvW+wTDZHGYcjtlSSkYwxweMuq1g8+dx1S8qAnedItvHLnbdAAdqJCZP1is5dLqiI8TvfJ+cjVQ== + dependencies: + postcss-selector-parser "^6" + +postcss-replace-overflow-wrap@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== + +postcss-selector-not@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz#ac5fc506f7565dd872f82f5314c0f81a05630dc7" + integrity sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ== + dependencies: + balanced-match "^1.0.0" + +postcss-selector-parser@6.0.6, postcss-selector-parser@^6.0.2: + version "6.0.6" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" + integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== dependencies: cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" util-deprecate "^1.0.2" +postcss-selector-parser@^6, postcss-selector-parser@^6.0.4: + version "6.0.7" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.7.tgz#48404830a635113a71fd79397de8209ed05a66fc" + integrity sha512-U+b/Deoi4I/UmE6KOVPpnhS7I7AYdKbhGcat+qTQ27gycvaACvNEw11ba6RrkwVmDVRW7sigWgLj4/KbbJjeDA== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^7.0.14, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.36" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" - integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== +postcss-values-parser@6.0.1, postcss-values-parser@^6, postcss-values-parser@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-6.0.1.tgz#aeb5e4522c4aabeb1ebbb14122194b9c08069675" + integrity sha512-hH3HREaFAEsVOzUgYiwvFggUqUvoIZoXD2OjhzY2CEM7uVDaQTKP5bmqbchCBoVvywsqiGVYhwC8p2wMUzpW+Q== dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" + color-name "^1.1.4" + is-url-superb "^4.0.0" + quote-unquote "^1.0.0" -postcss@^8.2.1: - version "8.2.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.6.tgz#5d69a974543b45f87e464bc4c3e392a97d6be9fe" - integrity sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg== +postcss@^8.3, postcss@^8.4.4: + version "8.4.4" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.4.tgz#d53d4ec6a75fd62557a66bb41978bf47ff0c2869" + integrity sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q== dependencies: - colorette "^1.2.1" - nanoid "^3.1.20" - source-map "^0.6.1" + nanoid "^3.1.30" + picocolors "^1.0.0" + source-map-js "^1.0.1" -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +qr-creator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/qr-creator/-/qr-creator-1.0.0.tgz#f350a8f0b5be02bd1fc1ef133a038a06ef8bc5ef" + integrity sha512-C0cqfbS1P5hfqN4NhsYsUXePlk9BO+a45bAQ3xLYjBL3bOIFzoVEjs79Fado9u9BPBD3buHi3+vY+C8tHh4qMQ== -purgecss@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-4.0.2.tgz#7281f233c08b4f41e1c5d85c66a2d064e6d7e1b3" - integrity sha512-6J1zOEAZJX6VbfcaJHgdQf4uPhxVXvHz7dGgWYXLOI9q7QFZ5feh8NZ2+G3ysii/Sr8OyUe5yhQ5Z/xZ5gIRnQ== - dependencies: - commander "^6.0.0" - glob "^7.0.0" - postcss "^8.2.1" - postcss-selector-parser "^6.0.2" +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== +quote-unquote@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/quote-unquote/-/quote-unquote-1.0.0.tgz#67a9a77148effeaf81a4d428404a710baaac8a0b" + integrity sha1-Z6mncUjv/q+BpNQoQEpxC6qsigs= + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= dependencies: - safe-buffer "^5.1.0" + pify "^2.3.0" read-pkg-up@^7.0.1: version "7.0.1" @@ -1837,19 +1593,14 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -readdirp@~3.6.0: +readable-stream@^3.4.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: - picomatch "^2.2.1" - -rechoir@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" - integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== - dependencies: - resolve "^1.9.0" + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" redent@^3.0.0: version "3.0.0" @@ -1865,16 +1616,9 @@ reduce-flatten@^2.0.0: integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== resolve-from@^4.0.0: version "4.0.0" @@ -1886,15 +1630,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.10.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== - dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" - -resolve@^1.9.0: +resolve@^1.1.7: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -1902,6 +1638,15 @@ resolve@^1.9.0: is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^1.10.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f" + integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA== + dependencies: + is-core-module "^2.8.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -1921,18 +1666,25 @@ run-async@^2.4.0: integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" - integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" -rxjs@^6.6.0: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== +rxjs@^7.2.0: + version "7.5.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.1.tgz#af73df343cbcab37628197f43ea0c8256f54b157" + integrity sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ== dependencies: - tslib "^1.9.0" + tslib "^2.1.0" -safe-buffer@^5.1.0: +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -1942,122 +1694,44 @@ safe-buffer@^5.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-loader@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" - integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== - dependencies: - clone-deep "^4.0.1" - loader-utils "^1.2.3" - neo-async "^2.6.1" - schema-utils "^2.6.1" - semver "^6.3.0" - -sass@^1.35.2: - version "1.35.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.35.2.tgz#b732314fcdaf7ef8d0f1698698adc378043cb821" - integrity sha512-jhO5KAR+AMxCEwIH3v+4zbB2WB0z67V1X0jbapfVwQQdjHZUGUyukpnoM6+iCMfsIUC016w9OPKQ5jrNOS9uXw== - dependencies: - chokidar ">=3.0.0 <4.0.0" - -schema-utils@^2.6.1, schema-utils@^2.7.0, schema-utils@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== - dependencies: - "@types/json-schema" "^7.0.6" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -scrl@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/scrl/-/scrl-1.0.0.tgz#b225915f29d72807c48b2e116b12f14b15d14e55" - integrity sha512-nTS2W6UyxYfvOOjeXGXM1j140bm2ZUIjt0mEyGUHecFz2zU1CMYJ71dWPdlnSJR2mYOojY1R5qpo4Fi83O7tog== - "semver@2 || 3 || 4 || 5": version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.2: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== +semver@^7.3.4: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" -serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" +signal-exit@^3.0.2: + version "3.0.6" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + is-arrayish "^0.3.1" slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -source-list-map@^2.0.0, source-list-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-support@~0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" +smoothscroll-polyfill@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz#3a259131dc6930e6ca80003e1cb03b603b69abf8" + integrity sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg== -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +source-map-js@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" + integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== spdx-correct@^3.0.0: version "3.1.1" @@ -2081,30 +1755,37 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= string-width@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: - ansi-regex "^5.0.0" + safe-buffer "~5.2.0" -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" strip-indent@^3.0.0: version "3.0.0" @@ -2113,14 +1794,6 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -style-loader@^1.1.3: - version "1.3.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" - integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.7.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2128,13 +1801,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -2142,19 +1808,10 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -"swup@https://github.com/jaredcwhite/swup#fix-back-button-with-lib": - version "2.0.9" - resolved "https://github.com/jaredcwhite/swup#4436a29e5324f2978dc224a9aea34cb3578760b9" - dependencies: - delegate "3.1.3" - opencollective-postinstall "^2.0.2" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== table-layout@1.0.1: version "1.0.1" @@ -2166,32 +1823,6 @@ table-layout@1.0.1: typical "^5.2.0" wordwrapjs "^4.0.0" -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" - integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== - -terser-webpack-plugin@^5.1.1: - version "5.1.4" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz#c369cf8a47aa9922bd0d8a94fe3d3da11a7678a1" - integrity sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA== - dependencies: - jest-worker "^27.0.2" - p-limit "^3.1.0" - schema-utils "^3.0.0" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - terser "^5.7.0" - -terser@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.1.tgz#2dc7a61009b66bb638305cb2a824763b116bf784" - integrity sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.19" - through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -2216,20 +1847,20 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.6.0: version "0.6.0" @@ -2241,38 +1872,16 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -typical@^5.0.0, typical@^5.2.0: +typical@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.2: +util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -v8-compile-cache@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -2281,14 +1890,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -watchpack@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" - integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -2296,105 +1897,20 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -webpack-cli@4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.7.2.tgz#a718db600de6d3906a4357e059ae584a89f4c1a5" - integrity sha512-mEoLmnmOIZQNiRl0ebnjzQ74Hk0iKS5SiEEnpq3dRezoyR3yPaeQZCMCe+db4524pj1Pd5ghZXjT41KLzIhSLw== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.4" - "@webpack-cli/info" "^1.3.0" - "@webpack-cli/serve" "^1.5.1" - colorette "^1.2.1" - commander "^7.0.0" - execa "^5.0.0" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - v8-compile-cache "^2.2.0" - webpack-merge "^5.7.3" - -webpack-manifest-plugin@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-3.1.1.tgz#d4c57ef70e0641f754dd005cb5ba7ca5601ac9d3" - integrity sha512-r3vL8BBNVtyeNbaFwDQoOWqBd0Gp/Tbzo8Q3YGZDV+IG77gsB9VZry5XKKbfFNFHSmwW+f1z4/w2XPt6wBZJYg== - dependencies: - tapable "^2.0.0" - webpack-sources "^2.2.0" - -webpack-merge@^5.7.3: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^1.1.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-sources@^2.2.0, webpack-sources@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.0.tgz#9ed2de69b25143a4c18847586ad9eccb19278cfa" - integrity sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ== - dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" - -webpack@5.39.1: - version "5.39.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.39.1.tgz#d1e014b6d71e1aef385316ad528f21cd5b1f9784" - integrity sha512-ulOvoNCh2PvTUa+zbpRuEb1VPeQnhxpnHleMPVVCq3QqnaFogjsLyps+o42OviQFoaGtTQYrUqDXu1QNkvUPzw== - dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.47" - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/wasm-edit" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - acorn "^8.2.1" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.8.0" - es-module-lexer "^0.4.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" - json-parse-better-errors "^1.0.2" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.0.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.1" - watchpack "^2.2.0" - webpack-sources "^2.3.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - wordwrapjs@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.0.tgz#9aa9394155993476e831ba8e59fb5795ebde6800" - integrity sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== dependencies: reduce-flatten "^2.0.0" - typical "^5.0.0" + typical "^5.2.0" wrappy@1: version "1.0.2" @@ -2406,20 +1922,12 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.7.2: - version "1.10.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" - integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== - -yargs-parser@^18.1.3: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yaml@^1.10.0, yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==