diff --git a/.github/ISSUE_TEMPLATE/community_member_profile.md b/.github/ISSUE_TEMPLATE/community_member_profile.md index 57b9a8c1740b..a9efdd451cdc 100644 --- a/.github/ISSUE_TEMPLATE/community_member_profile.md +++ b/.github/ISSUE_TEMPLATE/community_member_profile.md @@ -16,7 +16,7 @@ Let's recognize <@github-username> as a contributor and community member by crea - GitHub: - Twitter: - LinkedIn: -- Layer5 Cloud: +- Layer5 Cloud: - Link to profile picture: A detailed explanation on how to set up a community member profile can be found in the [CONTRIBUTING.md](https://github.com/layer5io/layer5/blob/master/CONTRIBUTING.md) diff --git a/.github/build/features-to-json.js b/.github/build/features-to-json.js new file mode 100755 index 000000000000..b4667d5979b9 --- /dev/null +++ b/.github/build/features-to-json.js @@ -0,0 +1,119 @@ +#!/usr/bin/env node + +const fs = require("fs").promises; // Use fs.promises +const csv = require("csvtojson"); +const [major, minor, patch] = process.versions.node.split(".").map(Number); +console.log(`Using Node.js version: ${major}.${minor}.${patch}`); + +const headers = [ + "Theme", + "Category Order", + "Category", + "Function Order", + "Function", + "Feature", + "Subscription Tier", + "Free", + "Team Designer", + "Team Operator", + "Enterprise", + "Exclude", + "Docs", +]; + + +async function processCSV() { + try { + const csvFilePath = process.argv[2] || ".github/build/spreadsheet.csv"; + if (process.argv[2]) { + console.log("Downloading features to: " + process.argv[2]); + } + const rows = await csv({ + noheader: true, + headers: headers, + output: "json", + }).fromFile(csvFilePath); + + const filteredData = rows.map(row => { + try { + const exclude = row["Exclude"]?.toLowerCase(); + const hasXTier = [ + "Free", + "Team Designer", + "Team Operator", + "Enterprise"] + .some(tier => row[tier]?.trim().toLowerCase() === "x"); + // const includeRow = hasXTier && !(exclude && ["x", "X"].includes(exclude.toLowerCase())); + + // if (!includeRow) return null; + if (!exclude) { + return { + theme: row["Theme"], + categoryOrder: row["Category Order"], + category: row["Category"], + functionOrder: row["Function Order"], + function: row["Function"], + feature: row["Feature"], + subscription_tier: row["Subscription Tier"], + comparison_tiers: { + free: row["Free"], + teamDesigner: row["Team Designer"], + teamOperator: row["Team Operator"], + enterprise: row["Enterprise"], + }, + docs: row["Docs"] + }; + } + } catch (error) { + console.error("Error processing row:", row, error); + return null; + } + }).filter(Boolean); + + // Read existing JSON data + // const featuresFile = process.env.FEATURES_FILE; + + const featuresFile = process.argv[3] || "src/sections/Pricing/feature_data.json"; + if (process.argv[3]) { + console.log("Converting CSV to JSON in: " + process.argv[3]); + } + // const featuresFile = "src/sections/Pricing/feature_data.json"; + + + if (await fs.access(featuresFile).then(() => true, () => false)) { + existingData = JSON.parse(await fs.readFile(featuresFile, "utf8")); + } + + // Identify new updates + const newUpdates = filteredData.filter( + newRow => + !existingData.some( + existingRow => + existingRow.function === newRow.function && + existingRow.feature === newRow.feature + ) + ); + + // Set output for has-updates + // if (newUpdates.length > 0) { + // fs.appendFileSync(process.env.GITHUB_ENV, "has-updates=true\n"); + // } else { + // fs.appendFileSync(process.env.GITHUB_ENV, "has-updates=false\n"); + // } + + // Merge new updates into existing data + const updatedData = [...existingData, ...newUpdates]; + + // Write updated data to file + try { + await fs.writeFile(featuresFile, JSON.stringify(filteredData, null, 2)); + } catch (error) { + console.error("Error writing to feature_data.json:", error); + } + } catch (error) { + console.error("Error processing CSV:", error); + process.exit(1); + } +} + +processCSV(); diff --git a/.github/workflows/build-and-deploy-site.yml b/.github/workflows/build-and-deploy-site.yml index 727f240826be..012b9df68484 100644 --- a/.github/workflows/build-and-deploy-site.yml +++ b/.github/workflows/build-and-deploy-site.yml @@ -2,7 +2,9 @@ name: Build and Deploy Site on: push: branches: [master] - + workflow_dispatch: + workflow_call: + jobs: build-and-deploy: runs-on: ubuntu-latest diff --git a/.github/workflows/build-and-preview-site.yml b/.github/workflows/build-and-preview-site.yml index 75adc4c8cf5b..3544064837b7 100644 --- a/.github/workflows/build-and-preview-site.yml +++ b/.github/workflows/build-and-preview-site.yml @@ -28,5 +28,5 @@ jobs: name: public-dir path: ./public-dir.zip retention-days: 1 - - name: Triger Inner workflow - run: echo "trigering inner workflow" + - name: Trigger Inner workflow + run: echo "triggering inner workflow" diff --git a/.github/workflows/feature-list.yml b/.github/workflows/feature-list.yml new file mode 100644 index 000000000000..e392bfb6bc5d --- /dev/null +++ b/.github/workflows/feature-list.yml @@ -0,0 +1,58 @@ +name: Feature List + +on: + workflow_dispatch: + schedule: + - cron: '0 0 * * *' + +permissions: + contents: write + actions: read + +jobs: + trigger-feature-list: + runs-on: ubuntu-latest + env: + FEATURES_FILE: 'src/sections/Pricing/feature_data.json' + SPREADSHEET_URL: 'https://docs.google.com/spreadsheets/d/e/2PACX-1vQwzrUSKfuSRcpkp7sJTw1cSB63s4HCjYLJeGPWECsvqn222hjaaONQlN4X8auKvlaB0es3BqV5rQyz/pub?gid=1153419764&single=true&output=csv' + + steps: + - name: Checkout current repository + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 18 + + - name: Install dependencies + run: | + npm install csvtojson --legacy-peer-deps + + - name: Fetch spreadsheet and process updates + run: | + # Download the spreadsheet + curl -L $SPREADSHEET_URL -o .github/build/spreadsheet.csv + ls -al + + # Process the CSV, filter data, and append to feature_data.json + node .github/build/features-to-json.js + + - name: Commit changes + id: commit-changes + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "Updated feature data from spreadsheet" + file_pattern: ${{ env.FEATURES_FILE }} + branch: master + commit_options: "--signoff" + commit_user_name: l5io + commit_user_email: ci@layer5.io + commit_author: 'l5io ' + + call-build-and-deploy--workflow: + needs: + - trigger-feature-list + name: Build and Deploy Site + uses: layer5io/layer5/.github/workflows/build-and-deploy-site.yml@master + secrets: inherit diff --git a/.gitignore b/.gitignore index 31910386afcd..9b05645d49be 100644 --- a/.gitignore +++ b/.gitignore @@ -91,4 +91,7 @@ default.profraw # Lighthouse CI .lighthouseci/ -.gitpod.yml \ No newline at end of file +.gitpod.yml + +# Temporary files +spreadsheet.csv \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f6b43c067294..ffce62888d59 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,6 +5,7 @@ We are beyond excited to see that you want to contribute! We would love to accep - [Before You Get Started](#before-you-get-started) - [Contributing to Layer5 Projects](#contributing-to-layer5-projects) - [Contributing to Layer5's Blogs](#contributing-to-layer5s-blogs) +- [Contributing to Layer5's Sistent](#contributing-to-layer5s-sistent) - [How to Contribute](#how-to-contribute) - [Prerequisites](#prerequisites) - [Set up your Local Development Environment](#set-up-your-local-development-environment) @@ -129,6 +130,37 @@ If you'd like to contribute a post to layer5.io/blog, please open an Issue and s 3. Follow the instructions included in the news template and name the new file after the title of the news article. 4. Entries will be listed in chronological order automatically. +# Contributing to Layer5's Sistent + +If you'd like to contribute to Sistent, start by selecting the project/sistent label in the [#GitHub issue tracker](https://github.com/layer5io/layer5/labels/project%2Fsistent). + +### General Contribution Guidelines + +1. Select the [project/sistent](https://github.com/layer5io/layer5/labels/project%2Fsistent) label in the GitHub issue tracker. +1. Navigate to the relevant directory, such as: + ``` + src/sections/Projects/Sistent + ``` + > Note: For other parts of the project, the file path may vary. Ensure you're working in the correct file associated with the area you're contributing to. +1. Add or update content. The system dynamically generates pages and routes to maintain consistency. + +### Adding Sistent Component + +We've streamlined the process by introducing a dynamic page creation workflow, simplifying the addition of new pages and ensuring a consistent structure for all contributions. + +1. Navigate to the relevant directory, such as: + ``` + src/sections/Projects/Sistent + ``` +1. To add a new page, simply update this `content.js` file with the necessary details. All content is managed in a centralized file: + ``` + src/sections/Projects/Sistent/components/content.js + ``` +1. The system will dynamically generate pages based on this content and handle routing automatically. + +### Example +Refer to the [**Button component**](https://layer5.io/projects/sistent/components/button) in the Sistent Library for an example of how to structure the content. + # Common Types of Site Contributions The following list of instructions pertains to commonplace site updates by contributors. diff --git a/Makefile b/Makefile index 1a9186fb26b3..3a5aa5fecf05 100644 --- a/Makefile +++ b/Makefile @@ -41,4 +41,10 @@ clean: lint: npm run lint -.PHONY: setup build site clean site-fast lint +## Prepare a list of features for the pricing page. +features: + curl -L https://docs.google.com/spreadsheets/d/e/2PACX-1vQwzrUSKfuSRcpkp7sJTw1cSB63s4HCjYLJeGPWECsvqn222hjaaONQlN4X8auKvlaB0es3BqV5rQyz/pub\?gid\=1153419764\&single\=true\&output\=csv -o .github/build/spreadsheet.csv + node .github/build/features-to-json.js .github/build/spreadsheet.csv src/sections/Pricing/feature_data.json + rm .github/build/spreadsheet.csv + +.PHONY: setup build site clean site-fast lint features diff --git a/README.md b/README.md index 392449261e19..c0ed2af83be7 100644 --- a/README.md +++ b/README.md @@ -147,7 +147,7 @@ alt="Nighthawk" align="left" />

-

Meshery Catalog

+

Meshery Catalog

{ /** init gtm after 3500 seconds - this could be adjusted */ @@ -29,19 +28,5 @@ function initGTM() { document.head.appendChild(script); } -export const onClientEntry = () => { - if (process.env.NODE_ENV === "production") { - posthog.init("phc_Yynjz2lAiQDJFqTWeGT0FJrt50hl53WBx8do3eKImgX", - { - api_host: "https://us.i.posthog.com", - person_profiles: "always", - autocapture: { - url_ignorelist: ["community/newcomers", "/calendar", "/newcomers"] - } - } - ); - } -}; - export { wrapRootElement } from "./root-wrapper"; export { wrapPageElement } from "./page-wrapper"; diff --git a/gatsby-config.js b/gatsby-config.js index f52a4b0a6082..7f59da1f9a50 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -17,6 +17,7 @@ module.exports = { }, trailingSlash: "never", plugins: [ + "@mediacurrent/gatsby-plugin-silence-css-order-warning", { resolve: "gatsby-plugin-webpack-bundle-analyser-v2", options: { @@ -545,7 +546,7 @@ module.exports = { resolve: "gatsby-plugin-robots-txt", options: { host: "https://layer5.io", - sitemap: "https://layer5.io/sitemap/sitemap-index.xml", + sitemap: "https://layer5.io/sitemap-index.xml", policy: [{ userAgent: "*", allow: "/" }], } }, diff --git a/gatsby-node.js b/gatsby-node.js index c70a2ca99181..7f8a6cb95605 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -9,7 +9,11 @@ const path = require("path"); const slugify = require("./src/utils/slugify"); const { paginate } = require("gatsby-awesome-pagination"); const { createFilePath } = require("gatsby-source-filesystem"); +const FilterWarningsPlugin = require("webpack-filter-warnings-plugin"); const config = require("./gatsby-config"); +const { + componentsData, +} = require("./src/sections/Projects/Sistent/components/content"); if (process.env.CI === "true") { // All process.env.CI conditionals in this file are in place for GitHub Pages, if webhost changes in the future, code may need to be modified or removed. @@ -389,84 +393,99 @@ exports.createPages = async ({ actions, graphql, reporter }) => { const resourcePostTemplate = path.resolve("src/templates/resource-single.js"); const integrationTemplate = path.resolve("src/templates/integrations.js"); - const res = await graphql(`{ - allPosts: allMdx(filter: {frontmatter: {published: {eq: true}}}) { - nodes { - frontmatter { - program - programSlug - } - fields { - collection - slug - } - } - } - blogTags: allMdx( - filter: {fields: {collection: {eq: "blog"}}, frontmatter: {published: {eq: true}}} - ) { - group(field: {frontmatter: {tags: SELECT}}) { - nodes { - id + const res = await graphql(` + { + allPosts: allMdx(filter: { frontmatter: { published: { eq: true } } }) { + nodes { + frontmatter { + program + programSlug + } + fields { + collection + slug + } + } } - fieldValue - } - } - blogCategory: allMdx( - filter: {fields: {collection: {eq: "blog"}}, frontmatter: {published: {eq: true}}} - ) { - group(field: {frontmatter: {category: SELECT}}) { - nodes { - id + blogTags: allMdx( + filter: { + fields: { collection: { eq: "blog" } } + frontmatter: { published: { eq: true } } + } + ) { + group(field: { frontmatter: { tags: SELECT } }) { + nodes { + id + } + fieldValue + } } - fieldValue - } - } - memberBio: allMdx( - filter: {fields: {collection: {eq: "members"}}, frontmatter: {published: {eq: true}, executive_bio: {eq: true}}} - ) { - nodes { - frontmatter { - name + blogCategory: allMdx( + filter: { + fields: { collection: { eq: "blog" } } + frontmatter: { published: { eq: true } } + } + ) { + group(field: { frontmatter: { category: SELECT } }) { + nodes { + id + } + fieldValue + } } - fields { - slug - collection + memberBio: allMdx( + filter: { + fields: { collection: { eq: "members" } } + frontmatter: { published: { eq: true }, executive_bio: { eq: true } } + } + ) { + nodes { + frontmatter { + name + } + fields { + slug + collection + } + } } - } - } - singleWorkshop: allMdx( - filter: {fields: {collection: {eq: "service-mesh-workshops"}}} - ) { - nodes { - fields { - slug - collection + singleWorkshop: allMdx( + filter: { fields: { collection: { eq: "service-mesh-workshops" } } } + ) { + nodes { + fields { + slug + collection + } + } } - } - } - labs: allMdx(filter: {fields: {collection: {eq: "service-mesh-labs"}}}) { - nodes { - fields { - slug - collection + labs: allMdx( + filter: { fields: { collection: { eq: "service-mesh-labs" } } } + ) { + nodes { + fields { + slug + collection + } + } } - } - } - learncontent: allMdx(filter: {fields: {collection: {eq: "content-learn"}}}) { - nodes { - fields { - learnpath - slug - course - section - chapter - pageType - collection + learncontent: allMdx( + filter: { fields: { collection: { eq: "content-learn" } } } + ) { + nodes { + fields { + learnpath + slug + course + section + chapter + pageType + collection + } + } } } - } -}`); + `); // handle errors if (res.errors) { @@ -707,6 +726,33 @@ exports.createPages = async ({ actions, graphql, reporter }) => { } } }); + + const components = componentsData.map((component) => component.src.replace("/", "")); + + const createComponentPages = (createPage, components) => { + const pageTypes = [ + { suffix: "", file: "index.js" }, + { suffix: "/guidance", file: "guidance.js" }, + { suffix: "/code", file: "code.js" }, + ]; + + components.forEach((name) => { + pageTypes.forEach(({ suffix, file }) => { + const path = `/projects/sistent/components/${name}${suffix}`; + const componentPath = `./src/sections/Projects/Sistent/components/${name}/${file}`; + try { + createPage({ + path, + component: require.resolve(componentPath), + }); + } catch (error) { + console.error(`Error creating page for ${path}:`, error); + } + }); + }); + }; + + createComponentPages(createPage, components); }; // slug starts and ends with '/' so parts[0] and parts[-1] will be empty @@ -932,7 +978,7 @@ const createSectionPage = ({ envCreatePage, node }) => { }); }; -exports.onCreateWebpackConfig = ({ actions }) => { +exports.onCreateWebpackConfig = ({ actions, stage, getConfig }) => { actions.setWebpackConfig({ resolve: { fallback: { @@ -942,7 +988,29 @@ exports.onCreateWebpackConfig = ({ actions }) => { }, }, }); + actions.setWebpackConfig({ + plugins: [ + new FilterWarningsPlugin({ + exclude: + /mini-css-extract-plugin[^]*Conflicting order. Following module has been added:/, + }), + ], + }); + + if (stage === "build-javascript") { + const config = getConfig(); + const miniCssExtractPlugin = config.plugins.find( + (plugin) => plugin.constructor.name === "MiniCssExtractPlugin" + ); + + if (miniCssExtractPlugin) { + miniCssExtractPlugin.options.ignoreOrder = true; + } + + actions.replaceWebpackConfig(config); + } }; + exports.createSchemaCustomization = ({ actions }) => { const { createTypes } = actions; const typeDefs = ` diff --git a/package-lock.json b/package-lock.json index 54426d7a5db9..fa954b791b47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@emotion/is-prop-valid": "^1.2.1", "@emotion/react": "^11.11.4", - "@emotion/styled": "^11.11.0", + "@emotion/styled": "^11.14.0", "@fullcalendar/core": "^6.1.8", "@fullcalendar/daygrid": "^6.1.8", "@fullcalendar/google-calendar": "^6.0.2", @@ -21,6 +21,7 @@ "@loadable/component": "^5.16.4", "@mdx-js/mdx": "1.6.22", "@mdx-js/react": "1.6.22", + "@mediacurrent/gatsby-plugin-silence-css-order-warning": "^1.0.0", "@mui/icons-material": "^5.16.4", "@mui/material": "^5.15.11", "@react-icons/all-files": "^4.1.0", @@ -54,16 +55,16 @@ "gatsby-plugin-styled-components": "^6.11.0", "gatsby-plugin-svgr": "^3.0.0-beta.0", "gatsby-redirect-from": "1.0.4", - "gatsby-source-filesystem": "^5.11.0", + "gatsby-source-filesystem": "^5.14.0", "gatsby-transformer-sharp": "^5.11.0", "gbimage-bridge": "^0.2.2", "gsap": "^3.12.2", "joi": "^17.10.2", "js-search": "^2.0.0", "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.9.2", "mui-datatables": "^4.3.0", "path-browserify": "^1.0.1", - "posthog-js": "^1.161.6", "prism-react-renderer": "^2.0.6", "process": "^0.11.10", "prop-types": "^15.7.2", @@ -94,8 +95,9 @@ "simple-react-lightbox": "^3.6.9-0", "slick-carousel": "^1.8.1", "styled-components": "^6.0.5", - "swiper": "^10.0.4", + "swiper": "^11.1.15", "url": "^0.11.3", + "webpack-filter-warnings-plugin": "^1.2.1", "xstate": "^5.13.0" }, "devDependencies": { @@ -106,7 +108,7 @@ "cpx": "^1.5.0", "env-cmd": "^10.1.0", "eslint": "^8.46.0", - "eslint-plugin-react": "^7.34.2", + "eslint-plugin-react": "^7.37.3", "gatsby-plugin-webpack-bundle-analyser-v2": "^1.1.30", "gh-pages": "^6.0.0", "husky": "^8.0.3", @@ -2171,15 +2173,15 @@ } }, "node_modules/@emotion/babel-plugin": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", - "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", "@emotion/hash": "^0.9.2", "@emotion/memoize": "^0.9.0", - "@emotion/serialize": "^1.2.0", + "@emotion/serialize": "^1.3.3", "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", @@ -2247,14 +2249,14 @@ } }, "node_modules/@emotion/serialize": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz", - "integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", "dependencies": { "@emotion/hash": "^0.9.2", "@emotion/memoize": "^0.9.0", "@emotion/unitless": "^0.10.0", - "@emotion/utils": "^1.4.1", + "@emotion/utils": "^1.4.2", "csstype": "^3.0.2" } }, @@ -2264,16 +2266,16 @@ "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" }, "node_modules/@emotion/styled": { - "version": "11.13.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz", - "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==", + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", + "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.12.0", + "@emotion/babel-plugin": "^11.13.5", "@emotion/is-prop-valid": "^1.3.0", - "@emotion/serialize": "^1.3.0", - "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", - "@emotion/utils": "^1.4.0" + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" }, "peerDependencies": { "@emotion/react": "^11.0.0-rc.0", @@ -2291,17 +2293,17 @@ "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", - "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", "peerDependencies": { "react": ">=16.8.0" } }, "node_modules/@emotion/utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz", - "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==" }, "node_modules/@emotion/weak-memoize": { "version": "0.4.0", @@ -3834,6 +3836,12 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/@mediacurrent/gatsby-plugin-silence-css-order-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@mediacurrent/gatsby-plugin-silence-css-order-warning/-/gatsby-plugin-silence-css-order-warning-1.0.0.tgz", + "integrity": "sha512-TiBIncOzH5JtjHxZ43D4KmsZcjaKaGtl4p9+9HbhdDSNC5DcS3KpIJWT0nS0qnSd2QlbDRx44XAkrl4GZpIwTA==", + "license": "MIT" + }, "node_modules/@mischnic/json-sourcemap": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.1.tgz", @@ -7101,12 +7109,12 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -7230,14 +7238,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7262,18 +7270,17 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -8398,15 +8405,41 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -10422,13 +10455,13 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10438,27 +10471,27 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -11019,6 +11052,19 @@ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -11261,56 +11307,59 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.23.8", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.8.tgz", + "integrity": "sha512-lfab8IzDn6EpI1ibZakcgS6WsfEBiB+43cuJo+wgylx1xKXf+Sp+YR3vFuQwC/u3sxYwV8Cxe3B0DpVUu/WiJQ==", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.6", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "object.assign": "^4.1.7", + "own-keys": "^1.0.0", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -11320,12 +11369,9 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "engines": { "node": ">= 0.4" } @@ -11358,24 +11404,26 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -11419,13 +11467,13 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -11734,27 +11782,27 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.36.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", - "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", + "version": "7.37.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", + "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", + "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", + "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", + "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "engines": { @@ -12699,11 +12747,6 @@ "pend": "~1.2.0" } }, - "node_modules/fflate": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", - "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" - }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -13495,14 +13538,16 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -13872,18 +13917,18 @@ } }, "node_modules/gatsby-core-utils": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-4.13.1.tgz", - "integrity": "sha512-w7G6SsQr8T2q+AJ1MxvRNGocCt+wjc22MiRLj2Zi3Ijpjszbr818JxwI4+aPt8WOSHlKT5SYCHICnEvcYPm9gg==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-4.14.0.tgz", + "integrity": "sha512-h0v20gB213PmhKjioCJ93SrUb7Hihnqxd6X6Iur4u1eiWTUDsGeV9g1bkquiuDl2qovUnjj7mOoHdWiu/Ax/9Q==", "dependencies": { "@babel/runtime": "^7.20.13", "ci-info": "2.0.0", "configstore": "^5.0.1", "fastq": "^1.15.0", "file-type": "^16.5.4", - "fs-extra": "^11.1.1", + "fs-extra": "^11.2.0", "got": "^11.8.6", - "hash-wasm": "^4.9.0", + "hash-wasm": "^4.11.0", "import-from": "^4.0.0", "lmdb": "2.5.3", "lock": "^1.1.0", @@ -15004,15 +15049,15 @@ } }, "node_modules/gatsby-source-filesystem": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-5.13.1.tgz", - "integrity": "sha512-nFWzOBpi84nDeVNeO7bpKL9mVYMl1tfjJmE5l868YATFShGzZnA6qMd200XCsf78PexZHAiV/P1MlsyKqjJduA==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-5.14.0.tgz", + "integrity": "sha512-uewEJaHvdxZlN6DOtZCIUuI7X5v9MRk5IVpCYy9SIZCDbnUA5siEd2A4SC+kcXxJM6AUbdvkfayqpVJrm5JaZA==", "dependencies": { "@babel/runtime": "^7.20.13", "chokidar": "^3.5.3", "file-type": "^16.5.4", - "fs-extra": "^11.1.1", - "gatsby-core-utils": "^4.13.1", + "fs-extra": "^11.2.0", + "gatsby-core-utils": "^4.14.0", "mime": "^3.0.0", "pretty-bytes": "^5.6.0", "valid-url": "^1.0.9", @@ -15375,6 +15420,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/gatsby/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/gatsby/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -15568,6 +15622,45 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "node_modules/gatsby/node_modules/mini-css-extract-plugin": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.0.0" + } + }, + "node_modules/gatsby/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/gatsby/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -15689,15 +15782,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -15726,13 +15824,13 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -16029,11 +16127,11 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16241,9 +16339,12 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -16252,9 +16353,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { "node": ">= 0.4" }, @@ -16931,13 +17032,13 @@ } }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -17054,12 +17155,13 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -17088,11 +17190,14 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17110,12 +17215,12 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -17195,10 +17300,12 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -17209,11 +17316,12 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -17296,11 +17404,14 @@ } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17428,17 +17539,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -17448,11 +17548,12 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -17520,12 +17621,14 @@ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -17576,11 +17679,11 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -17609,11 +17712,12 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -17623,11 +17727,13 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -17637,11 +17743,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -17705,11 +17811,14 @@ } }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17803,15 +17912,19 @@ } }, "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", + "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==", "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "reflect.getprototypeof": "^1.0.8", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/jackspeak": { @@ -18487,6 +18600,14 @@ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==" }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/math-random": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", @@ -18874,68 +18995,23 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "license": "MIT", "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "webpack": "^5.0.0" } }, "node_modules/minimatch": { @@ -19648,9 +19724,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "engines": { "node": ">= 0.4" }, @@ -19694,13 +19770,15 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -19779,11 +19857,12 @@ } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -19912,6 +19991,22 @@ "node": ">=0.10.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", @@ -21267,25 +21362,6 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, - "node_modules/posthog-js": { - "version": "1.165.0", - "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.165.0.tgz", - "integrity": "sha512-rUfRJobvOz3Q9Er+zwb32Eq2qs+ToBe/B4k4IoKzmyszI7240Rf4xVWRB0ky8LvmdZfCeYX5knS2Uv3pnn/d5A==", - "dependencies": { - "fflate": "^0.4.8", - "preact": "^10.19.3", - "web-vitals": "^4.0.1" - } - }, - "node_modules/posthog-js/node_modules/preact": { - "version": "10.24.1", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.1.tgz", - "integrity": "sha512-PnBAwFI3Yjxxcxw75n6VId/5TFxNW/81zexzWD9jn1+eSrOP84NdsS38H5IkF/UH3frqRPT+MvuCoVHjTDTnDw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - } - }, "node_modules/preact": { "version": "10.12.1", "resolved": "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz", @@ -22702,17 +22778,18 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", + "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", + "dunder-proto": "^1.0.1", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -22801,14 +22878,14 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -23588,13 +23665,14 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -23623,6 +23701,21 @@ } ] }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", @@ -23633,13 +23726,13 @@ } }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -23996,14 +24089,65 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -24430,7 +24574,8 @@ "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "license": "MIT" }, "node_modules/source-map": { "version": "0.5.7", @@ -24868,22 +25013,23 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -24902,14 +25048,17 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -24919,14 +25068,18 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -25405,9 +25558,9 @@ } }, "node_modules/swiper": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-10.3.1.tgz", - "integrity": "sha512-24Wk3YUdZHxjc9faID97GTu6xnLNia+adMt6qMTZG/HgdSUt4fS0REsGUXJOgpTED0Amh/j+gRGQxsLayJUlBQ==", + "version": "11.1.15", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.15.tgz", + "integrity": "sha512-IzWeU34WwC7gbhjKsjkImTuCRf+lRbO6cnxMGs88iVNKDwV+xQpBCJxZ4bNH6gSrIbbyVJ1kuGzo3JTtz//CBw==", "funding": [ { "type": "patreon", @@ -26033,28 +26186,28 @@ "integrity": "sha512-39wxbwHdQ2sTiBB8wAzKfQ9GN+om8w+sjNWzr+vZJR5AMD5J+J7Yc8AtXnU9r/r2c8XiDZ/smxutDmZehX/qpQ==" }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -26064,16 +26217,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -26083,16 +26237,16 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -26115,9 +26269,9 @@ } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "peer": true, "bin": { "tsc": "bin/tsc", @@ -26153,14 +26307,17 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -26717,12 +26874,12 @@ } }, "node_modules/use-sync-external-store": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", - "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", + "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", "peer": true, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/util-deprecate": { @@ -26865,11 +27022,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/web-vitals": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.3.tgz", - "integrity": "sha512-/CFAm1mNxSmOj6i0Co+iGFJ58OS4NRGVP+AWS/l509uIK5a1bSoIVaHz/ZumpHTfHSZBpgrJ+wjfpAOrTHok5Q==" - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -27082,6 +27234,18 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/webpack-filter-warnings-plugin": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", + "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", + "license": "MIT", + "engines": { + "node": ">= 4.3 < 5.0.0 || >= 5.10" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, "node_modules/webpack-merge": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", @@ -27099,6 +27263,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "license": "MIT", "dependencies": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" @@ -27108,6 +27273,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -27204,37 +27370,41 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dependencies": { + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -27266,14 +27436,15 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { diff --git a/package.json b/package.json index 11fc528e5674..8e691fea64a2 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "dependencies": { "@emotion/is-prop-valid": "^1.2.1", "@emotion/react": "^11.11.4", - "@emotion/styled": "^11.11.0", + "@emotion/styled": "^11.14.0", "@fullcalendar/core": "^6.1.8", "@fullcalendar/daygrid": "^6.1.8", "@fullcalendar/google-calendar": "^6.0.2", @@ -38,6 +38,7 @@ "@loadable/component": "^5.16.4", "@mdx-js/mdx": "1.6.22", "@mdx-js/react": "1.6.22", + "@mediacurrent/gatsby-plugin-silence-css-order-warning": "^1.0.0", "@mui/icons-material": "^5.16.4", "@mui/material": "^5.15.11", "@react-icons/all-files": "^4.1.0", @@ -71,16 +72,16 @@ "gatsby-plugin-styled-components": "^6.11.0", "gatsby-plugin-svgr": "^3.0.0-beta.0", "gatsby-redirect-from": "1.0.4", - "gatsby-source-filesystem": "^5.11.0", + "gatsby-source-filesystem": "^5.14.0", "gatsby-transformer-sharp": "^5.11.0", "gbimage-bridge": "^0.2.2", "gsap": "^3.12.2", "joi": "^17.10.2", "js-search": "^2.0.0", "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.9.2", "mui-datatables": "^4.3.0", "path-browserify": "^1.0.1", - "posthog-js": "^1.161.6", "prism-react-renderer": "^2.0.6", "process": "^0.11.10", "prop-types": "^15.7.2", @@ -111,8 +112,9 @@ "simple-react-lightbox": "^3.6.9-0", "slick-carousel": "^1.8.1", "styled-components": "^6.0.5", - "swiper": "^10.0.4", + "swiper": "^11.1.15", "url": "^0.11.3", + "webpack-filter-warnings-plugin": "^1.2.1", "xstate": "^5.13.0" }, "devDependencies": { @@ -123,7 +125,7 @@ "cpx": "^1.5.0", "env-cmd": "^10.1.0", "eslint": "^8.46.0", - "eslint-plugin-react": "^7.34.2", + "eslint-plugin-react": "^7.37.3", "gatsby-plugin-webpack-bundle-analyser-v2": "^1.1.30", "gh-pages": "^6.0.0", "husky": "^8.0.3", diff --git a/src/assets/images/sistent/horizontal/sistent-horizontal-color.png b/src/assets/images/sistent/horizontal/sistent-horizontal-color.png new file mode 100644 index 000000000000..5446c74242a6 Binary files /dev/null and b/src/assets/images/sistent/horizontal/sistent-horizontal-color.png differ diff --git a/src/assets/images/sistent/horizontal/sistent-horizontal-color.svg b/src/assets/images/sistent/horizontal/sistent-horizontal-color.svg new file mode 100644 index 000000000000..02b3169fd5d8 --- /dev/null +++ b/src/assets/images/sistent/horizontal/sistent-horizontal-color.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/sistent/horizontal/sistent-horizontal-partial-color.png b/src/assets/images/sistent/horizontal/sistent-horizontal-partial-color.png new file mode 100644 index 000000000000..28895c3b8146 Binary files /dev/null and b/src/assets/images/sistent/horizontal/sistent-horizontal-partial-color.png differ diff --git a/src/assets/images/sistent/horizontal/sistent-horizontal-partial-color.svg b/src/assets/images/sistent/horizontal/sistent-horizontal-partial-color.svg new file mode 100644 index 000000000000..3c1c6c35baae --- /dev/null +++ b/src/assets/images/sistent/horizontal/sistent-horizontal-partial-color.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/sistent/horizontal/sistent-horizontal-white.png b/src/assets/images/sistent/horizontal/sistent-horizontal-white.png new file mode 100644 index 000000000000..86a3ac9cd3b0 Binary files /dev/null and b/src/assets/images/sistent/horizontal/sistent-horizontal-white.png differ diff --git a/src/assets/images/sistent/horizontal/sistent-horizontal-white.svg b/src/assets/images/sistent/horizontal/sistent-horizontal-white.svg new file mode 100644 index 000000000000..122f0e1838ed --- /dev/null +++ b/src/assets/images/sistent/horizontal/sistent-horizontal-white.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/sistent/icon-only/sistent-icon-color.png b/src/assets/images/sistent/icon-only/sistent-icon-color.png new file mode 100644 index 000000000000..0af8e24264b7 Binary files /dev/null and b/src/assets/images/sistent/icon-only/sistent-icon-color.png differ diff --git a/src/assets/images/sistent/icon-only/sistent-icon-color.svg b/src/assets/images/sistent/icon-only/sistent-icon-color.svg new file mode 100644 index 000000000000..1e72c03b8703 --- /dev/null +++ b/src/assets/images/sistent/icon-only/sistent-icon-color.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/sistent/icon-only/sistent-icon-white.png b/src/assets/images/sistent/icon-only/sistent-icon-white.png new file mode 100644 index 000000000000..1c58f44e9dfa Binary files /dev/null and b/src/assets/images/sistent/icon-only/sistent-icon-white.png differ diff --git a/src/assets/images/sistent/icon-only/sistent-icon-white.svg b/src/assets/images/sistent/icon-only/sistent-icon-white.svg new file mode 100644 index 000000000000..2ef3ac6c2be4 --- /dev/null +++ b/src/assets/images/sistent/icon-only/sistent-icon-white.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/sistent/stacked/sistent-stacked-color.png b/src/assets/images/sistent/stacked/sistent-stacked-color.png new file mode 100644 index 000000000000..5614c28b04ff Binary files /dev/null and b/src/assets/images/sistent/stacked/sistent-stacked-color.png differ diff --git a/src/assets/images/sistent/stacked/sistent-stacked-color.svg b/src/assets/images/sistent/stacked/sistent-stacked-color.svg new file mode 100644 index 000000000000..b32f7b0a3ba5 --- /dev/null +++ b/src/assets/images/sistent/stacked/sistent-stacked-color.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/sistent/stacked/sistent-stacked-partial-color.png b/src/assets/images/sistent/stacked/sistent-stacked-partial-color.png new file mode 100644 index 000000000000..cf0e5907782e Binary files /dev/null and b/src/assets/images/sistent/stacked/sistent-stacked-partial-color.png differ diff --git a/src/assets/images/sistent/stacked/sistent-stacked-partial-color.svg b/src/assets/images/sistent/stacked/sistent-stacked-partial-color.svg new file mode 100644 index 000000000000..9be9b1f2db95 --- /dev/null +++ b/src/assets/images/sistent/stacked/sistent-stacked-partial-color.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/sistent/stacked/sistent-stacked-white.png b/src/assets/images/sistent/stacked/sistent-stacked-white.png new file mode 100644 index 000000000000..99af0863a685 Binary files /dev/null and b/src/assets/images/sistent/stacked/sistent-stacked-white.png differ diff --git a/src/assets/images/sistent/stacked/sistent-stacked-white.svg b/src/assets/images/sistent/stacked/sistent-stacked-white.svg new file mode 100644 index 000000000000..d13a1f2840b0 --- /dev/null +++ b/src/assets/images/sistent/stacked/sistent-stacked-white.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/sistent/text-only/sistent-text-color.png b/src/assets/images/sistent/text-only/sistent-text-color.png new file mode 100644 index 000000000000..4cb815785fa2 Binary files /dev/null and b/src/assets/images/sistent/text-only/sistent-text-color.png differ diff --git a/src/assets/images/sistent/text-only/sistent-text-color.svg b/src/assets/images/sistent/text-only/sistent-text-color.svg new file mode 100644 index 000000000000..ebc04fdc1f48 --- /dev/null +++ b/src/assets/images/sistent/text-only/sistent-text-color.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/sistent/text-only/sistent-text-white.png b/src/assets/images/sistent/text-only/sistent-text-white.png new file mode 100644 index 000000000000..2ed56ca87fab Binary files /dev/null and b/src/assets/images/sistent/text-only/sistent-text-white.png differ diff --git a/src/assets/images/sistent/text-only/sistent-text-white.svg b/src/assets/images/sistent/text-only/sistent-text-white.svg new file mode 100644 index 000000000000..857f62a10890 --- /dev/null +++ b/src/assets/images/sistent/text-only/sistent-text-white.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/collections/blog/2021/2021-02-07-meshkit-and-meshery-adapter-library/index.mdx b/src/collections/blog/2021/2021-02-07-meshkit-and-meshery-adapter-library/index.mdx index 0e4792e186ba..f5810c35b758 100644 --- a/src/collections/blog/2021/2021-02-07-meshkit-and-meshery-adapter-library/index.mdx +++ b/src/collections/blog/2021/2021-02-07-meshkit-and-meshery-adapter-library/index.mdx @@ -1,6 +1,6 @@ --- title: "Introducing Meshkit and the Meshery Adapter Library" -subtitle: "Making the DX of service mesh management easy." +subtitle: "Making the DX of cloud native infrastructure management easy." date: 2021-02-07 12:12:12 +0002 author: Michael Gfeller thumbnail: ./meshery-adapter-library-overview.webp @@ -28,18 +28,18 @@ import malOverview from "./meshery-adapter-library-overview.webp";

The Meshery v0.5.0 release includes two new libraries: MeshKit and Meshery Adapter Library. -These two libraries improve contributor experience and development speed by reducing the burden of sustaining the plethora of Meshery adapters, allowing contributors to focus on exposing a service mesh's differentiated value, -instead of having to redundantly implement plumbing for managing service meshes. +These two libraries improve contributor experience and development speed by reducing the burden of sustaining the plethora of Meshery adapters, allowing contributors to focus on exposing any given infrastructure component's differentiated value, +instead of having to redundantly implement plumbing for managing cloud native infrastructure.

## MeshKit -MeshKit was formerly named `gokit` and was renamed recently to align with the other Meshery components' names (and avoid confusion with the `go-kit` project). MeshKit can be considered a derivative of `go-kit` with specific focus on service mesh management. +MeshKit was formerly named `gokit` and was renamed recently to align with the other Meshery components' names (and avoid confusion with the `go-kit` project). MeshKit can be considered a derivative of `go-kit` with specific focus on cloud native management. In the Meshery v0.5.0 release, MeshKit has been enhanced and expanded substantially. Considering that the MeshKit library provides broadly useful functionality, it is used in a growing number of Meshery components. It is intended to be one of the top level libraries in the Meshery ecosystem.
Meshkit provides functionality useful across all Meshery components.
-MeshKit is a toolkit for Layer5’s microservices, and is positioned to become Layer5’s middleware component for Layer5’s microservices, leveraging other libraries like `go-kit/kit`. In complement to functionality provided by a service mesh, its purpose is to provide implementations for common cross-cutting concerns like error handling, logging, and tracing. Uniform error handling and logging across all Meshery components helps to implement efficient tooling for observability, monitoring and troubleshooting. The library provides some common data models for Meshery, notably for Service Mesh Interface conformance testing, and Kubernetes' `kubeconfig`. +MeshKit is a toolkit for Layer5’s microservices, and is positioned to become Layer5’s middleware component for Layer5’s microservices, leveraging other libraries like `go-kit/kit`. In complement to functionality provided by any given cloud native infrastructure component, its purpose is to provide implementations for common cross-cutting concerns like error handling, logging, and tracing. Uniform error handling and logging across all Meshery components helps to implement efficient tooling for observability, monitoring and troubleshooting. The library provides some common data models for Meshery and Meshery's
ecosystem of extensions. Another central component in Meshkit is the `utils` package. @@ -130,7 +130,7 @@ spec: ## Meshery Adapters -Meshery adapters are management plane components and manage the lifecycle of service meshes. This includes installation and deletion, configuration, and verification that an installation follows recommended practices. In addition, Meshery adapters can assess to what extent a service mesh complies to the Service Mesh Interface standard. Meshery adapters support management of multiple versions of their respective service mesh and also come bundled with sample applications that can be deployed for easy and quick exploration of service mesh capabilities.
Meshery adapters manage the lifecycle of service meshes.
+Meshery adapters are management plane components and manage the lifecycle of cloud native infra. This includes installation and deletion, configuration, and verification that an installation follows recommended practices. As example use of Meshery adapters is for purposes of compliance verification, actively attesting whether whether infrastructure complies to an open standard, like that of Service Mesh Interface. Meshery adapters support management of multiple versions of their respective capabilites and also come bundled with sample applications that can be deployed for easy and quick exploration of infrastructure (or other) capabilities.
Meshery adapters extend Meshery's core functionality housed within Meshery Server, often deepening Meshery's ability to manage the lifecycle infratructure, but not limited to those use cases. Adapters have been known to act as engineering workflow facilititors, providing gate reviews, sending emails, and so on.
A Meshery adapter is a gRPC server that exposes the `MeshServiceServer` interface: @@ -145,15 +145,15 @@ type MeshServiceServer interface { } ``` -- `CreateMeshInstance` sets up the Kubernetes client. It does not, as the name might imply, create an instance of a service mesh. -- `MeshName` returns the name of the mesh, configured in the adapter. -- `SupportedOperations` returns all supported operations, configured in the adapter. An operation is e.g. the installation of a service mesh. +- `CreateInstance` sets up the Kubernetes client. It does not, as the name might imply, create an instance of an infrastructure component. +- `Name` returns the name of the infrastructure component, configured in the adapter. +- `SupportedOperations` returns all supported operations, configured in the adapter. An operation is e.g. the installation of any given cloud native infrastructure component or service. - `ApplyOperation` executes the operation specified in the request. It is one of the supported operations. - `StreamEvents` allows sending events from the server to the client. -This API is one of the extension points of Meshery, making it easy to add support for new service meshes to Meshery. Meshery adapters abstract away differences in installation and configuration of the various service meshes.
Adapters allow Meshery to interface with the different service meshes, exposing their differentiated value to users.
+This API is one of the extension points of Meshery, making it easy to add support for new cloud native technologies to Meshery. Meshery adapters abstract away differences in installation and configuration of the various technologies. Various cloud native technologies are installed and configured in their own way. For instance, some projects have their own installer, like `istioctl` for Istio, while others use Helm charts, like Consul. One of the purposes of Meshery adapters is to abstract these differences away.
It's important to note, however, that Meshery Adapters allow Meshery to interface with each managed system uniquely, and not treat those systems uniformly by only offering the lowest common denominator of functionality, but instead by exposing that system's differentiated value to users.
+ -In general, the various service mesh implementations are installed and configured in their own way. For instance, some service meshes have their own installer, like `istioctl` for Istio, while others use Helm charts, like Consul. One of the purposes of Meshery adapters is to abstract these differences away. ## Meshery Adapter Library @@ -168,7 +168,7 @@ Also, it means new adapters can be implemented quickly, as only configuration an
The Meshery Adapter Library provides a common and consistent set of functionality that Meshery adapters use for managing the lifecycle of - service meshes and their workloads. + cloud infrastructure and their workloads.
The initial commit was submitted on October 6th, 2020 based on a refactoring effort in the adapter for the Kuma service mesh. Within a few months, several adapters have been refactored or implemented from scratch based on the Meshery Adapter Library. @@ -224,7 +224,7 @@ The `service` is a struct that holds all the parameters that specify an adapter Extracting common code from adapters to the two new libraries has proven to be a worthwhile investment. It led to cleaner code as well as cleaner application architecture, shortened implementation time for new adapters considerably, and upleveled the quality of Meshery's adapters through consistency of implementation. -

P.S. If these topics excite you and you want to explore the beautiful realm of service meshes, come and say "Hi" on the community Slack and you are sure to be warmly welcomed. 😀

+

P.S. If these topics excite you and you want to explore the beautiful realm of cloud native infrastructure, come and say "Hi" on the community Slack and you are sure to be warmly welcomed. 😀

diff --git a/src/collections/blog/2022/2022-06-08-experience-lfx-pranav-singh/index.mdx b/src/collections/blog/2022/2022-06-08-experience-lfx-pranav-singh/index.mdx index ffec6abb20f9..5c188d25e8ce 100644 --- a/src/collections/blog/2022/2022-06-08-experience-lfx-pranav-singh/index.mdx +++ b/src/collections/blog/2022/2022-06-08-experience-lfx-pranav-singh/index.mdx @@ -30,7 +30,7 @@ more excited by the enthusiasm and energy of each community members welcoming me learned about the project through the demos/updates from fellow contributors. Slowly and gradually, I started contributing too, then delivering updates in the community calls, and consequently started climbing the contributor ladder. -When I realised that I would be working on [Layer5 Cloud](https://meshery.layer5.io) and Meshery as an LFX intern at Layer5, then I couldn't control my excitement. +When I realised that I would be working on [Layer5 Cloud](https://cloud.layer5.io) and Meshery as an LFX intern at Layer5, then I couldn't control my excitement. That excitement was to ship more impactful features for the Layer5 projects, work and engage more deeply with the engineering team at Layer5 and have an overall upliftment of my development skills. Throughout my internship I worked on several features. Few on the top of the list are as follows, expanding [Meshery extension points](https://docs.meshery.io/extensibility), exposing node details of the K8s clusters on which Meshery runs performance tests, diff --git a/src/collections/blog/2023/2023-09-05-unlocking-the-power-of-webassembly-in-service-mesh-management/index.mdx b/src/collections/blog/2023/2023-09-05-unlocking-the-power-of-webassembly-in-service-mesh-management/index.mdx index 7d44ff951180..03b94ee34678 100644 --- a/src/collections/blog/2023/2023-09-05-unlocking-the-power-of-webassembly-in-service-mesh-management/index.mdx +++ b/src/collections/blog/2023/2023-09-05-unlocking-the-power-of-webassembly-in-service-mesh-management/index.mdx @@ -32,7 +32,7 @@ With this collaboration, we're introducing powerful features that simplify the m ### Meshery UI and CLI Integration - **Import WASM Envoy Filters**: Easily import your WebAssembly Envoy filters into Meshery using the intuitive UI or the command-line interface ([CLI](https://docs.meshery.io/reference/mesheryctl#data-plane-intelligence)). - **Publish and Clone Filters**: Share your filters with the community by publishing them in the [Meshery Catalog](https://meshery.io/catalog) and make it effortless for others to clone them. -- **Download WASM Binaries**: Access and download WebAssembly binaries directly from [Meshery Cloud](https://meshery.layer5.io/). +- **Download WASM Binaries**: Access and download WebAssembly binaries directly from [Meshery Cloud](https://cloud.layer5.io/). - **Efficient Data Plane Design**: Seamlessly design and deploy Istio and Envoy data planes using [MeshMap](https://layer5.io/cloud-native-management/meshmap). - **Contribute to Open Source**: Get involved with the service mesh community by contributing to any of the 7 open-source [wasm-filters](https://github.com/layer5io/wasm-filters) developed by Layer5. diff --git a/src/collections/blog/2024/09-27-meet-the-maintainer-aisuko-li/aisuko-li-layer5-maintainer.png b/src/collections/blog/2024/09-27-meet-the-maintainer-aisuko-li/aisuko-li-layer5-maintainer.png new file mode 100644 index 000000000000..cbbd6a1ef086 Binary files /dev/null and b/src/collections/blog/2024/09-27-meet-the-maintainer-aisuko-li/aisuko-li-layer5-maintainer.png differ diff --git a/src/collections/blog/2024/09-27-meet-the-maintainer-aisuko-li/post.mdx b/src/collections/blog/2024/09-27-meet-the-maintainer-aisuko-li/post.mdx new file mode 100644 index 000000000000..1d07776600b4 --- /dev/null +++ b/src/collections/blog/2024/09-27-meet-the-maintainer-aisuko-li/post.mdx @@ -0,0 +1,279 @@ +--- +title: "Meet the Maintainer: Aisuko Li" +subtitle: "An interview series with open source maintainers" +date: 2024-09-27 10:30:05 -0530 +author: Anita Ihuman +thumbnail: ./aisuko-li-layer5-maintainer.png +darkthumbnail: ./aisuko-li-layer5-maintainer.png +description: Meet the Maintainer series with open source maintainer, Aisuko Li +type: Blog +category: Open Source +tags: + - Open Source +featured: false +published: true +--- + +import { BlogWrapper } from "../../Blog.style.js"; +import img from "./aisuko-li-layer5-maintainer.png"; +import { MeetTheMaintainer } from "../../MeetTheMaintainer.style.js"; +import { Link } from "gatsby"; +import ForkLift from "../../../../assets/images/app/hero/forklift.svg"; + + + + +
+

+ Continuing in our Meet the Maintainer series, we have{" "} + Aisuko Li. Aisuko is a + maintainer of the{" "} + Meshery Adapters{" "} + project. In this interview, we get to know Aisuko a little better and learn + about his journey as an open source project maintainer and with Layer5 + community. +

+
+ +
+ Anita: +

+ Aisuko, thank you for joining me today. Many people inside and outside of + the Layer5 Community have seen the effects of your contributions, but may + not know the backstory as to who Aisuko is and how you arrived at your + maintainer role. Indulge us. How did you discover the Layer5 community? What + made you stay? +

+
+ +
+ Aisuko: +

+ Thanks for having me here. Actually, Aisuko is my code name. My real name is Bowen Li. I love both of + I used to work for RancherLabs for a while, and I worked to maintain the official Helm (a third-party management tool for Kubernetes manifests) charts repo. These experiences helped me contribute to creating and maintaining Meshery Helm charts. +
+ I like open source software, and I love contributing to the community. + The more you contribute, the more permission you get to help the + community grow and improve. +
+ The Layer5 community is a true open source community. Everyone here can find + a comfortable role. I have been here since 2019 (a long time ago). I’ve seen + new members join and some leave. It's great to see people work together without + any other conditions. This is one of the ways I have fun. +

+
+ +
+ Anita: +

+ You’ve been consistently contributing to a large number of Layer5 projects + (Meshery adapters, mesheryctl, SMI, SMP). Layer5 has a large collection of + active projects. Which one are you currently focusing on? Psst. Also, + which one’s your favorite? I won’t tell. +

+
+ +
+ Aisuko: +

+ Actually, the Meshery project in 2021-2022 has changed a lot. More skilled and + talented contributors joined the community. They are so professional and + active, and their hard work has made Meshery more powerful than before. For + instance, projects like `meshkit` and `meshsync` have grown significantly. + It’s great to have such a strong team working together. +
+ Right now, I am primarily focusing on the `meshery-operator` project and + `meshery-linkerd`, along with fixing bugs across all the projects. I always + aim to make all the projects more controllable and maintain high code quality. +

+
+ +
+ Anita: +

+ Have you worked with any other open source projects? How does Layer5 compare? +

+
+ +
+ Aisuko: +

+ I was active in the Rancher community and the Helm charts project, where I owned + three charts. I’m also still a maintainer of the GNU Hurd. Recently, I’ve been + working on contributions to Kubernetes community projects as well. +
+ Compared to the Layer5 community, the Kubernetes community is much larger. + Many members are not very active, so it can be difficult to get feedback + on PRs and issues from inactive members. +
+ The GNU Hurd project is unique, so there’s no need to compare it with others. + In the Layer5 community, we have a warm welcome for new contributors, and most + projects have active reviewers who provide feedback quickly. +

+
+ +
+ Anita: +

Fascinating. Why did you pick service meshes specifically, though?

+
+ +
+ Aisuko: +

+ I have worked with many middle- and small-sized companies that wanted to migrate + to the cloud. It’s easy to move to Kubernetes, but it’s hard to ensure everything + runs smoothly. You have limited visibility into what’s happening in the cluster, + and service mesh solves that problem by showing real-time traffic. +
+ Service mesh provides direct insights into traffic flows, which is its most useful feature. +

+
+ +
+ Anita: +

+ Haha. Leading on from that, what should Meshery dream about next? What can we hope + to contribute to the service mesh landscape in your opinion? +

+
+ +
+ Aisuko: +

+ I once talked to Lee, the founder of Layer5. Due to time zone differences, we don’t + get many chances to discuss things directly. But I believe we don’t need to create + a new service mesh. +
+ What we should do is provide third-party performance tools for existing service + mesh projects. We should give the choice back to the users, letting them pick the + service mesh that best suits their needs. +
+ We should contribute to SMI and CNCF projects, helping to define performance standards + for the cloud-native industry. That’s why I’m keen on joining these communities. +

+
+ +
+ Anita: +

+ Interesting. Do expand on that. What do you think Meshery could offer, in addition to what it already does? +

+
+ +
+ Aisuko: +

+ I believe we can offer a CNCF-standard performance tool for all service mesh + applications. We can collaborate with service mesh maintainers to define these + standards, which would be beneficial for end-users. It’s similar to what we did + with SMI. +

+
+ +
+ Anita: +

What are today's challenges when working with service meshes?

+
+ +
+ Aisuko: +

+ Even though service mesh has many features, it's still not always stable in production. + I remember that even Istio (v1.1x) couldn’t be upgraded to newer versions easily. +
+ Additionally, we don’t often get test results from real production environments. + Right now, the focus is on multi-cluster service mesh capabilities, which brings + new challenges. +

+
+ +
+ Anita: +

+ That’s good to hear. What do you think we should look forward to with respect to service mesh development? +

+
+ +
+ Aisuko: +

+ I’ve worked with service mesh applications like Linkerd2, Istio, and OSM in development environments. OSM is my preference because it’s modular and has a simpler architecture compared to others. +
+ From my experience, I believe that not all environments need all the features of a service mesh. Some middle or small companies may only need visibility into traffic flows without complex features like mTLS. +
+ So, we should focus on simple architecture and features. For example, integrating traffic visualization with Ingress, so users don’t need to create new custom resources to track traffic. +

+
+ +
+ Anita: +

+ Ah, while I have you here, let me get more reading recommendations lined up. + Cloud Native and especially the field of service meshes is evolving + exceptionally fast. Keeping up with all the developments can be challenging. + Which resources do you use to stay up-to-date? +

+
+ +
+ Aisuko: +

+ People are always interested in new technology, but we are limited by time. I believe + that continuing to contribute to the service mesh open source community is the best way + to stay updated. +
+ Articles and news may include the author’s personal opinions, and we don't always know + if they have strong relationships with the community. We should maintain critical thinking + and focus on solving real-world problems. The best way to learn is through hands-on experience. +

+
+ +
+ Anita: +

+ What does being a Meshery maintainer mean to you? How has being a maintainer impacted your full-time role? +

+
+ +
+ Aisuko: +

+ It’s an honor to be a maintainer of the Meshery community. The membership + is a reward for contributing to the community. Being a maintainer has made me + more enthusiastic about contributing to open source projects. It has also given + me confidence to contribute to other projects. +

+
+ +
+ Anita: +

+ Do you have any advice for individuals hoping to become Layer5 contributors + or potentially maintainers? +

+
+ +
+ Aisuko: +

+ The Layer5 and Meshery communities are always welcoming to everyone. + New features are great, but there’s more to contributing than just code. + For example, writing unit tests and code comments is just as important as + adding new features. +
+ One of our goals is to provide an opportunity for everyone who wants to contribute + to open source projects, so we need to maintain a high level of code quality. +

+
+ +
+ +

+ The Meshery project moves at an impressive pace thanks to maintainers like + Aisuko. Be like Aisuko. Join the{" "} + Layer5 Slack and say “hi". +

+
+ +
+
diff --git a/src/collections/blog/2024/10-22-meet-the-maintainer-aadhitya-amarendiran/aadhitya-amarendiran-layer5-maintainer.png b/src/collections/blog/2024/10-22-meet-the-maintainer-aadhitya-amarendiran/aadhitya-amarendiran-layer5-maintainer.png new file mode 100644 index 000000000000..8fa9efbe6df3 Binary files /dev/null and b/src/collections/blog/2024/10-22-meet-the-maintainer-aadhitya-amarendiran/aadhitya-amarendiran-layer5-maintainer.png differ diff --git a/src/collections/blog/2024/10-22-meet-the-maintainer-aadhitya-amarendiran/post.mdx b/src/collections/blog/2024/10-22-meet-the-maintainer-aadhitya-amarendiran/post.mdx new file mode 100644 index 000000000000..4c1d851741be --- /dev/null +++ b/src/collections/blog/2024/10-22-meet-the-maintainer-aadhitya-amarendiran/post.mdx @@ -0,0 +1,197 @@ +--- +title: "Meet the Maintainer: Aadhitya Amarendiran" +subtitle: "An interview series with open source maintainers" +date: 2024-09-08 10:30:05 -0530 +author: Vivek Vishal +thumbnail: ./aadhitya-amarendiran-layer5-maintainer.png +darkthumbnail: ./aadhitya-amarendiran-layer5-maintainer.png +description: Meet the Maintainer series with open source maintainer, Aadhitya Amarendiran +type: Blog +category: Open Source +tags: + - Open Source +featured: false +published: true +--- + +import { BlogWrapper } from "../../Blog.style.js"; +import img from "./aadhitya-amarendiran-layer5-maintainer.png"; +import { MeetTheMaintainer } from "../../MeetTheMaintainer.style.js"; +import { Link } from "gatsby"; +import ForkLift from "../../../../assets/images/app/hero/forklift.svg"; + + + + +
+

+ Continuing in our Meet the Maintainer series, we have{" "} + Aadhitya Amarendiran. Aadhitya + is a maintainer of the{" "} + Meshery CLI project. In + this interview, we get to know Aadhitya a little better and learn about his + journey as an open source project maintainer and with Layer5 community. +

+
+ +
+ Vivek: +

+ Aadhitya, thank you for joining me today. Many people inside and outside of the Layer5 Community have seen the effects of your contributions, but may not know the backstory as to who Aadhitya is and how you arrived at your maintainer role. Indulge us. How did you discover the Layer5 community? What made you stay? +

+
+ +
+ Aadhitya: +

+ It was around the year 2020 when I was a sophomore and explored many things in the field of open source. I got to know about Meshery via the LFX program and tried applying for it, though I was a newcomer at that time. Later, I learned more about Layer5, started attending the community call, and met the community. The community members helped me a lot wherever I got stuck as a newcomer, which made me learn new things and involve myself in the project, which later helped me grow. Oh, of course, great learning sessions from Lee during development and community calls. +

+
+ +
+ Vivek: +

+ You’re a Meshery Maintainer and have been for some long time now. What does + being a Meshery maintainer mean to you? +

+
+ +
+ Aadhitya: +

+ Three things come into my mind: Learning lots of new things, Challenging yourself to your limits and being a helpful navigator for contributors. During my time as a newcomer, I started out with a simple readme fix PR in the Meshery project, which I thought would cause less impact. But the maintainers accepted my PR though it’s a very small one. That instilled a feeling in me that I should give back to the community by helping newcomers and contributors whenever they are stuck in work. +

+
+ +
+ Vivek: +

Have you worked with any other open source project? How does Layer5 compare?

+
+ +
+ Aadhitya: +

+ Not a lot, but I worked on quite a few open source projects. Layer5 is one of the best places to start if you are new to open source. By being involved in the community, you will feel and understand the spirit of open source. +

+
+ +
+ Vivek: +

+ Layer5 projects have a number of active, open + source projects. You’ve been consistently contributing to a few of them. + Which one(s) are you currently focusing on? +

+
+ +
+ Aadhitya: +

+ I currently work on Meshery, as it piqued my interest during my initial days. I also work on the Meshery-SMP GitHub action project as well. +

+
+ +
+ Vivek: +

What’s the coolest Meshery demo you have done/seen?

+
+ +
+ Aadhitya: +

+ I’ve seen a lot of demos but the coolest one for me is the Meshery Docker extension where you can start and use Meshery right from DockerHub! +

+
+ +
+ Vivek: +

+ What is your favorite Meshery CLI Command? +

+
+ +
+ Aadhitya: +

Oof! That’s a tricky one. But my favorite one is definitely mesheryctl perf

+
+ +
+ Vivek: +

What is your hot tip for working with Meshery that others may not know?

+
+ +
+ Aadhitya: +

+ If you’re starting out with Meshery, make sure to use the Meshery Playground if you want to get hands-on for the first time without the need to deploy Meshery in your system. After you get the basics right, install Meshery and log in to your deployed instance. You’ll see that your designs, performance test results and configurations remain intact in your instance as if they are present exactly the same in the Playground. There’s no need to start from scratch. Just continue where you left off! +

+
+ +
+ Vivek: +

+ Where do you see opportunities for contributors to get involved within Meshery and Layer5 community? +

+
+ +
+ Aadhitya: +

Considering the fact that Meshery is now a part of CNCF (especially the fact that we are aiming for the Incubation status as well!), I feel that Meshery has a wide range of scope for contributors to be involved in. Whether you’re an expert or a newbie, Meshery has lots of subdomains to contribute. Documentation, Frontend, Backend, Adapters… the list goes on.

+
+ +
+ Vivek: +

+ Your most often used emoji? Your preference: movie or book? Morning person + or night owl? What have you worked on in the past six months that you’re + particularly proud of? +

+
+ +
+ Aadhitya: +

+ Most used emoji: 😎. I’m a morning person usually and sleep early, but sometimes I’m a night owl when it comes to intense work. I’d prefer movies compared to books as for some they clearly adapt from books. I’ve worked on refactoring the mesheryctl pattern command to mesheryctl design without losing the core features present. This took me a bit of time as I had to balance my current work as well which caused a bit of inactivity. But I managed to complete it, and I’m proud of doing such great work! +

+
+ +
+ Vivek: +

+ Do you have any advice for individuals hopeful to become Layer5 contributors + or potentially maintainers? +

+
+ +
+ Aadhitya: +

+ Make your presence stand out from the crowd even if you are a beginner, and learn as much as you can. Seek MeshMates and maintainers if you get stuck in something. Ask questions during meets or in Slack, and get feedback on your PRs, doesn’t matter if it’s big or small. Incorporate feedback and improvise. Remember, communication is the key, and be active! +

+
+ +
+ Vivek: +

+ In other words, whether your contribution is big or small, it sounds like aiming for high-quality contributions that add value to the projects is key. +

+
+ +
+ Aadhitya: +

+ Yes, you got it right! Even the smallest contribution which creates a good impact in a project becomes a great factor in Open source. All that matters is perseverance, challenging yourself to limits and learning. Do these things right and you’ll find yourself growing in the community. +

+
+ +
+ +

+ The Meshery project moves at an impressive pace thanks to maintainers like + Aadhitya. Be like Aadhitya. Join the{" "} + Layer5 Slack and say “hi". +

+
+ +
+
diff --git a/src/collections/blog/2024/11-05-what-is-the-kanvas-catalog/post.mdx b/src/collections/blog/2024/11-05-what-is-the-kanvas-catalog/post.mdx index 3264a6af7d6f..1f53b04f9ee0 100644 --- a/src/collections/blog/2024/11-05-what-is-the-kanvas-catalog/post.mdx +++ b/src/collections/blog/2024/11-05-what-is-the-kanvas-catalog/post.mdx @@ -24,7 +24,7 @@ import { Link } from "gatsby"; Kanvas Catalog is a hub for sharing and discovering best practices, reusable templates, and operational patterns for Kubernetes and cloud-native infrastructure. It's like a marketplace where you can find and contribute pre-built infrastructure configurations and operational views. The Catalog is a part of the Kanvas platform, which is a comprehensive suite of tools for managing cloud-native infrastructure. -
Explore the catalog
+
Explore the catalog
### What can you find in the Catalog? diff --git a/src/collections/integrations/antrea/index.mdx b/src/collections/integrations/antrea/index.mdx index 16456c8e0a7d..cf138d411dc3 100644 --- a/src/collections/integrations/antrea/index.mdx +++ b/src/collections/integrations/antrea/index.mdx @@ -115,7 +115,7 @@ components: [ "name": "packet-capture", "colorIcon": "icons/components/packet-capture/icons/color/packet-capture-color.svg", "whiteIcon": "icons/components/packet-capture/icons/white/packet-capture-white.svg", -"description": "#00c1d5", +"description": "", }] featureList: [ "Network policy enforcement", diff --git a/src/collections/integrations/cloudnative-pg/icons/components/database/icons/color/database-color.svg b/src/collections/integrations/cloudnative-pg/icons/components/database/icons/color/database-color.svg new file mode 100644 index 000000000000..0d48a57cc865 --- /dev/null +++ b/src/collections/integrations/cloudnative-pg/icons/components/database/icons/color/database-color.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/collections/integrations/cloudnative-pg/icons/components/database/icons/white/database-white.svg b/src/collections/integrations/cloudnative-pg/icons/components/database/icons/white/database-white.svg new file mode 100644 index 000000000000..85acca51dd85 --- /dev/null +++ b/src/collections/integrations/cloudnative-pg/icons/components/database/icons/white/database-white.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/collections/integrations/cloudnative-pg/icons/components/publication/icons/color/publication-color.svg b/src/collections/integrations/cloudnative-pg/icons/components/publication/icons/color/publication-color.svg new file mode 100644 index 000000000000..0d48a57cc865 --- /dev/null +++ b/src/collections/integrations/cloudnative-pg/icons/components/publication/icons/color/publication-color.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/collections/integrations/cloudnative-pg/icons/components/publication/icons/white/publication-white.svg b/src/collections/integrations/cloudnative-pg/icons/components/publication/icons/white/publication-white.svg new file mode 100644 index 000000000000..85acca51dd85 --- /dev/null +++ b/src/collections/integrations/cloudnative-pg/icons/components/publication/icons/white/publication-white.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/collections/integrations/cloudnative-pg/icons/components/subscription/icons/color/subscription-color.svg b/src/collections/integrations/cloudnative-pg/icons/components/subscription/icons/color/subscription-color.svg new file mode 100644 index 000000000000..0d48a57cc865 --- /dev/null +++ b/src/collections/integrations/cloudnative-pg/icons/components/subscription/icons/color/subscription-color.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/collections/integrations/cloudnative-pg/icons/components/subscription/icons/white/subscription-white.svg b/src/collections/integrations/cloudnative-pg/icons/components/subscription/icons/white/subscription-white.svg new file mode 100644 index 000000000000..85acca51dd85 --- /dev/null +++ b/src/collections/integrations/cloudnative-pg/icons/components/subscription/icons/white/subscription-white.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/collections/integrations/cloudnative-pg/index.mdx b/src/collections/integrations/cloudnative-pg/index.mdx index 18694957d280..9eae4cdf2f1d 100644 --- a/src/collections/integrations/cloudnative-pg/index.mdx +++ b/src/collections/integrations/cloudnative-pg/index.mdx @@ -44,6 +44,24 @@ components: [ "colorIcon": "icons/components/scheduled-backup/icons/color/scheduled-backup-color.svg", "whiteIcon": "icons/components/scheduled-backup/icons/white/scheduled-backup-white.svg", "description": "", +}, +{ +"name": "database", +"colorIcon": "icons/components/database/icons/color/database-color.svg", +"whiteIcon": "icons/components/database/icons/white/database-white.svg", +"description": "", +}, +{ +"name": "publication", +"colorIcon": "icons/components/publication/icons/color/publication-color.svg", +"whiteIcon": "icons/components/publication/icons/white/publication-white.svg", +"description": "", +}, +{ +"name": "subscription", +"colorIcon": "icons/components/subscription/icons/color/subscription-color.svg", +"whiteIcon": "icons/components/subscription/icons/white/subscription-white.svg", +"description": "", }] featureList: [ "Automates PostgreSQL deployment and management", diff --git a/src/collections/integrations/gatekeeper/icons/components/config-pod-status/icons/color/config-pod-status-color.svg b/src/collections/integrations/gatekeeper/icons/components/config-pod-status/icons/color/config-pod-status-color.svg new file mode 100644 index 000000000000..fd8cf702971f --- /dev/null +++ b/src/collections/integrations/gatekeeper/icons/components/config-pod-status/icons/color/config-pod-status-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/gatekeeper/icons/components/config-pod-status/icons/white/config-pod-status-white.svg b/src/collections/integrations/gatekeeper/icons/components/config-pod-status/icons/white/config-pod-status-white.svg new file mode 100644 index 000000000000..a2f8cc72d50d --- /dev/null +++ b/src/collections/integrations/gatekeeper/icons/components/config-pod-status/icons/white/config-pod-status-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/gatekeeper/index.mdx b/src/collections/integrations/gatekeeper/index.mdx index d9f70378ba35..a6ce516b6b8a 100644 --- a/src/collections/integrations/gatekeeper/index.mdx +++ b/src/collections/integrations/gatekeeper/index.mdx @@ -86,6 +86,12 @@ components: [ "colorIcon": "icons/components/sync-set/icons/color/sync-set-color.svg", "whiteIcon": "icons/components/sync-set/icons/white/sync-set-white.svg", "description": "", +}, +{ +"name": "config-pod-status", +"colorIcon": "icons/components/config-pod-status/icons/color/config-pod-status-color.svg", +"whiteIcon": "icons/components/config-pod-status/icons/white/config-pod-status-white.svg", +"description": "", }] featureList: [ "Native Kubernetes CRDs for instantiating the policy library (aka constraints)", diff --git a/src/collections/integrations/k8s-config-connector/icons/components/discovery-engine-data-store/icons/color/discovery-engine-data-store-color.svg b/src/collections/integrations/k8s-config-connector/icons/components/discovery-engine-data-store/icons/color/discovery-engine-data-store-color.svg new file mode 100644 index 000000000000..3a66f9c1117e --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/discovery-engine-data-store/icons/color/discovery-engine-data-store-color.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/collections/integrations/k8s-config-connector/icons/components/discovery-engine-data-store/icons/white/discovery-engine-data-store-white.svg b/src/collections/integrations/k8s-config-connector/icons/components/discovery-engine-data-store/icons/white/discovery-engine-data-store-white.svg new file mode 100644 index 000000000000..941c48f8914b --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/discovery-engine-data-store/icons/white/discovery-engine-data-store-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/collections/integrations/k8s-config-connector/icons/components/kms-autokey-config/icons/color/kms-autokey-config-color.svg b/src/collections/integrations/k8s-config-connector/icons/components/kms-autokey-config/icons/color/kms-autokey-config-color.svg new file mode 100644 index 000000000000..3a66f9c1117e --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/kms-autokey-config/icons/color/kms-autokey-config-color.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/collections/integrations/k8s-config-connector/icons/components/kms-autokey-config/icons/white/kms-autokey-config-white.svg b/src/collections/integrations/k8s-config-connector/icons/components/kms-autokey-config/icons/white/kms-autokey-config-white.svg new file mode 100644 index 000000000000..941c48f8914b --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/kms-autokey-config/icons/white/kms-autokey-config-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/collections/integrations/k8s-config-connector/icons/components/kms-key-handle/icons/color/kms-key-handle-color.svg b/src/collections/integrations/k8s-config-connector/icons/components/kms-key-handle/icons/color/kms-key-handle-color.svg new file mode 100644 index 000000000000..3a66f9c1117e --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/kms-key-handle/icons/color/kms-key-handle-color.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/collections/integrations/k8s-config-connector/icons/components/kms-key-handle/icons/white/kms-key-handle-white.svg b/src/collections/integrations/k8s-config-connector/icons/components/kms-key-handle/icons/white/kms-key-handle-white.svg new file mode 100644 index 000000000000..941c48f8914b --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/kms-key-handle/icons/white/kms-key-handle-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/collections/integrations/k8s-config-connector/icons/components/privileged-access-manager-entitlement/icons/color/privileged-access-manager-entitlement-color.svg b/src/collections/integrations/k8s-config-connector/icons/components/privileged-access-manager-entitlement/icons/color/privileged-access-manager-entitlement-color.svg new file mode 100644 index 000000000000..3a66f9c1117e --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/privileged-access-manager-entitlement/icons/color/privileged-access-manager-entitlement-color.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/collections/integrations/k8s-config-connector/icons/components/privileged-access-manager-entitlement/icons/white/privileged-access-manager-entitlement-white.svg b/src/collections/integrations/k8s-config-connector/icons/components/privileged-access-manager-entitlement/icons/white/privileged-access-manager-entitlement-white.svg new file mode 100644 index 000000000000..d2a4a09d44fa --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/privileged-access-manager-entitlement/icons/white/privileged-access-manager-entitlement-white.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/collections/integrations/k8s-config-connector/icons/components/secure-source-manager-repository/icons/color/secure-source-manager-repository-color.svg b/src/collections/integrations/k8s-config-connector/icons/components/secure-source-manager-repository/icons/color/secure-source-manager-repository-color.svg new file mode 100644 index 000000000000..3a66f9c1117e --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/secure-source-manager-repository/icons/color/secure-source-manager-repository-color.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/collections/integrations/k8s-config-connector/icons/components/secure-source-manager-repository/icons/white/secure-source-manager-repository-white.svg b/src/collections/integrations/k8s-config-connector/icons/components/secure-source-manager-repository/icons/white/secure-source-manager-repository-white.svg new file mode 100644 index 000000000000..941c48f8914b --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/secure-source-manager-repository/icons/white/secure-source-manager-repository-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/collections/integrations/k8s-config-connector/icons/components/workstation-cluster/icons/color/workstation-cluster-color.svg b/src/collections/integrations/k8s-config-connector/icons/components/workstation-cluster/icons/color/workstation-cluster-color.svg new file mode 100644 index 000000000000..3a66f9c1117e --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/workstation-cluster/icons/color/workstation-cluster-color.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/collections/integrations/k8s-config-connector/icons/components/workstation-cluster/icons/white/workstation-cluster-white.svg b/src/collections/integrations/k8s-config-connector/icons/components/workstation-cluster/icons/white/workstation-cluster-white.svg new file mode 100644 index 000000000000..941c48f8914b --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/workstation-cluster/icons/white/workstation-cluster-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/collections/integrations/k8s-config-connector/index.mdx b/src/collections/integrations/k8s-config-connector/index.mdx index adc4d4305ff9..9256cedddc2c 100644 --- a/src/collections/integrations/k8s-config-connector/index.mdx +++ b/src/collections/integrations/k8s-config-connector/index.mdx @@ -2096,6 +2096,42 @@ components: [ "colorIcon": "icons/components/gke-hub-feature/icons/color/gke-hub-feature-color.svg", "whiteIcon": "icons/components/gke-hub-feature/icons/white/gke-hub-feature-white.svg", "description": "", +}, +{ +"name": "privileged-access-manager-entitlement", +"colorIcon": "icons/components/privileged-access-manager-entitlement/icons/color/privileged-access-manager-entitlement-color.svg", +"whiteIcon": "icons/components/privileged-access-manager-entitlement/icons/white/privileged-access-manager-entitlement-white.svg", +"description": "", +}, +{ +"name": "workstation-cluster", +"colorIcon": "icons/components/workstation-cluster/icons/color/workstation-cluster-color.svg", +"whiteIcon": "icons/components/workstation-cluster/icons/white/workstation-cluster-white.svg", +"description": "", +}, +{ +"name": "discovery-engine-data-store", +"colorIcon": "icons/components/discovery-engine-data-store/icons/color/discovery-engine-data-store-color.svg", +"whiteIcon": "icons/components/discovery-engine-data-store/icons/white/discovery-engine-data-store-white.svg", +"description": "", +}, +{ +"name": "kms-autokey-config", +"colorIcon": "icons/components/kms-autokey-config/icons/color/kms-autokey-config-color.svg", +"whiteIcon": "icons/components/kms-autokey-config/icons/white/kms-autokey-config-white.svg", +"description": "", +}, +{ +"name": "kms-key-handle", +"colorIcon": "icons/components/kms-key-handle/icons/color/kms-key-handle-color.svg", +"whiteIcon": "icons/components/kms-key-handle/icons/white/kms-key-handle-white.svg", +"description": "", +}, +{ +"name": "secure-source-manager-repository", +"colorIcon": "icons/components/secure-source-manager-repository/icons/color/secure-source-manager-repository-color.svg", +"whiteIcon": "icons/components/secure-source-manager-repository/icons/white/secure-source-manager-repository-white.svg", +"description": "", }] featureList: [ "Provides a wide range of cloud services", diff --git a/src/collections/integrations/keda/index.mdx b/src/collections/integrations/keda/index.mdx index a9cc3be78bef..8d7a268a2d4d 100644 --- a/src/collections/integrations/keda/index.mdx +++ b/src/collections/integrations/keda/index.mdx @@ -49,7 +49,7 @@ components: [ "name": "cluster-cloud-event-source", "colorIcon": "icons/components/cluster-cloud-event-source/icons/color/cluster-cloud-event-source-color.svg", "whiteIcon": "icons/components/cluster-cloud-event-source/icons/white/cluster-cloud-event-source-white.svg", -"description": "#326de6", +"description": "", }] featureList: [ "Scales applications based on various metrics", diff --git a/src/collections/integrations/knative/icons/components/cluster-ingress/icons/color/cluster-ingress-color.svg b/src/collections/integrations/knative/icons/components/cluster-ingress/icons/color/cluster-ingress-color.svg new file mode 100644 index 000000000000..64c3ec97e09a --- /dev/null +++ b/src/collections/integrations/knative/icons/components/cluster-ingress/icons/color/cluster-ingress-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/cluster-ingress/icons/white/cluster-ingress-white.svg b/src/collections/integrations/knative/icons/components/cluster-ingress/icons/white/cluster-ingress-white.svg new file mode 100644 index 000000000000..96eda4b47c97 --- /dev/null +++ b/src/collections/integrations/knative/icons/components/cluster-ingress/icons/white/cluster-ingress-white.svg @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/configuration/icons/color/configuration-color.svg b/src/collections/integrations/knative/icons/components/configuration/icons/color/configuration-color.svg new file mode 100644 index 000000000000..64c3ec97e09a --- /dev/null +++ b/src/collections/integrations/knative/icons/components/configuration/icons/color/configuration-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/configuration/icons/white/configuration-white.svg b/src/collections/integrations/knative/icons/components/configuration/icons/white/configuration-white.svg new file mode 100644 index 000000000000..96eda4b47c97 --- /dev/null +++ b/src/collections/integrations/knative/icons/components/configuration/icons/white/configuration-white.svg @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/ingress/icons/color/ingress-color.svg b/src/collections/integrations/knative/icons/components/ingress/icons/color/ingress-color.svg new file mode 100644 index 000000000000..64c3ec97e09a --- /dev/null +++ b/src/collections/integrations/knative/icons/components/ingress/icons/color/ingress-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/ingress/icons/white/ingress-white.svg b/src/collections/integrations/knative/icons/components/ingress/icons/white/ingress-white.svg new file mode 100644 index 000000000000..96eda4b47c97 --- /dev/null +++ b/src/collections/integrations/knative/icons/components/ingress/icons/white/ingress-white.svg @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/pod-autoscaler/icons/color/pod-autoscaler-color.svg b/src/collections/integrations/knative/icons/components/pod-autoscaler/icons/color/pod-autoscaler-color.svg new file mode 100644 index 000000000000..64c3ec97e09a --- /dev/null +++ b/src/collections/integrations/knative/icons/components/pod-autoscaler/icons/color/pod-autoscaler-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/pod-autoscaler/icons/white/pod-autoscaler-white.svg b/src/collections/integrations/knative/icons/components/pod-autoscaler/icons/white/pod-autoscaler-white.svg new file mode 100644 index 000000000000..96eda4b47c97 --- /dev/null +++ b/src/collections/integrations/knative/icons/components/pod-autoscaler/icons/white/pod-autoscaler-white.svg @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/revision/icons/color/revision-color.svg b/src/collections/integrations/knative/icons/components/revision/icons/color/revision-color.svg new file mode 100644 index 000000000000..64c3ec97e09a --- /dev/null +++ b/src/collections/integrations/knative/icons/components/revision/icons/color/revision-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/revision/icons/white/revision-white.svg b/src/collections/integrations/knative/icons/components/revision/icons/white/revision-white.svg new file mode 100644 index 000000000000..96eda4b47c97 --- /dev/null +++ b/src/collections/integrations/knative/icons/components/revision/icons/white/revision-white.svg @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/route/icons/color/route-color.svg b/src/collections/integrations/knative/icons/components/route/icons/color/route-color.svg new file mode 100644 index 000000000000..64c3ec97e09a --- /dev/null +++ b/src/collections/integrations/knative/icons/components/route/icons/color/route-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/route/icons/white/route-white.svg b/src/collections/integrations/knative/icons/components/route/icons/white/route-white.svg new file mode 100644 index 000000000000..96eda4b47c97 --- /dev/null +++ b/src/collections/integrations/knative/icons/components/route/icons/white/route-white.svg @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/serverless-service/icons/color/serverless-service-color.svg b/src/collections/integrations/knative/icons/components/serverless-service/icons/color/serverless-service-color.svg new file mode 100644 index 000000000000..64c3ec97e09a --- /dev/null +++ b/src/collections/integrations/knative/icons/components/serverless-service/icons/color/serverless-service-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/serverless-service/icons/white/serverless-service-white.svg b/src/collections/integrations/knative/icons/components/serverless-service/icons/white/serverless-service-white.svg new file mode 100644 index 000000000000..96eda4b47c97 --- /dev/null +++ b/src/collections/integrations/knative/icons/components/serverless-service/icons/white/serverless-service-white.svg @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/service/icons/color/service-color.svg b/src/collections/integrations/knative/icons/components/service/icons/color/service-color.svg new file mode 100644 index 000000000000..64c3ec97e09a --- /dev/null +++ b/src/collections/integrations/knative/icons/components/service/icons/color/service-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/knative/icons/components/service/icons/white/service-white.svg b/src/collections/integrations/knative/icons/components/service/icons/white/service-white.svg new file mode 100644 index 000000000000..96eda4b47c97 --- /dev/null +++ b/src/collections/integrations/knative/icons/components/service/icons/white/service-white.svg @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/src/collections/integrations/knative/index.mdx b/src/collections/integrations/knative/index.mdx index ef3935ca8431..8492bdb00dfb 100644 --- a/src/collections/integrations/knative/index.mdx +++ b/src/collections/integrations/knative/index.mdx @@ -74,6 +74,54 @@ components: [ "colorIcon": "icons/components/trigger/icons/color/trigger-color.svg", "whiteIcon": "icons/components/trigger/icons/white/trigger-white.svg", "description": "", +}, +{ +"name": "cluster-ingress", +"colorIcon": "icons/components/cluster-ingress/icons/color/cluster-ingress-color.svg", +"whiteIcon": "icons/components/cluster-ingress/icons/white/cluster-ingress-white.svg", +"description": "", +}, +{ +"name": "ingress", +"colorIcon": "icons/components/ingress/icons/color/ingress-color.svg", +"whiteIcon": "icons/components/ingress/icons/white/ingress-white.svg", +"description": "", +}, +{ +"name": "pod-autoscaler", +"colorIcon": "icons/components/pod-autoscaler/icons/color/pod-autoscaler-color.svg", +"whiteIcon": "icons/components/pod-autoscaler/icons/white/pod-autoscaler-white.svg", +"description": "", +}, +{ +"name": "serverless-service", +"colorIcon": "icons/components/serverless-service/icons/color/serverless-service-color.svg", +"whiteIcon": "icons/components/serverless-service/icons/white/serverless-service-white.svg", +"description": "", +}, +{ +"name": "configuration", +"colorIcon": "icons/components/configuration/icons/color/configuration-color.svg", +"whiteIcon": "icons/components/configuration/icons/white/configuration-white.svg", +"description": "", +}, +{ +"name": "revision", +"colorIcon": "icons/components/revision/icons/color/revision-color.svg", +"whiteIcon": "icons/components/revision/icons/white/revision-white.svg", +"description": "", +}, +{ +"name": "route", +"colorIcon": "icons/components/route/icons/color/route-color.svg", +"whiteIcon": "icons/components/route/icons/white/route-white.svg", +"description": "", +}, +{ +"name": "service", +"colorIcon": "icons/components/service/icons/color/service-color.svg", +"whiteIcon": "icons/components/service/icons/white/service-white.svg", +"description": "", }] featureList: [ "Provides building blocks for serverless", diff --git a/src/collections/integrations/kube-ui-server/icons/components/resource-outline-filter/icons/color/resource-outline-filter-color.svg b/src/collections/integrations/kube-ui-server/icons/components/resource-outline-filter/icons/color/resource-outline-filter-color.svg new file mode 100644 index 000000000000..b96151ed1c2c --- /dev/null +++ b/src/collections/integrations/kube-ui-server/icons/components/resource-outline-filter/icons/color/resource-outline-filter-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/kube-ui-server/icons/components/resource-outline-filter/icons/white/resource-outline-filter-white.svg b/src/collections/integrations/kube-ui-server/icons/components/resource-outline-filter/icons/white/resource-outline-filter-white.svg new file mode 100644 index 000000000000..c506b44faa1a --- /dev/null +++ b/src/collections/integrations/kube-ui-server/icons/components/resource-outline-filter/icons/white/resource-outline-filter-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/kube-ui-server/index.mdx b/src/collections/integrations/kube-ui-server/index.mdx index 6ac76f97e6a5..4fd512f5d9ae 100644 --- a/src/collections/integrations/kube-ui-server/index.mdx +++ b/src/collections/integrations/kube-ui-server/index.mdx @@ -80,6 +80,12 @@ components: [ "colorIcon": "icons/components/cluster-profile/icons/color/cluster-profile-color.svg", "whiteIcon": "icons/components/cluster-profile/icons/white/cluster-profile-white.svg", "description": "", +}, +{ +"name": "resource-outline-filter", +"colorIcon": "icons/components/resource-outline-filter/icons/color/resource-outline-filter-color.svg", +"whiteIcon": "icons/components/resource-outline-filter/icons/white/resource-outline-filter-white.svg", +"description": "", }] featureList: [ "WhoAmI service returns the user info of the user making the api call.", diff --git a/src/collections/integrations/kubernetes/icons/components/limit-range/icons/color/limit-range-color.svg b/src/collections/integrations/kubernetes/icons/components/limit-range/icons/color/limit-range-color.svg index fca385123ecb..56f4608a0b5c 100644 --- a/src/collections/integrations/kubernetes/icons/components/limit-range/icons/color/limit-range-color.svg +++ b/src/collections/integrations/kubernetes/icons/components/limit-range/icons/color/limit-range-color.svg @@ -1,3 +1,3 @@ - + diff --git a/src/collections/integrations/kubernetes/icons/components/limit-range/icons/white/limit-range-white.svg b/src/collections/integrations/kubernetes/icons/components/limit-range/icons/white/limit-range-white.svg index 8fcf9c9f8f58..670b24782e27 100644 --- a/src/collections/integrations/kubernetes/icons/components/limit-range/icons/white/limit-range-white.svg +++ b/src/collections/integrations/kubernetes/icons/components/limit-range/icons/white/limit-range-white.svg @@ -1,3 +1,3 @@ - + diff --git a/src/collections/integrations/open-policy-agent-(opa)/icons/components/config-pod-status/icons/color/config-pod-status-color.svg b/src/collections/integrations/open-policy-agent-(opa)/icons/components/config-pod-status/icons/color/config-pod-status-color.svg new file mode 100644 index 000000000000..fd8cf702971f --- /dev/null +++ b/src/collections/integrations/open-policy-agent-(opa)/icons/components/config-pod-status/icons/color/config-pod-status-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/open-policy-agent-(opa)/icons/components/config-pod-status/icons/white/config-pod-status-white.svg b/src/collections/integrations/open-policy-agent-(opa)/icons/components/config-pod-status/icons/white/config-pod-status-white.svg new file mode 100644 index 000000000000..a2f8cc72d50d --- /dev/null +++ b/src/collections/integrations/open-policy-agent-(opa)/icons/components/config-pod-status/icons/white/config-pod-status-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/open-policy-agent-(opa)/index.mdx b/src/collections/integrations/open-policy-agent-(opa)/index.mdx index 6a5b756e61f0..f5d60b147144 100644 --- a/src/collections/integrations/open-policy-agent-(opa)/index.mdx +++ b/src/collections/integrations/open-policy-agent-(opa)/index.mdx @@ -86,6 +86,18 @@ components: [ "colorIcon": "icons/components/sync-set/icons/color/sync-set-color.svg", "whiteIcon": "icons/components/sync-set/icons/white/sync-set-white.svg", "description": "", +}, +{ +"name": "config-pod-status", +"colorIcon": "icons/components/config-pod-status/icons/color/config-pod-status-color.svg", +"whiteIcon": "icons/components/config-pod-status/icons/white/config-pod-status-white.svg", +"description": "", +}, +{ +"name": "config-pod-status", +"colorIcon": "icons/components/config-pod-status/icons/color/config-pod-status-color.svg", +"whiteIcon": "icons/components/config-pod-status/icons/white/config-pod-status-white.svg", +"description": "", }] featureList: [ "Policy-based control for Kubernetes", diff --git a/src/collections/integrations/pulsar-resources-operator/icons/components/pulsar-ns-isolation-policy/icons/color/pulsar-ns-isolation-policy-color.svg b/src/collections/integrations/pulsar-resources-operator/icons/components/pulsar-ns-isolation-policy/icons/color/pulsar-ns-isolation-policy-color.svg new file mode 100644 index 000000000000..75cf18514507 --- /dev/null +++ b/src/collections/integrations/pulsar-resources-operator/icons/components/pulsar-ns-isolation-policy/icons/color/pulsar-ns-isolation-policy-color.svg @@ -0,0 +1,11 @@ + + + + diff --git a/src/collections/integrations/pulsar-resources-operator/icons/components/pulsar-ns-isolation-policy/icons/white/pulsar-ns-isolation-policy-white.svg b/src/collections/integrations/pulsar-resources-operator/icons/components/pulsar-ns-isolation-policy/icons/white/pulsar-ns-isolation-policy-white.svg new file mode 100644 index 000000000000..3b03e21f66f6 --- /dev/null +++ b/src/collections/integrations/pulsar-resources-operator/icons/components/pulsar-ns-isolation-policy/icons/white/pulsar-ns-isolation-policy-white.svg @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/src/collections/integrations/pulsar-resources-operator/index.mdx b/src/collections/integrations/pulsar-resources-operator/index.mdx index 3d761ec5f4b1..f7b434d39ce7 100644 --- a/src/collections/integrations/pulsar-resources-operator/index.mdx +++ b/src/collections/integrations/pulsar-resources-operator/index.mdx @@ -74,6 +74,18 @@ components: [ "colorIcon": "icons/components/pulsar-source/icons/color/pulsar-source-color.svg", "whiteIcon": "icons/components/pulsar-source/icons/white/pulsar-source-white.svg", "description": "", +}, +{ +"name": "pulsar-ns-isolation-policy", +"colorIcon": "icons/components/pulsar-ns-isolation-policy/icons/color/pulsar-ns-isolation-policy-color.svg", +"whiteIcon": "icons/components/pulsar-ns-isolation-policy/icons/white/pulsar-ns-isolation-policy-white.svg", +"description": "", +}, +{ +"name": "pulsar-ns-isolation-policy", +"colorIcon": "icons/components/pulsar-ns-isolation-policy/icons/color/pulsar-ns-isolation-policy-color.svg", +"whiteIcon": "icons/components/pulsar-ns-isolation-policy/icons/white/pulsar-ns-isolation-policy-white.svg", +"description": "", }] featureList: [ "Automates Pulsar resource management", diff --git a/src/collections/members/Hargun-Kaur/index.mdx b/src/collections/members/Hargun-Kaur/index.mdx index 5713b0e040fc..863782637a06 100644 --- a/src/collections/members/Hargun-Kaur/index.mdx +++ b/src/collections/members/Hargun-Kaur/index.mdx @@ -12,6 +12,6 @@ badges: - community - docs community_manager: yes -status: Active +status: Inactive published: true --- diff --git a/src/collections/members/Muhammad-Moinuddin/index.mdx b/src/collections/members/Muhammad-Moinuddin/index.mdx index 71c95517796d..930778c71946 100644 --- a/src/collections/members/Muhammad-Moinuddin/index.mdx +++ b/src/collections/members/Muhammad-Moinuddin/index.mdx @@ -10,6 +10,6 @@ location: Karachi, Pakistan bio: | Software Engineer - Computer Science - UoK. Passionate about web apps, cloud native and open source, eager to learn and innovate. -status: Active +status: Inactive published: true --- \ No newline at end of file diff --git a/src/collections/members/_member-profile-template/index.mdx b/src/collections/members/_member-profile-template/index.mdx index 8bfbfa25a84e..a250b8b4ab05 100644 --- a/src/collections/members/_member-profile-template/index.mdx +++ b/src/collections/members/_member-profile-template/index.mdx @@ -5,7 +5,7 @@ image_path: ./display-picture.webp github: # just the user handle (e.g. vinayaksh42) twitter: # just the user handle (e.g. Vinayak47427793) linkedin: # last portion of https://www.linkedin.com/in/ (e.g. vinayak-sharma-141096193) -layer5: # Layer5 Cloud user ID; last portion of https://meshery.layer5.io/user/ +layer5: # Layer5 Cloud user ID; last portion of https://cloud.layer5.io/user/ location: # City, Country bio: # One or two paragraphs about the community member, enclosed in quotation marks. badges: # List of badges that this member carries. diff --git a/src/collections/members/ahmed-hendawy/ahmed-hendawy.webp b/src/collections/members/ahmed-hendawy/ahmed-hendawy.webp new file mode 100644 index 000000000000..2aa2a3087504 Binary files /dev/null and b/src/collections/members/ahmed-hendawy/ahmed-hendawy.webp differ diff --git a/src/collections/members/ahmed-hendawy/index.mdx b/src/collections/members/ahmed-hendawy/index.mdx new file mode 100644 index 000000000000..00f204eac28a --- /dev/null +++ b/src/collections/members/ahmed-hendawy/index.mdx @@ -0,0 +1,15 @@ +--- +name: Ahmed Hendawy +position: Contributor +image_path: ./ahmed-hendawy.webp +github: devhindo +twitter: devhindo +linkedin: devhindo +layer5: c667a565-930a-4f7f-a29e-0a11ba392111 +location: Egypt +bio: "devhindo is a Software Engineer with a specialized focus on Backend and Cloud Development. He is highly proficient in Golang, Python, and JavaScript, languages he uses to architect and develop scalable, cloud-native applications. His expertise extends to distributed systems and now includes blockchain technologies, allowing him to tackle intricate software challenges with ease. devhindo is passionate about contributing to open source projects, sharing his knowledge and giving back to the community. Additionally, he excels in problem-solving and has a deep understanding of algorithms, which he applies to optimize and innovate within the tech ecosystem. His love for technology drives him to continuously learn and adapt to new frameworks and methodologies in the ever-evolving world of software engineering." +badges: + - meshery +status: Active +published: true +--- diff --git a/src/collections/members/aviral-asthana/index.mdx b/src/collections/members/aviral-asthana/index.mdx index 4d05f99b8145..81133b9ddc1d 100644 --- a/src/collections/members/aviral-asthana/index.mdx +++ b/src/collections/members/aviral-asthana/index.mdx @@ -7,6 +7,6 @@ linkedin: aviral-asthana-02b70824b layer5: 3f770688-e487-45c2-943b-c94b950d3d69 location: Ghaziabad, India bio: Aviral Asthana is a Computer Science student with a passion for full-stack web development. Proficient in the MERN stack, Aviral has hands-on experience in building robust applications and is keenly interested in Golang, Docker, and Kubernetes. He is dedicated to continuous improvement through contributions to open-source projects and actively engaging with the developer community. -status: Active +status: Inactive published: true --- \ No newline at end of file diff --git a/src/collections/members/rex-joshua/index.mdx b/src/collections/members/rex-joshua/index.mdx index d1d6c5e50fc9..b06fa1cbe0af 100644 --- a/src/collections/members/rex-joshua/index.mdx +++ b/src/collections/members/rex-joshua/index.mdx @@ -10,6 +10,6 @@ location: Lagos State, Nigeria. bio: I am a digital product designer passionate about the interaction between humans and technology. I am also a curious, adaptable, and effective person, capable of analyzing and understanding new concepts quickly and applying them when needed. I use my skills to improve user flows in order to help them achieve their objectives and, as much as possible, align them with business goals to ensure an optimized experience and productivity. When I'm not designing and proposing solutions, I enjoy listening to music, watching football and movies, or playing video games. badges: - ui-ux -status : Active +status : Inactive published: true --- diff --git a/src/collections/members/rhoda-michael/index.mdx b/src/collections/members/rhoda-michael/index.mdx index b917539d5eda..3c0cb5e011a9 100644 --- a/src/collections/members/rhoda-michael/index.mdx +++ b/src/collections/members/rhoda-michael/index.mdx @@ -10,6 +10,6 @@ location: Jos, Nigeria bio: " I'm Rhoda Michael, a User Experience Designer/Researcher based in Nigeria I focus on accessibility and inclusion for users. I enjoy writing and reading." badges: - ui-ux -status: Active +status: Inactive published: true --- \ No newline at end of file diff --git a/src/collections/members/sangram-rath/index.mdx b/src/collections/members/sangram-rath/index.mdx index 4a2576198b89..4885e7e64659 100644 --- a/src/collections/members/sangram-rath/index.mdx +++ b/src/collections/members/sangram-rath/index.mdx @@ -1,6 +1,6 @@ --- name: Sangram Rath -position: Contributor +position: Maintainer image_path: ./sangram-rath.webp github: sangramrath twitter: mr_sangramrath @@ -9,7 +9,7 @@ layer5: 7dde79fb-2778-4a66-9ce5-6772bafe8df8 location: Bhubaneswar, Odisha, India bio: Sangram Rath is a seasoned technology professional working as a Cloud Architect, mostly designing and implementing solutions on cloud and cloud native technologies such as Kubernetes, OpenShift etc., and has a background going back to datacenters and virtualization. A large part of his experience has been designing and deploying open source applications on cloud. badges: - - ui-ux + - meshery status: Active published: true --- diff --git a/src/collections/members/shlok-mishra/index.mdx b/src/collections/members/shlok-mishra/index.mdx index 5597e7fc3958..70df72fb73a9 100644 --- a/src/collections/members/shlok-mishra/index.mdx +++ b/src/collections/members/shlok-mishra/index.mdx @@ -12,6 +12,6 @@ My journey in the realm of technology has been an exciting exploration of creati Proficient in Java, Python, C#, Docker, Kubernetes, Unity, Unreal, Blender, and Flask. Skilled in Linux, macOS, and Windows OS. Ready to excel in tech roles." badges: - meshery -status: Active +status: Inactive published: true ---- \ No newline at end of file +--- diff --git a/src/collections/members/vidit-kushwaha/index.mdx b/src/collections/members/vidit-kushwaha/index.mdx new file mode 100644 index 000000000000..4f7141d329ed --- /dev/null +++ b/src/collections/members/vidit-kushwaha/index.mdx @@ -0,0 +1,16 @@ +--- +name: Vidit Kushwaha +position: Contributor +image_path: ./vidit-kushwaha.webp +github: Vidit-Kushwaha +twitter: helloVidit +linkedin: viditkushwaha +layer5: 1bc7144f-a34f-4bfa-9b08-3a4dbf22e1e8 +location: Uttar Pradesh, India +bio: "I'm Vidit Kushwaha, a final-year student doing my bachelor's of technology from the National Institute of Technology (NIT), Rourkela, and I'm a tech enthusiast, and I love creating applications that stay on the internet. +I'm a self-taught developer and always looking for new ways to improve my skills and stay up-to-date with the latest technologies. I am passionate about creating clean and efficient code and love working on projects that challenge me." +badges: + - meshery +status: Active +published: true +--- diff --git a/src/collections/members/vidit-kushwaha/vidit-kushwaha.webp b/src/collections/members/vidit-kushwaha/vidit-kushwaha.webp new file mode 100644 index 000000000000..5d15da749372 Binary files /dev/null and b/src/collections/members/vidit-kushwaha/vidit-kushwaha.webp differ diff --git a/src/collections/members/vivek-vishal/index.mdx b/src/collections/members/vivek-vishal/index.mdx index bd9bf5b019cc..4c5a5e65a561 100644 --- a/src/collections/members/vivek-vishal/index.mdx +++ b/src/collections/members/vivek-vishal/index.mdx @@ -8,7 +8,7 @@ linkedin: vishalvivekm location: Punjab, India layer5: 878488d5-c394-4b04-91b4-fd2f9e67ffaf bio: Vivek Vishal is a passionate CS undergrad from India who loves to explore new technologies and contribute to Open-Source projects. With proficiency in various programming languages, including Java, C++, C, Bash, and JavaScript, he possesses a profound understanding of SQL, Git, and Command-line tools. Vivek has a strong inclination towards Maths and a keen interest in Machine Learning, constantly expanding his knowledge and skillset. As an active member of the Layer5 community, he eagerly participates in community events and discussions, both to learn and to assist others in getting started with Layer5 projects or other Open-Source endeavors. Don't hesitate to connect with him on his socials below -status: Active +status: Inactive badges: - community - docs diff --git a/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/index.mdx b/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/index.mdx new file mode 100644 index 000000000000..6deb429fd4e0 --- /dev/null +++ b/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/index.mdx @@ -0,0 +1,114 @@ +--- +title: "Layer5 Launches Kanvas: A Collaborative Platform for Cloud Native Infrastructure" +subtitle: "Enabling teams to collaboratively design, deploy, and manage cloud native infrastructure without finger-pointing" +date: 2024-11-15 08:00:00 -0530 +author: The Newsroom +thumbnail: ../../../../assets/images/kanvas/stacked/kanvas-stacked-color.svg +darkthumbnail: ../../../../assets/images/kanvas/stacked/kanvas-stacked-partial-color.svg +category: "Press Release" +description: "Layer5 announces Kanvas, a collaboration platform for engineering teams managing cloud native infrastructure. Built on Meshery, Kanvas provides an intuitive design suite for engineers to visualize, manage, and collaboratively design multi-cloud and Kubernetes-native infrastructure." +tags: + - Announcements + - Kanvas +type: News +presskit: "" +resource: false +published: true +--- +import { Link } from "gatsby"; +import Kanvas from "./kanvas-icon-color.svg"; +import KanvasScreenshot from "./layer5-kanvas-designer.webp"; +import { NewsWrapper } from "../../News.style.js"; +import Blockquote from "../../../../reusecore/Blockquote"; +import BlockquoteAlt from "../../../../reusecore/Blockquote/Blockquote-alt-style"; + + +

+[Salt Lake City, UT] [KubeCon + CloudNativeCon] - November 14th, 2024 – Layer5, the open source company behind the popular Meshery project, announces Kanvas, a new collaboration platform that is like Google Workspace, but designed for engineering teams. +

+ +Layer5 Kanvas Designer + +

Kanvas is a multi-modal collaboration suite built atop one of the Cloud Native Computing Foundation’s highest velocity open source projects: Meshery. Kanvas’s two modes, Designer and Operator, offer declarative and imperative DevOps workflows, respectively. Both modes provide a visual interface for creating and managing complex cloud native infrastructure, expediting collaborative problem-solving, brainstorming and innovation, engineer onboarding, and auto-documented infrastructure. Importantly, Kanvas helps teams avoid finger-pointing and the blame-game by allowing them to be on the same page - literally.

+ + + +

+As an extensible, self-service engineering platform with hundreds of technology integrations, supporting multi-cloud and Kubernetes native infrastructure, Meshery is the ideal management platform upon which to build Kanvas’ novel collaboration experience. Meshery has thousands of pre-built components supporting Kubernetes and Cloud services and with over 2,000 contributors, Meshery is the 9th fastest growing CNCF (out of 200+ projects). +

+ + +
+ +

+Like Figma for engineers, Kanvas users can access Kanvas from any computer with an internet connection and a web browser. +

+ +#### Feature Highlights: +
    +
  • Infrastructure as Design: Intuitive drag-and-drop interface for designing and visualizing cloud native infrastructure and general architecture diagrams. Supports Kubernetes and multi-cloud services.
  • +
  • Self-Service DevOps: Empowers engineers to create, share, and manage their own environments on demand.
  • +
  • Greenfields and Brownfield Infrastructure: Import existing cloud environments to visualize current infrastructure or create a new design from scratch.
  • +
  • GitOps Integration: Pull request integration for infrastructure design reviews.
  • +
  • Model-Driven characterization of both semantic and non-semantic infrastructure as design components.
  • +
  • Policy-driven intelligent inference of infrastructure components and their relationships.
  • +
  • Real-Time Collaboration: Work with others on your designs in real-time, making it easier to collaborate and share ideas, while all changes are saved automatically.
  • +
  • Design Patterns: A catalog full of ready-made blueprints for common infrastructure and application architectures.
  • +
  • Kanvas Spaces: provide a collaborative environment similar to Google Shared Drive, but specifically tailored for cloud-native infrastructure management.
  • +
  • Design Reviews: Collaboratively review and provide feedback on designs and prototypes.
  • +
+ +
+ +

Birth of Kanvas from Meshery

+
+#### Kanvas caters to a wide range of users, including: +
    +
  • Teams and engineering managers for brainstorming, diagramming, wireframing, and interviewing.
  • +
  • Platform engineers for underpinning self-service and developer empowerment.
  • +
  • Site reliability engineers for curating a catalog of design patterns as a center of excellence.
  • +
  • Operators for managing and visualizing infrastructure components.
  • +
  • Solution architects designing infrastructure across multiple cloud providers from a single canvas.
  • +
  • Developer advocates and educators for facilitating real-time exploration and asynchronous study of any cloud native technology.
  • +
  • Developers and product engineers for ease of understanding and design of their application infrastructure.
  • +
  • System integrators and consultants for a service provider-grade organization hierarchy, multi-tenant, white-labelable, highly extensible delivery platform.
  • +
+ + + +

Kanvas Designer is available now in beta as a service or self-hosted solution. Kanvas Operator will be available early next year. Try dragging and dropping your Kubernetes manifest into https://kanvas.new today.

+ + + +#### Resources + + +##### About Layer5, Inc. +

+Our open source and commercial products empower organizations to embrace the power of cloud native with confidence. Layer5's mission is to simplify the adoption and operation of cloud native infrastructure, enabling organizations to innovate faster and engineers to do so collaboratively. +Layer5’s award-winning open source community has over 10,000 members. For more information, visit https://layer5.io

+ +##### About Kanvas +

+Kanvas is a web-based collaboration tool that allows you to create, review, and operate highly-detailed architecture diagrams of your cloud and cloud infrastructure using a drag-and-drop interface. Kanvas is popular with site reliability engineers, platform engineers, architects, operators, and developers as an enabler of productive, collaborative infrastructure management. Try Kanvas at https://kanvas.new.

+ + + \ No newline at end of file diff --git a/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/kanvas-icon-color.svg b/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/kanvas-icon-color.svg new file mode 100644 index 000000000000..80226d79285b --- /dev/null +++ b/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/kanvas-icon-color.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/kanvas-icon-white.svg b/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/kanvas-icon-white.svg new file mode 100644 index 000000000000..29c4be1f481b --- /dev/null +++ b/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/kanvas-icon-white.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/layer5-kanvas-designer.png b/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/layer5-kanvas-designer.png new file mode 100644 index 000000000000..5f003679a602 Binary files /dev/null and b/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/layer5-kanvas-designer.png differ diff --git a/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/layer5-kanvas-designer.webp b/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/layer5-kanvas-designer.webp new file mode 100644 index 000000000000..0bc9841f6f11 Binary files /dev/null and b/src/collections/news/2024/2024-11-12-layer5-launches-kanvas-a-collaborative-platform-for-cloud-native-infrastructure/layer5-kanvas-designer.webp differ diff --git a/src/collections/news/News.style.js b/src/collections/news/News.style.js index da6604f3540a..945d178711c9 100644 --- a/src/collections/news/News.style.js +++ b/src/collections/news/News.style.js @@ -19,6 +19,9 @@ export const NewsWrapper = styled.div` .block-display { display: block; } + .align-center { + text-align: center; + } @media screen and (max-width: 768px) { diff --git a/src/collections/service-mesh-books/service-mesh-patterns/index.mdx b/src/collections/service-mesh-books/service-mesh-patterns/index.mdx index e67e23191878..306cc41ebae8 100644 --- a/src/collections/service-mesh-books/service-mesh-patterns/index.mdx +++ b/src/collections/service-mesh-books/service-mesh-patterns/index.mdx @@ -14,28 +14,17 @@ redirect_from: import { BookWrapper } from "../Book.style.js"; import Table from "../../../components/service-mesh-patterns-Table/Table.js"; import { Link } from "gatsby"; -import Button from "../../../reusecore/Button"; import service_mesh_pattern_book from "./service-mesh-patterns.webp";
- - -
 
-

diff --git a/src/components/Learn-Components/what-await-section/index.js b/src/components/Learn-Components/what-await-section/index.js index 016c12fd22ab..8ed297465a53 100644 --- a/src/components/Learn-Components/what-await-section/index.js +++ b/src/components/Learn-Components/what-await-section/index.js @@ -15,7 +15,7 @@ const WhatAwaitsSection = () => {

Cloud Native patterns help you get the most out of any cloud native. Each pattern can be used as a template and is customizable.

- + +

{x.byline2}
+ +
+ {x.summary && + x.summary.map((t) => ( +
+ +
+ ))} +
+ ))} - ); }; -export default PlanCard; \ No newline at end of file +export default PlanCard; diff --git a/src/components/PlanCard/planCard.style.js b/src/components/PlanCard/planCard.style.js index ec2268195750..ce29e37d37da 100644 --- a/src/components/PlanCard/planCard.style.js +++ b/src/components/PlanCard/planCard.style.js @@ -1,157 +1,216 @@ import styled from "styled-components"; const PlanCardWrapper = styled.section` - - - .pricing-table { + margin: 0 auto; + + .pricing-card { + display: flex; + text-align: left; /* Align all content to the left */ + padding: 20px; + width: 100%; + border: 1px solid #ccc; + border-radius: 10px; + background-color: #f9f9f9; + gap: 22rem; + } + .price-container { + transform: scale(1.15); + align-items: baseline; + .price { + display: flex; + align-items: baseline; + font-weight: bold; + color: ${(props) => props.theme.whiteToBlack}; + white-space: nowrap; /* Prevent line breaks in price text */ + justify-content: center; + } + .currency-symbol { + font-size: 1rem; + align-self: flex-start; + font-weight: thin; + color: ${(props) => props.theme.primaryColor}; + } + .price-amount { + font-size: 3rem; + color: ${(props) => props.theme.primaryColor}; + > sup { + font-weight: 200; + font-size: 1rem; + } + } + .currency { + font-size: .65rem; + font-weight: normal; + color: ${(props) => props.theme.primaryColor}; + align-content: baseline; + } + .price-per { + margin-left: .25rem; + align-self: center; + font-weight: 200; + font-size: .75rem; + letter-spacing: -.025rem; + color: ${(props) => props.theme.primaryColor}; + } + } + .pricing-button { + padding: 10px 20px; + font-size: 1em; + border: none; + border-radius: 5px; + background-color: #007bff; + color: white; + cursor: pointer; + &:hover {background-color: #0056b3;} + } + .pricing-table { + width: 100%; + min-width: 300px; background-color: ${(props) => props.theme.grey212121ToWhite}; - border-top: 3px solid #00b39f; box-shadow: 0px 2px 16px rgba(0, 0, 0, 0.1); - padding: 2rem; + padding: 2rem 1rem; border-radius: 4px; transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - - @media (max-width: 992px) { - margin: 1.5rem 1rem; + margin-bottom: 2rem; + flex: 1 1 calc(25% - 20px); /* 4 columns */ + &:hover { + box-shadow: 0px 1px 10px -4px rgba(0, 0, 0, 0.15); } - } - - .featured { - transform: scale(1.05); - background-color: ${(props) => props.theme.grey212121ToWhite}; - box-shadow: 0px 2px 12px 0px rgb(0, 179, 158, 0.7); - transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - } - .pricing-table:hover { - box-shadow: 0px 1px 10px -4px rgba(0, 0, 0, 0.15); - } - .featured:hover { - box-shadow: 0px 2px 16px rgb(0, 179, 158, 0.9); - } - - .pricing-table { .pricing-label { - border-radius: 2px; - background-color: rgb(235, 192, 23); - padding: 0.25rem 0.5rem; - display: block; - position: relative; - float: right; - justify-content: flex-end; - align-content: flex-end; + border-radius: 0px 4px; + background: ${(props) => props.theme.grey0E0E0EToGreen3C494F}; + padding: 0.125rem 0.5rem; + position: absolute; width: fit-content; font-size: 0.75rem; font-weight: 500; - margin-top: -1rem; - margin-right: -1rem; - margin-bottom: 1rem; + top: 0rem; + right: .9rem; + color: #eee; + transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); } - - h2 { + .featured-label { + border-radius: 0px 4px; + background: ${(props) => props.theme.saffronColor}; + padding: 0.125rem 0.5rem; + position: absolute; + width: fit-content; + font-size: 0.75rem; + font-weight: 500; + top: 0rem; + right: .9rem; + color: #111; + transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + } + h6 { + font-size: .9rem; margin-top: 1rem; + color: ${(props) => props.theme.tealBlue}; + } + h2 { margin-bottom: 1rem; - color: ${(props) => props.theme.greyDCDCDCToGrey3B3B3B}; - font-size: 24px; + font-size: 1.5rem; font-weight: 600; - margin-left: 1rem; - transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - } - - .byline { - color: ${(props) => props.theme.greyC8C8C8ToGreen3C494F}; - font-size: 16px; - font-weight: 400; + text-align: center; transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); } - - .pricing-features { - margin-top: 2rem; - } - - .pricing-features .feature { - margin: 0.75rem 0rem; + } + .featured { + /* transform: scale(1.05); */ + /* border: .5rem solid ${(props) => props.theme.whiteToBlack}; */ + background-color: ${(props) => props.theme.grey212121ToWhite}; + box-shadow: 0px 2px 12px 0px rgb(0, 179, 159, 0.7); + transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + &:hover { box-shadow: 0px 2px 16px rgb(235, 192, 23, 0.9); } + } + .byline { + /* color: ${(props) => props.theme.greyC8C8C8ToGreen3C494F}; */ + color: ${(props) => props.theme.blueE0FFFCToBlue477E96}; + margin-top: -.5rem; + margin-bottom: 2.5rem; + font-size: .9rem; + font-weight: 400; + transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + justify-content: center; + text-align: center; + } + .pricing-features { + margin-top: 2rem; + line-height: 1rem; + .feature { + margin: 0rem 0rem; + line-height: 1rem; + font-weight: bold; .details { - display: flex; - margin: 0.5rem 0; + display: block; + height: auto; + p { + color: ${(props) => props.theme.greyD3D7DBToGreen1E2117}; + background-color: ${(props) => props.theme.grey1D1817ToGreyE6E6E6}; + padding: 0.5rem; + line-height: 1rem; + margin-top: 0.5rem; + font-size: 0.85rem; + border-radius: 0.25rem; + } } h5 { - color: ${(props) => props.theme.greyAAAAAAToGrey7A848E}; + color: ${(props) => props.theme.greyD3D7DBToGreen1E2117}; display: block; - font-size: 16px; - font-weight: 400; - /* vertical-align: text-top; */ + font-size: 1rem; + font-weight: bold; transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); } - .check { - padding-right: 0.2rem; - vertical-align: middle; - color: ${(props) => props.theme.secondaryColor}; + .check { + padding-right: 0.2rem; + vertical-align: middle; + color: ${(props) => props.theme.secondaryColor}; + } } - } - - .price-tag { - margin-top: 2rem; - text-align: center; - font-weight: 500; - } - - .price-tag .symbol { + } + .price-tag { + margin-top: 2rem; + text-align: center; + font-weight: 500; + color: ${(props) => props.theme.secondaryColor}; + &.symbol { font-size: 24px; } - - .price-tag .amount { + &.amount { letter-spacing: -2px; font-size: 3rem; - @media screen and (max-width: 992px) and (min-width: 768px) { - font-size: 1.5rem; - } - @media screen and (max-width: 400px) { - font-size: 2rem; - } } - - .price-tag .free { + &.free { font-size: 40px; } - - .price-tag .after { - color: #3b3b3b; - font-weight: 500; - } - - .price-button-disabled, - .price-button-link { - color: #fff; - display: block; - margin: 2rem auto 0; - padding: 1rem 2rem; - width: 100%; - text-align: center; - font-weight: 500; - transition: 0.3s; - background: ${(props) => props.theme.secondaryColor}; - } - - .price-button-disabled { - background: rgb(0, 179, 158, 0.6); + &.after { + color: #3b3b3b; + font-weight: 500; } - .price-button-disabled:hover { - cursor: default; + } +.price-button-disabled { + width: 100%; + background: rgb(0, 179, 158, 0.6); + display: block; + margin: 2rem auto 0; + transition: 0.3s; + &:hover { + cursor: not-allowed; box-shadow: none; } - - .pricing-label { - background: rgb(235, 192, 23); - color: #000; - transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - } - - .price-tag { - color: ${(props) => props.theme.secondaryColor}; - } } - +.price-button-link { + color: #fff; + display: block; + margin: 2rem auto 0; + padding: 1rem 2rem; + width: 100%; + text-align: center; + font-weight: 500; + transition: 0.3s; + background: ${(props) => props.theme.secondaryColor}; +} `; export default PlanCardWrapper; \ No newline at end of file diff --git a/src/components/Related-Posts/index.js b/src/components/Related-Posts/index.js index 95e09e8fd8ca..040e38a34c98 100644 --- a/src/components/Related-Posts/index.js +++ b/src/components/Related-Posts/index.js @@ -1,3 +1,5 @@ +import "slick-carousel/slick/slick.css"; +import "slick-carousel/slick/slick-theme.css"; import React from "react"; import { Link } from "gatsby"; import { IoIosArrowRoundForward } from "@react-icons/all-files/io/IoIosArrowRoundForward"; @@ -5,8 +7,6 @@ import Card from "../Card"; import RelatedPostsWrapper from "./relatedPosts.style"; import { Col } from "../../reusecore/Layout"; import Slider from "react-slick"; -import "slick-carousel/slick/slick.css"; -import "slick-carousel/slick/slick-theme.css"; import useHasMounted from "../../utils/useHasMounted"; const RelatedPosts = props => { diff --git a/src/components/Related-Resources/index.js b/src/components/Related-Resources/index.js index 2f717aa5c847..8739581a4d4b 100644 --- a/src/components/Related-Resources/index.js +++ b/src/components/Related-Resources/index.js @@ -1,3 +1,5 @@ +import "slick-carousel/slick/slick.css"; +import "slick-carousel/slick/slick-theme.css"; import React from "react"; import { Link } from "gatsby"; import { IoIosArrowRoundForward } from "@react-icons/all-files/io/IoIosArrowRoundForward"; @@ -5,8 +7,6 @@ import Card from "../Card"; import RelatedResourcesWrapper from "./relatedResources.style"; import { Col } from "../../reusecore/Layout"; import Slider from "react-slick"; -import "slick-carousel/slick/slick.css"; -import "slick-carousel/slick/slick-theme.css"; import useHasMounted from "../../utils/useHasMounted"; const RelatedResources = props => { diff --git a/src/components/SistentNavigation/content.js b/src/components/SistentNavigation/content.js index 77069a489955..894618748416 100644 --- a/src/components/SistentNavigation/content.js +++ b/src/components/SistentNavigation/content.js @@ -103,4 +103,19 @@ export const content = [ link: "/projects/sistent/components/button-group/code", text: "Button Group", }, + { + id: 27, + link: "/projects/sistent/components/tooltip", + text: "Tooltip", + }, + { + id: 25, + link: "/projects/sistent/components/tooltip/guidance", + text: "Tooltip", + }, + { + id: 26, + link: "/projects/sistent/components/tooltip/code", + text: "Tooltip", + }, ]; diff --git a/src/components/SistentNavigation/index.js b/src/components/SistentNavigation/index.js index 8ee22aa50654..e5e1eb54dcad 100644 --- a/src/components/SistentNavigation/index.js +++ b/src/components/SistentNavigation/index.js @@ -3,6 +3,7 @@ import { HiOutlineChevronLeft } from "@react-icons/all-files/hi/HiOutlineChevron import { Link } from "gatsby"; import { IoMdClose } from "@react-icons/all-files/io/IoMdClose"; import { IoIosArrowDropdownCircle } from "@react-icons/all-files/io/IoIosArrowDropdownCircle"; +import { componentsData } from "../../sections/Projects/Sistent/components/content"; import TOCWrapper from "./toc.style"; import { IoIosArrowDown } from "@react-icons/all-files/io/IoIosArrowDown"; @@ -16,6 +17,9 @@ const TOC = () => { const [expandIdenity, setExpandIdentity] = useState( location.pathname.includes("/identity") ); + const [expandComponent, setExpandComponent] = useState( + location.pathname.includes("/components") + ); return ( @@ -114,13 +118,36 @@ const TOC = () => {
  • - - Components - +
    +
  • setExpandComponent((prev) => !prev)} + > + Components + {expandComponent ? : } +
  • + {expandComponent && ( +
    +
  • + {componentsData.map((component) => ( +
  • + + {component.name} + +
  • + ))} + +
    + )} + diff --git a/src/components/SistentNavigation/toc.style.js b/src/components/SistentNavigation/toc.style.js index e2698f350cea..b3763fa1ee6d 100644 --- a/src/components/SistentNavigation/toc.style.js +++ b/src/components/SistentNavigation/toc.style.js @@ -125,7 +125,7 @@ const TOCWrapper = styled.div` background-color: transparent; } - .identity { + .identity, .components { display: flex; width: 100%; justify-content: space-between; @@ -138,10 +138,10 @@ const TOCWrapper = styled.div` } } - .identity-sublinks { + .identity-sublinks, .components-sublinks { padding-left: 0.56rem; - .identity-item { + .identity-item, .components-item { font-size: 1.05rem; margin-top: 0.45rem; } diff --git a/src/pages/projects/sistent/components/button-group/code.js b/src/pages/projects/sistent/components/button-group/code.js deleted file mode 100644 index dff80d0676aa..000000000000 --- a/src/pages/projects/sistent/components/button-group/code.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import ButtonGroupCode from "../../../../../sections/Projects/Sistent/components/button-group/code"; - -const ButtonGroupCodePage = () => { - return ; -}; - -export default ButtonGroupCodePage; diff --git a/src/pages/projects/sistent/components/button-group/guidance.js b/src/pages/projects/sistent/components/button-group/guidance.js deleted file mode 100644 index c36d2d6d33f6..000000000000 --- a/src/pages/projects/sistent/components/button-group/guidance.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import ButtonGroupGuidance from "../../../../../sections/Projects/Sistent/components/button-group/guidance"; - -const ButtonGuidancePage = () => { - return ; -}; - -export default ButtonGuidancePage; diff --git a/src/pages/projects/sistent/components/button-group/index.js b/src/pages/projects/sistent/components/button-group/index.js deleted file mode 100644 index af543fb3279c..000000000000 --- a/src/pages/projects/sistent/components/button-group/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import SistentButtonGroup from "../../../../../sections/Projects/Sistent/components/button-group"; - -const SistentButtonGroupPage = () => { - return ; -}; - -export default SistentButtonGroupPage; diff --git a/src/pages/projects/sistent/components/button/code.js b/src/pages/projects/sistent/components/button/code.js deleted file mode 100644 index 87944a938565..000000000000 --- a/src/pages/projects/sistent/components/button/code.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { ButtonCode } from "../../../../../sections/Projects/Sistent/components/button/code"; - -const ButtonCodePage = () => { - return ; -}; - -export default ButtonCodePage; diff --git a/src/pages/projects/sistent/components/button/guidance.js b/src/pages/projects/sistent/components/button/guidance.js deleted file mode 100644 index a155ae7ec5dc..000000000000 --- a/src/pages/projects/sistent/components/button/guidance.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { ButtonGuidance } from "../../../../../sections/Projects/Sistent/components/button/guidance"; - -const ButtonGuidancePage = () => { - return ; -}; - -export default ButtonGuidancePage; diff --git a/src/pages/projects/sistent/components/button/index.js b/src/pages/projects/sistent/components/button/index.js deleted file mode 100644 index 3e56948174d2..000000000000 --- a/src/pages/projects/sistent/components/button/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import SistentButton from "../../../../../sections/Projects/Sistent/components/button"; - -const SistentButtonPage = () => { - return ; -}; - -export default SistentButtonPage; diff --git a/src/pages/projects/sistent/components/container/code.js b/src/pages/projects/sistent/components/container/code.js deleted file mode 100644 index ee5f12f95992..000000000000 --- a/src/pages/projects/sistent/components/container/code.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { ContainerCode } from "../../../../../sections/Projects/Sistent/components/container/code"; - -const ContainerCodePage = () => { - return ; -}; - -export default ContainerCodePage; diff --git a/src/pages/projects/sistent/components/container/guidance.js b/src/pages/projects/sistent/components/container/guidance.js deleted file mode 100644 index 763ec456f972..000000000000 --- a/src/pages/projects/sistent/components/container/guidance.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { ContainerGuidancePage } from "../../../../../sections/Projects/Sistent/components/container/guidance"; - -const LinkGuidance = () => { - return ; -}; - -export default LinkGuidance; diff --git a/src/pages/projects/sistent/components/container/index.js b/src/pages/projects/sistent/components/container/index.js deleted file mode 100644 index a7bcf30afd1f..000000000000 --- a/src/pages/projects/sistent/components/container/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import SistentContainer from "../../../../../sections/Projects/Sistent/components/container/index"; - -const SistentContainerPage = () => { - return ; -}; - -export default SistentContainerPage; diff --git a/src/pages/projects/sistent/components/link/code.js b/src/pages/projects/sistent/components/link/code.js deleted file mode 100644 index 06eae83ec9a3..000000000000 --- a/src/pages/projects/sistent/components/link/code.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { LinkCode } from "../../../../../sections/Projects/Sistent/components/link/code"; - -const LinkCodePage = () => { - return ; -}; - -export default LinkCodePage; \ No newline at end of file diff --git a/src/pages/projects/sistent/components/link/guidance.js b/src/pages/projects/sistent/components/link/guidance.js deleted file mode 100644 index b9efe9988519..000000000000 --- a/src/pages/projects/sistent/components/link/guidance.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { LinkGuidancePage } from "../../../../../sections/Projects/Sistent/components/link/guidance"; - -const LinkGuidance = () => { - return ; -}; - -export default LinkGuidance; \ No newline at end of file diff --git a/src/pages/projects/sistent/components/link/index.js b/src/pages/projects/sistent/components/link/index.js deleted file mode 100644 index 2e2f14e7f001..000000000000 --- a/src/pages/projects/sistent/components/link/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import SistentLink from "../../../../../sections/Projects/Sistent/components/link/index"; - -const SistentButtonPage = () => { - return ; -}; - -export default SistentButtonPage; \ No newline at end of file diff --git a/src/pages/projects/sistent/components/modal/code.js b/src/pages/projects/sistent/components/modal/code.js deleted file mode 100644 index bd7e2753bd8f..000000000000 --- a/src/pages/projects/sistent/components/modal/code.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from "react"; -import ModalCode from "../../../../../sections/Projects/Sistent/components/modal/code"; - - -const ModalCodePage = () => { - return ; -}; - -export default ModalCodePage; \ No newline at end of file diff --git a/src/pages/projects/sistent/components/modal/guidance.js b/src/pages/projects/sistent/components/modal/guidance.js deleted file mode 100644 index f57411c3ff93..000000000000 --- a/src/pages/projects/sistent/components/modal/guidance.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from "react"; -import ModalGuidance from "../../../../../sections/Projects/Sistent/components/modal/guidance"; - - -const ModalGuidancePage = () => { - return ; -}; - -export default ModalGuidancePage; \ No newline at end of file diff --git a/src/pages/projects/sistent/components/modal/index.js b/src/pages/projects/sistent/components/modal/index.js deleted file mode 100644 index 4be1ef984ac0..000000000000 --- a/src/pages/projects/sistent/components/modal/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from "react"; -import SistentModal from "../../../../../sections/Projects/Sistent/components/modal"; - - -const SistentModalPage = () => { - return ; -}; - -export default SistentModalPage; \ No newline at end of file diff --git a/src/pages/projects/sistent/components/paper/code.js b/src/pages/projects/sistent/components/paper/code.js deleted file mode 100644 index aebd216c36dc..000000000000 --- a/src/pages/projects/sistent/components/paper/code.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import PaperCode from "../../../../../sections/Projects/Sistent/components/paper/code"; - -const PaperCodePage = () => { - return ; -}; - -export default PaperCodePage; \ No newline at end of file diff --git a/src/pages/projects/sistent/components/paper/guidance.js b/src/pages/projects/sistent/components/paper/guidance.js deleted file mode 100644 index a0ae573e7c1d..000000000000 --- a/src/pages/projects/sistent/components/paper/guidance.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import PaperGuidance from "../../../../../sections/Projects/Sistent/components/paper/guidance"; - -const PaperGuidancePage = () => { - return ; -}; - -export default PaperGuidancePage; diff --git a/src/pages/projects/sistent/components/paper/index.js b/src/pages/projects/sistent/components/paper/index.js deleted file mode 100644 index cac37c7bd2c0..000000000000 --- a/src/pages/projects/sistent/components/paper/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from "react"; -import SistentPaper from "../../../../../sections/Projects/Sistent/components/paper"; - - -const SistentPaperPage = () => { - return ; -}; - -export default SistentPaperPage; \ No newline at end of file diff --git a/src/pages/projects/sistent/components/popper/code.js b/src/pages/projects/sistent/components/popper/code.js deleted file mode 100644 index 9327a30755d0..000000000000 --- a/src/pages/projects/sistent/components/popper/code.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { PooperCode } from "../../../../../sections/Projects/Sistent/components/popper/code"; - -const PopperCodePage = () => { - return ; -}; - -export default PopperCodePage; diff --git a/src/pages/projects/sistent/components/popper/guidance.js b/src/pages/projects/sistent/components/popper/guidance.js deleted file mode 100644 index 70cde98837c0..000000000000 --- a/src/pages/projects/sistent/components/popper/guidance.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { PopperGuidance } from "../../../../../sections/Projects/Sistent/components/popper/guidance"; - -const PopperGuidancePage = () => { - return ; -}; - -export default PopperGuidancePage; diff --git a/src/pages/projects/sistent/components/popper/index.js b/src/pages/projects/sistent/components/popper/index.js deleted file mode 100644 index e75d22655e5f..000000000000 --- a/src/pages/projects/sistent/components/popper/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { SistentPopper } from "../../../../../sections/Projects/Sistent/components/popper"; - -const SistentPopperPage = () => { - return ; -}; - -export default SistentPopperPage; diff --git a/src/pages/projects/sistent/components/text-field/code.js b/src/pages/projects/sistent/components/text-field/code.js deleted file mode 100644 index ec4056851b3e..000000000000 --- a/src/pages/projects/sistent/components/text-field/code.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { TextFieldCode } from "../../../../../sections/Projects/Sistent/components/text-field/code"; - -const TextFieldCodePage = () => { - return ; -}; - -export default TextFieldCodePage; diff --git a/src/pages/projects/sistent/components/text-field/guidance.js b/src/pages/projects/sistent/components/text-field/guidance.js deleted file mode 100644 index a18f55ebb86b..000000000000 --- a/src/pages/projects/sistent/components/text-field/guidance.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { TextFieldGuidance } from "../../../../../sections/Projects/Sistent/components/text-field/guidance"; - -const TextFieldGuidancePage = () => { - return ; -}; - -export default TextFieldGuidancePage; diff --git a/src/pages/projects/sistent/components/text-field/index.js b/src/pages/projects/sistent/components/text-field/index.js deleted file mode 100644 index 4031dd295f6d..000000000000 --- a/src/pages/projects/sistent/components/text-field/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import SistentTextField from "../../../../../sections/Projects/Sistent/components/text-field"; - -const SistentTextFieldPage = () => { - return ; -}; - -export default SistentTextFieldPage; diff --git a/src/pages/projects/sistent/components/text-input/code.js b/src/pages/projects/sistent/components/text-input/code.js deleted file mode 100644 index b5664ac8dbf6..000000000000 --- a/src/pages/projects/sistent/components/text-input/code.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { TextInputCode } from "../../../../../sections/Projects/Sistent/components/text-input/code"; - -const TextInputCodePage = () => { - return ; -}; - -export default TextInputCodePage; diff --git a/src/pages/projects/sistent/components/text-input/guidance.js b/src/pages/projects/sistent/components/text-input/guidance.js deleted file mode 100644 index 9b99306618ee..000000000000 --- a/src/pages/projects/sistent/components/text-input/guidance.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import { TextInputGuidance } from "../../../../../sections/Projects/Sistent/components/text-input/guidance"; - -const TextInputGuidancePage = () => { - return ; -}; - -export default TextInputGuidancePage; diff --git a/src/pages/projects/sistent/components/text-input/index.js b/src/pages/projects/sistent/components/text-input/index.js deleted file mode 100644 index dfbb28313e00..000000000000 --- a/src/pages/projects/sistent/components/text-input/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import SistentTextInput from "../../../../../sections/Projects/Sistent/components/text-input"; - -const SistentTextInputPage = () => { - return ; -}; - -export default SistentTextInputPage; diff --git a/src/sections/Careers/Career-single/CareerSingle.style.js b/src/sections/Careers/Career-single/CareerSingle.style.js index 974038ab538f..29a4a996548c 100644 --- a/src/sections/Careers/Career-single/CareerSingle.style.js +++ b/src/sections/Careers/Career-single/CareerSingle.style.js @@ -46,6 +46,10 @@ const CareerPageWrapper = styled.div` } } + .job-details-row { + flex-wrap: wrap; + } + .layer5-logo { width: 15rem; margin: auto; diff --git a/src/sections/Careers/Career-single/index.js b/src/sections/Careers/Career-single/index.js index a44d059797fb..3eb6ad643ad3 100644 --- a/src/sections/Careers/Career-single/index.js +++ b/src/sections/Careers/Career-single/index.js @@ -20,7 +20,7 @@ const CareerSingle = ({ data }) => { - +
    Start Date

    {frontmatter.start_date}

    diff --git a/src/sections/Cloud-Native-Catalog/new-catalog.js b/src/sections/Cloud-Native-Catalog/new-catalog.js index 789042459978..08c3162cbb9a 100644 --- a/src/sections/Cloud-Native-Catalog/new-catalog.js +++ b/src/sections/Cloud-Native-Catalog/new-catalog.js @@ -52,7 +52,7 @@ const NewCatalog = () => { CREATE AND SHARE YOUR OWN BEST PRACTICES

    -
    diff --git a/src/sections/Community/Handbook/recognition.js b/src/sections/Community/Handbook/recognition.js index fe372dc4580c..8b21be642c5d 100644 --- a/src/sections/Community/Handbook/recognition.js +++ b/src/sections/Community/Handbook/recognition.js @@ -235,7 +235,7 @@ const RecognitionPage = () => { Each badge is tied to specific activities. Here are some ways you can earn Layer5 Badges:

    - For users, badges for activities such as using our projects, talking about the projects, sharing your successes and what you like about them. For contributors, badges include activities such as submitting code, reviewing Pull Requests, assisting with documentation, participating in community events, and more. As you accumulate contributions in various areas, you'll begin to unlock badges that showcase your multifaceted involvement. These badges will be prominently displayed on your Layer5 Cloud profile, visually representing your journey. Not only does this serve as a source of personal pride, but it also helps others in the community recognize your expertise and dedication. + For users, badges for activities such as using our projects, talking about the projects, sharing your successes and what you like about them. For contributors, badges include activities such as submitting code, reviewing Pull Requests, assisting with documentation, participating in community events, and more. As you accumulate contributions in various areas, you'll begin to unlock badges that showcase your multifaceted involvement. These badges will be prominently displayed on your Layer5 Cloud profile, visually representing your journey. Not only does this serve as a source of personal pride, but it also helps others in the community recognize your expertise and dedication.

    • Activity Badges are the badges that are assigned when a user completes a task like sharing a design, creating a design for the first time, etc. @@ -258,7 +258,7 @@ const RecognitionPage = () => {
      • Visit your{" "} - Layer5 Cloud{" "} + Layer5 Cloud{" "} Profile to see the badges
      • Click on the badge, which you wanted to display
      • diff --git a/src/sections/Community/Handbook/repo-data.js b/src/sections/Community/Handbook/repo-data.js index a2a5c33fc1b5..91d6e7eb3d81 100644 --- a/src/sections/Community/Handbook/repo-data.js +++ b/src/sections/Community/Handbook/repo-data.js @@ -126,7 +126,7 @@ export const repo_data = [ { project: "Layer5 Cloud", image: meshery, - site: "https://meshery.layer5.io/", + site: "https://cloud.layer5.io/", language: "React.js", maintainers_name: ["Yash Sharma"], link: ["https://layer5.io/community/members/yash-sharma"], diff --git a/src/sections/Community/Member-single/index.js b/src/sections/Community/Member-single/index.js index 31ab829daea4..7a7db30255cf 100644 --- a/src/sections/Community/Member-single/index.js +++ b/src/sections/Community/Member-single/index.js @@ -375,7 +375,7 @@ const MemberSingle = ({ frontmatter }) => { )} {layer5 && (
      • - + meshery-icon Meshery diff --git a/src/sections/Community/slider.js b/src/sections/Community/slider.js index 862ef223b348..859f323122b9 100644 --- a/src/sections/Community/slider.js +++ b/src/sections/Community/slider.js @@ -1,8 +1,8 @@ +import "slick-carousel/slick/slick.css"; +import "slick-carousel/slick/slick-theme.css"; import React from "react"; import Slider from "react-slick"; import styled from "styled-components"; -import "slick-carousel/slick/slick.css"; -import "slick-carousel/slick/slick-theme.css"; import { useStaticQuery, graphql } from "gatsby"; diff --git a/src/sections/Company/Brand/Brand-components/catalog.js b/src/sections/Company/Brand/Brand-components/catalog.js index abad4d3ee11d..1a839917ad15 100644 --- a/src/sections/Company/Brand/Brand-components/catalog.js +++ b/src/sections/Company/Brand/Brand-components/catalog.js @@ -123,7 +123,9 @@ const Catalog = () => { white when using project colors as the background.

        - + { monochrome tonal when using a color background.

        - + diff --git a/src/sections/Company/Brand/Brand-components/layer5.js b/src/sections/Company/Brand/Brand-components/layer5.js index 23ffc4730ba7..1d3562118057 100644 --- a/src/sections/Company/Brand/Brand-components/layer5.js +++ b/src/sections/Company/Brand/Brand-components/layer5.js @@ -85,7 +85,9 @@ const Layer5Brand = () => { when using project colors as the background.

        - + diff --git a/src/sections/Company/Brand/Brand-components/meshery-operator.js b/src/sections/Company/Brand/Brand-components/meshery-operator.js index 824e335d041f..7ebb4c05049f 100644 --- a/src/sections/Company/Brand/Brand-components/meshery-operator.js +++ b/src/sections/Company/Brand/Brand-components/meshery-operator.js @@ -78,7 +78,9 @@ const MesheryOperatorBrand = () => { monochrome tonal when using a color background.

        - + diff --git a/src/sections/Company/Brand/Brand-components/meshmark.js b/src/sections/Company/Brand/Brand-components/meshmark.js index 02d3d4c4370d..65032c23f677 100644 --- a/src/sections/Company/Brand/Brand-components/meshmark.js +++ b/src/sections/Company/Brand/Brand-components/meshmark.js @@ -118,7 +118,9 @@ const MeshMarkBrand = () => { using project colors as the background.

        - + diff --git a/src/sections/Company/Brand/Brand-components/meshsync.js b/src/sections/Company/Brand/Brand-components/meshsync.js index 54ebd4daa10f..a37f09e1f5f6 100644 --- a/src/sections/Company/Brand/Brand-components/meshsync.js +++ b/src/sections/Company/Brand/Brand-components/meshsync.js @@ -78,7 +78,9 @@ const MeshSyncBrand = () => { monochrome tonal when using a color background.

        - + diff --git a/src/sections/Company/Brand/Brand-components/servicemeshpatterns.js b/src/sections/Company/Brand/Brand-components/servicemeshpatterns.js index 7e37c24b9587..a0b29c5fa7bb 100644 --- a/src/sections/Company/Brand/Brand-components/servicemeshpatterns.js +++ b/src/sections/Company/Brand/Brand-components/servicemeshpatterns.js @@ -78,7 +78,9 @@ const ServiceMeshPatterns = () => { using project colors as the background.

        - + diff --git a/src/sections/Company/Brand/Brand-components/smp.js b/src/sections/Company/Brand/Brand-components/smp.js index eeac312a412c..2bc2ed53be15 100644 --- a/src/sections/Company/Brand/Brand-components/smp.js +++ b/src/sections/Company/Brand/Brand-components/smp.js @@ -104,7 +104,9 @@ const SMPBrand = () => { using project colors as the background.

        - + diff --git a/src/sections/Company/Brand/Brand-components/stickfigures.js b/src/sections/Company/Brand/Brand-components/stickfigures.js index 01b6f608ed1d..e6eeb69a2a98 100644 --- a/src/sections/Company/Brand/Brand-components/stickfigures.js +++ b/src/sections/Company/Brand/Brand-components/stickfigures.js @@ -6,25 +6,25 @@ import SFL from "../../../../assets/images/five/SVG/stick-figures.svg"; import teamOfFives from "../../../../assets/images/five/SVG/team-of-fives.svg"; import resourcesSign from "../../../../assets/images/five/SVG/resources-sign.svg"; import mesheryWorship from "../../../../assets/images/five/meshery-worship.png"; -import f1 from "../../../../assets/images/five/SVG/1.svg"; -import f2 from "../../../../assets/images/five/SVG/2.svg"; -import f3 from "../../../../assets/images/five/SVG/3.svg"; -import f4 from "../../../../assets/images/five/SVG/4.svg"; -import f5 from "../../../../assets/images/five/SVG/5.svg"; -import f6 from "../../../../assets/images/five/SVG/6.svg"; -import f7 from "../../../../assets/images/five/SVG/7.svg"; -import f8 from "../../../../assets/images/five/SVG/8.svg"; -import f9 from "../../../../assets/images/five/SVG/9.svg"; -import f10 from "../../../../assets/images/five/SVG/10.svg"; -import f11 from "../../../../assets/images/five/SVG/11.svg"; -import f12 from "../../../../assets/images/five/SVG/12.svg"; -import f13 from "../../../../assets/images/five/SVG/13.svg"; -import f14 from "../../../../assets/images/five/SVG/14.svg"; -import f15 from "../../../../assets/images/five/SVG/15.svg"; -import f16 from "../../../../assets/images/five/SVG/16.svg"; -import f17 from "../../../../assets/images/five/SVG/17.svg"; -import f18 from "../../../../assets/images/five/SVG/18.svg"; -import f19 from "../../../../assets/images/five/SVG/19.svg"; +// import f1 from "../../../../assets/images/five/SVG/1.svg"; +// import f2 from "../../../../assets/images/five/SVG/2.svg"; +// import f3 from "../../../../assets/images/five/SVG/3.svg"; +// import f4 from "../../../../assets/images/five/SVG/4.svg"; +// import f5 from "../../../../assets/images/five/SVG/5.svg"; +// import f6 from "../../../../assets/images/five/SVG/6.svg"; +// import f7 from "../../../../assets/images/five/SVG/7.svg"; +// import f8 from "../../../../assets/images/five/SVG/8.svg"; +// import f9 from "../../../../assets/images/five/SVG/9.svg"; +// import f10 from "../../../../assets/images/five/SVG/10.svg"; +// import f11 from "../../../../assets/images/five/SVG/11.svg"; +// import f12 from "../../../../assets/images/five/SVG/12.svg"; +// import f13 from "../../../../assets/images/five/SVG/13.svg"; +// import f14 from "../../../../assets/images/five/SVG/14.svg"; +// import f15 from "../../../../assets/images/five/SVG/15.svg"; +// import f16 from "../../../../assets/images/five/SVG/16.svg"; +// import f17 from "../../../../assets/images/five/SVG/17.svg"; +// import f18 from "../../../../assets/images/five/SVG/18.svg"; +// import f19 from "../../../../assets/images/five/SVG/19.svg"; const StickFigures = () => { return ( diff --git a/src/sections/Company/Legal/terms-of-service/index.js b/src/sections/Company/Legal/terms-of-service/index.js index c88f9b0abb53..a4e89da9958b 100644 --- a/src/sections/Company/Legal/terms-of-service/index.js +++ b/src/sections/Company/Legal/terms-of-service/index.js @@ -15,7 +15,7 @@ const Conduct = () => {

        Agreement between User and Layer5, Inc.

        -

        Welcome to meshery.layer5.io. The meshery.layer5.io website (the “Site”) is comprised of various web pages operated by Layer5.io, Inc (“Layer5”). meshery.layer5.io is offered to you conditioned on your acceptance without modification of the terms, conditions, and notices contained herein (the “Terms”). Your use of meshery.layer5.io constitutes your agreement to all such Terms. Please read these terms carefully, and keep a copy of them for your reference. +

        Welcome to cloud.layer5.io. The cloud.layer5.io website (the “Site”) is comprised of various web pages operated by Layer5.io, Inc (“Layer5”). cloud.layer5.io is offered to you conditioned on your acceptance without modification of the terms, conditions, and notices contained herein (the “Terms”). Your use of cloud.layer5.io constitutes your agreement to all such Terms. Please read these terms carefully, and keep a copy of them for your reference.

        layer5.io is a Software Product and Services Site.

        @@ -29,7 +29,7 @@ const Conduct = () => {

        Electronic Communications

        - Visiting meshery.layer5.io or sending emails to Layer5 constitutes electronic communications. You consent to receive electronic communications and you agree that all agreements, notices, disclosures and other communications that we provide to you electronically, via email and on the Site, satisfy any legal requirement that such communications be in writing. + Visiting cloud.layer5.io or sending emails to Layer5 constitutes electronic communications. You consent to receive electronic communications and you agree that all agreements, notices, disclosures and other communications that we provide to you electronically, via email and on the Site, satisfy any legal requirement that such communications be in writing.

        @@ -39,7 +39,7 @@ const Conduct = () => {

        Children Under Thirteen

        -Layer5 does not knowingly collect, either online or offline, personal information from persons under the age of thirteen. If you are under 18, you may use meshery.layer5.io only with permission of a parent or guardian. +Layer5 does not knowingly collect, either online or offline, personal information from persons under the age of thirteen. If you are under 18, you may use cloud.layer5.io only with permission of a parent or guardian.
        @@ -48,9 +48,9 @@ Layer5 does not knowingly collect, either online or offline, personal informatio

        No Unlawful or Prohibited Use/Intellectual Property

        Links to Third Party Sites/Third Party Services
        -meshery.layer5.io may contain links to other websites ("Linked Sites"). The Linked Sites are not under the control of Layer5 and Layer5 is not responsible for the contents of any Linked Site, including without limitation any link contained in a Linked Site, or any changes or updates to a Linked Site. Layer5 is providing these links to you only as a convenience, and the inclusion of any link does not imply endorsement by Layer5 of the site or any association with its operators. + cloud.layer5.io may contain links to other websites ("Linked Sites"). The Linked Sites are not under the control of Layer5 and Layer5 is not responsible for the contents of any Linked Site, including without limitation any link contained in a Linked Site, or any changes or updates to a Linked Site. Layer5 is providing these links to you only as a convenience, and the inclusion of any link does not imply endorsement by Layer5 of the site or any association with its operators. -

        Certain services made available via meshery.layer5.io are delivered by third party sites and organizations. By using any product, service or functionality originating from the meshery.layer5.io domain, you hereby acknowledge and consent that Layer5 may share such information and data with any third party with whom Layer5 has a contractual relationship to provide the requested product, service or functionality on behalf of meshery.layer5.io users and customers.

        +

        Certain services made available via cloud.layer5.io are delivered by third party sites and organizations. By using any product, service or functionality originating from the cloud.layer5.io domain, you hereby acknowledge and consent that Layer5 may share such information and data with any third party with whom Layer5 has a contractual relationship to provide the requested product, service or functionality on behalf of cloud.layer5.io users and customers.

        @@ -59,7 +59,7 @@ meshery.layer5.io may contain links to other websites ("Linked Sites"). The Link

        No Unlawful or Prohibited Use/Intellectual Property

        -

        You are granted a non-exclusive, non-transferable, revocable license to access and use meshery.layer5.io strictly in accordance with these terms of use. As a condition of your use of the Site, you warrant to Layer5 that you will not use the Site for any purpose that is unlawful or prohibited by these Terms. You may not use the Site in any manner which could damage, disable, overburden, or impair the Site or interfere with any other party's use and enjoyment of the Site.

        +

        You are granted a non-exclusive, non-transferable, revocable license to access and use cloud.layer5.io strictly in accordance with these terms of use. As a condition of your use of the Site, you warrant to Layer5 that you will not use the Site for any purpose that is unlawful or prohibited by these Terms. You may not use the Site in any manner which could damage, disable, overburden, or impair the Site or interfere with any other party's use and enjoyment of the Site.

        You may not obtain or attempt to obtain any materials or information through any means not intentionally made available or provided for through the Site.

        @@ -74,7 +74,7 @@ meshery.layer5.io may contain links to other websites ("Linked Sites"). The Link

        International Users

        - The Service is controlled, operated and administered by Layer5 from our offices within the USA. If you access the Service from a location outside the USA, you are responsible for compliance with all local laws. You agree that you will not use the Layer5 Content accessed through meshery.layer5.io in any country or in any manner prohibited by any applicable laws, restrictions or regulations. + The Service is controlled, operated and administered by Layer5 from our offices within the USA. If you access the Service from a location outside the USA, you are responsible for compliance with all local laws. You agree that you will not use the Layer5 Content accessed through cloud.layer5.io in any country or in any manner prohibited by any applicable laws, restrictions or regulations.

        @@ -128,7 +128,7 @@ meshery.layer5.io may contain links to other websites ("Linked Sites"). The Link

        Changes to Terms

        - Layer5 reserves the right, in its sole discretion, to change the Terms under which meshery.layer5.io is offered. The most current version of the Terms will supersede all previous versions. Layer5 encourages you to periodically review the Terms to stay informed of our updates. + Layer5 reserves the right, in its sole discretion, to change the Terms under which cloud.layer5.io is offered. The most current version of the Terms will supersede all previous versions. Layer5 encourages you to periodically review the Terms to stay informed of our updates.

        diff --git a/src/sections/Company/News-single/index.js b/src/sections/Company/News-single/index.js index e549695db4f0..2bb787049db8 100644 --- a/src/sections/Company/News-single/index.js +++ b/src/sections/Company/News-single/index.js @@ -8,8 +8,10 @@ import NewsSidebar from "./Sidebar"; import NewsPageWrapper from "./NewsSingle.style.js"; import RelatedPosts from "../../../components/Related-Posts"; +import { useStyledDarkMode } from "../../../theme/app/useStyledDarkMode"; const NewsSingle = ({ data }) => { + const { isDark } = useStyledDarkMode(); const { frontmatter, body, fields } = data.mdx; const newsData = useStaticQuery( graphql`query relatedNewsPosts { @@ -54,7 +56,8 @@ const NewsSingle = ({ data }) => { subtitle={frontmatter.subtitle} category={frontmatter.category} author={{ name: frontmatter.author }} - thumbnail={frontmatter.thumbnail} + thumbnail={ isDark && frontmatter.darkthumbnail && frontmatter.darkthumbnail.publicURL !== frontmatter.thumbnail.publicURL + ? frontmatter.darkthumbnail : frontmatter.thumbnail} date={frontmatter.date} />
        diff --git a/src/sections/Counters/index.js b/src/sections/Counters/index.js index 996065b41063..7f90f142f3e0 100644 --- a/src/sections/Counters/index.js +++ b/src/sections/Counters/index.js @@ -5,7 +5,7 @@ import Counter from "../../reusecore/Counter"; import CounterSectionWrapper from "./counterSection.style"; -export const URL = "https://meshery.layer5.io/api/performance/results/total"; +export const URL = "https://cloud.layer5.io/api/performance/results/total"; const Counters = () => { const [performanceCount, setPerformanceCount] = useState(0); diff --git a/src/sections/FeatureHero/index.js b/src/sections/FeatureHero/index.js index 9272e37b96d1..c1081b43df92 100644 --- a/src/sections/FeatureHero/index.js +++ b/src/sections/FeatureHero/index.js @@ -36,7 +36,7 @@ const FeatureHero = (props) => {
        diff --git a/src/sections/GCP-Diagram/diagram.js b/src/sections/GCP-Diagram/diagram.js index e84703e10a10..35ab063a0559 100644 --- a/src/sections/GCP-Diagram/diagram.js +++ b/src/sections/GCP-Diagram/diagram.js @@ -176,7 +176,7 @@ const Gcp = () => {
        -

        Extensive GCP Icon Library

        +

        Extensive GCP component library

        Utilize a vast and continually expanding collection of GCP icons designed for both diagramming and orchestration scenarios. Craft globally comprehensible diagrams that are not only authentic but also aligned with the latest industry standards.

        diff --git a/src/sections/GCP-Diagram/index.js b/src/sections/GCP-Diagram/index.js index fcf310317ea5..d80ee016860b 100644 --- a/src/sections/GCP-Diagram/index.js +++ b/src/sections/GCP-Diagram/index.js @@ -11,7 +11,7 @@ const GcpDiagramPage = () => { const { isDark } = useStyledDarkMode(); let data = { heading: "GCP Orchestration and Diagramming Software", - sub_heading: "Orchestrate and design Google Cloud Platform architecture diagrams easily with predefined templates and symbols designed for professionals.", + sub_heading: "Orchestrate and design Google Cloud Platform architecture diagrams easily with predefined templates designed for professionals.", image: isDark ? GCPDiagramDark : GCPDiagramDark }; return ( diff --git a/src/sections/General/Navigation/index.js b/src/sections/General/Navigation/index.js index ca80dcadc0ce..3962b78a94b3 100644 --- a/src/sections/General/Navigation/index.js +++ b/src/sections/General/Navigation/index.js @@ -21,7 +21,7 @@ import CloudIcon from "./utility/CloudIcon.js"; import LogoutIcon from "./utility/LogoutIcon.js"; // import LogoutIcon from "./utility/LogoutIcon.js"; import KanvasIcon from "./utility/KanvasIcon.js"; -import posthog from "posthog-js"; + const Navigation = () => { let data = useStaticQuery( graphql`{ @@ -183,7 +183,7 @@ const Navigation = () => { } useEffect(() => { const CLOUD_USER_API = - "https://meshery.layer5.io/api/identity/users/profile"; + "https://cloud.layer5.io/api/identity/users/profile"; const fetchData = async () => { try { const token = getCookieValue("provider_token"); @@ -198,14 +198,6 @@ const Navigation = () => { } const data = response.data; - if (data){ - posthog.identify( - data?.id, - { - email: data?.email - } - ); - } setUserData(data); } catch (error) { console.error("There was a problem with your fetch operation:", error); @@ -347,7 +339,7 @@ const Navigation = () => { $secondary className="banner-btn two" title="Get Started" - $url="https://meshery.layer5.io/login" + $url="https://cloud.layer5.io/login" $external={true} />
      • @@ -396,7 +388,7 @@ const Navigation = () => { rel="noreferrer" target="_blank" className="drop-item" - href={`https://meshery.layer5.io/user/${userData.id}`} + href={`https://cloud.layer5.io/user/${userData.id}`} >
        @@ -429,7 +421,7 @@ const Navigation = () => { onClick={() => { removeCookie("provider_token"); // Open logout API link in a new tab - window.open("https://meshery.layer5.io/logout", "_blank"); + window.open("https://cloud.layer5.io/logout", "_blank"); // Refresh the current page window.location.reload(); @@ -453,7 +445,7 @@ const Navigation = () => { $external={true} title="Get Started" alt="Signup for Layer5 Cloud" - $url="https://meshery.layer5.io/registration" + $url="https://cloud.layer5.io/registration" /> )} {/* - diff --git a/src/sections/Home/FeaturesContainer/index.js b/src/sections/Home/FeaturesContainer/index.js index 95a2602ff268..73c7bc8549cc 100644 --- a/src/sections/Home/FeaturesContainer/index.js +++ b/src/sections/Home/FeaturesContainer/index.js @@ -41,7 +41,7 @@ const FeaturesContainer = () => { redirectLink: "", desc: ( - Incorporate AWS and{" "} GCP components into Meshery designs for + Incorporate AWS and{" "} GCP components into Kanvas designs for comprehensive and{" "} intuitive system mapping, documentation, and{" "} orchestration. diff --git a/src/sections/Home/Partners-home/index.js b/src/sections/Home/Partners-home/index.js index abf636babcdc..b91262a93dc3 100644 --- a/src/sections/Home/Partners-home/index.js +++ b/src/sections/Home/Partners-home/index.js @@ -1,3 +1,5 @@ +import "slick-carousel/slick/slick.css"; +import "slick-carousel/slick/slick-theme.css"; import React from "react"; import { Container, Row } from "../../../reusecore/Layout"; import SectionTitle from "../../../reusecore/SectionTitle"; @@ -5,8 +7,6 @@ import PartnerItemWrapper from "./partnerSection.style"; import { Link } from "gatsby"; import { partners } from "./partners-home-data"; import Slider from "react-slick"; -import "slick-carousel/slick/slick.css"; -import "slick-carousel/slick/slick-theme.css"; const settings = { initialSlide: 1, diff --git a/src/sections/Home/So-Special-Section/index.js b/src/sections/Home/So-Special-Section/index.js index 92f87301128d..0474474f4749 100644 --- a/src/sections/Home/So-Special-Section/index.js +++ b/src/sections/Home/So-Special-Section/index.js @@ -1,7 +1,7 @@ -import React from "react"; -import Slider from "react-slick"; import "slick-carousel/slick/slick.css"; import "slick-carousel/slick/slick-theme.css"; +import React from "react"; +import Slider from "react-slick"; import SoSpecialWrapper from "./so-special-style"; import Button from "../../../reusecore/Button"; diff --git a/src/sections/Kanvas/Kanvas-visualize/kanvas-visualize-banner.js b/src/sections/Kanvas/Kanvas-visualize/kanvas-visualize-banner.js index 4547ee727622..23d20fabd611 100644 --- a/src/sections/Kanvas/Kanvas-visualize/kanvas-visualize-banner.js +++ b/src/sections/Kanvas/Kanvas-visualize/kanvas-visualize-banner.js @@ -1,6 +1,6 @@ import React from "react"; import styled from "styled-components"; -import Button from "../../../reusecore/Button"; +// import Button from "../../../reusecore/Button"; import KanvasBtn from "../kanvas-buttons"; const VisualizeBannerWrapper = styled.div` diff --git a/src/sections/Kanvas/kanvas_banner.js b/src/sections/Kanvas/kanvas_banner.js index 4900923cf757..2da3a46e963f 100644 --- a/src/sections/Kanvas/kanvas_banner.js +++ b/src/sections/Kanvas/kanvas_banner.js @@ -4,18 +4,21 @@ import KanvasIcon from "./kanvas-icon.svg"; const BannerSectionWrapper = styled.div` - display: flex; - background: #000000; - border-radius: 0% 85% 0% 0% / 0% 80% 0% 0% ; - -webkit-box-shadow: 5px -5px 15px 5px rgba(0,0,0,0.33); - box-shadow: 1px -5px 5px 1px rgba(235,192,23,.5); - - padding: 8rem 6rem 3rem 6rem; - max-width: 1140px; - width: 100%; - margin: auto; - min-height: 25rem; - + display: flex; + flex-wrap: nowrap; + background: #000000; + border-radius: 0% 85% 0% 0% / 0% 80% 0% 0% ; + -webkit-box-shadow: 5px -5px 15px 5px rgba(0,0,0,0.33); + box-shadow: 1px -5px 5px 1px rgba(235,192,23,.5); + gap: 5rem; + padding: 6rem 6rem 6rem 6rem; + max-width: 1140px; + width: 100%; + margin: auto; + min-height: 25rem; + align-content: end; + + div.banner-text { h1 { /* background-color: ${props => props.theme.black}; */ font-weight: 500; @@ -35,7 +38,7 @@ const BannerSectionWrapper = styled.div` } @media screen and (max-width: 448px) { font-size: 38px; - span{ + span { font-size: 48px; } } @@ -44,63 +47,58 @@ const BannerSectionWrapper = styled.div` margin: 1.5rem 0; } } - h2 { - margin-bottom: 1rem; - font-size: 1.95rem; - font-weight: 400; - color: ${props => props.theme.white}; - font-style: italic; - span { + h2 { + margin-bottom: 1rem; + font-size: 1.95rem; + font-weight: 400; + color: ${props => props.theme.white}; + font-style: italic; + span { + font-style: normal; + } + } + h2.readyPlayer { + margin: 2rem 0rem 0rem 0rem; + background-color: black; + position: absolute; + z-index: 1; + padding: 1.5rem; + color: white; font-style: normal; + text-transform: uppercase ; + font-size: 2.5rem; + text-align: center; } - } - h2.readyPlayer { - margin: 2rem 0rem 0rem 0rem; - background-color: black; - position: absolute; - z-index: 1; - padding: 1.5rem; - color: white; - font-style: normal; - text-transform: uppercase ; - font-size: 2.5rem; - text-align: center; - } - - } - .banner-text p { - color: ${props => props.theme.saffronColor}; - margin-bottom: .5rem; - font-weight: 400; - font-size: 1.75rem; - font-style: italic; - min-width: 18rem; - font-family: "Qanelas Soft"; - span { + p { color: ${props => props.theme.saffronColor}; + margin-bottom: .5rem; + font-weight: 400; + font-size: 1.75rem; + font-style: italic; + min-width: 18rem; + font-family: "Qanelas Soft"; + span { + color: ${props => props.theme.saffronColor}; + } } - } - h4 { - text-transform: uppercase; - padding-left: 1rem; - font-style: italic; - font-size: 1.25rem; - color: ${props => props.theme.white}; - span { + h4 { + text-transform: uppercase; padding-left: 1rem; + font-style: italic; + font-size: 1.25rem; + color: ${props => props.theme.white}; + span { + padding-left: 1rem; + } } } - .kanvas-logo { width: 14rem; overflow: hidden; - margin-top: -7rem; - position: relative; - left: 10%; - margin-top: -8rem; - z-index: 0; - - } + display: flex; + align-self: center; + flex-wrap: nowrap; + } div.accent-bubble { width: 50%; height: 100%; @@ -118,9 +116,7 @@ const BannerSectionWrapper = styled.div` @media screen and (max-width: 1700px) { .kanvas-logo { - width: 20rem; - left: 21%; - margin-top: -7rem; + width: 12rem; } .para { margin-top: -3rem; @@ -128,37 +124,39 @@ const BannerSectionWrapper = styled.div` } @media screen and (max-width: 1200px) { .kanvas-logo { - width: 18rem; - left: 18%; - margin-top: -6rem; + width: 10rem; } - /* border-radius: 0% 85% 0% 0% / 0% 60% 0% 0% ; */ + border-radius: 0% 85% 0% 0% / 0% 60% 0% 0% ; } @media screen and (max-width: 992px) { .kanvas-logo { width: 8rem; - margin-top: -2rem; - left: 15%; } + .banner-text { + margin-left: 0rem; + margin-bottom: 0rem; + h1 { font-size: 50px; } + h2 { font-size: 1.25rem; } + h4 { font-size: 1rem; } + p { font-size: 1.25rem; } + } + gap: 2.5rem; + min-height: 12rem; + padding: 6rem 2rem 2rem 2rem; border-radius: 0% 85% 0% 0% / 0% 60% 0% 0% ; } @media screen and (max-width: 768px) { padding: 8rem 2rem 3rem; .kanvas-logo { - margin-top: -5rem; - margin-right: 2rem; - left: 7%; - min-width: 5rem; + min-width: 6rem; } border-radius: 0% 85% 0% 0% / 0% 40% 0% 0% ; } @media screen and (max-width: 500px) { .kanvas-logo { - margin-top: -5rem; - margin-right: 2rem; - left: 0%; - min-width: 3rem; + + /* min-width: 3rem; */ } border-radius: 0% 85% 0% 0% / 0% 40% 0% 0% ; } @@ -202,4 +200,4 @@ const BannerSection = () => { ); }; -export default BannerSection; +export default BannerSection; \ No newline at end of file diff --git a/src/sections/Landscape/smi.js b/src/sections/Landscape/smi.js index 4cbd74187cf0..ee097268120d 100644 --- a/src/sections/Landscape/smi.js +++ b/src/sections/Landscape/smi.js @@ -37,7 +37,7 @@ function SMI_Compatibility() { const [smiData, setSmiData] = useState(0); useEffect(() => { - fetch("https://meshery.layer5.io/api/smi/results/public") + fetch("https://cloud.layer5.io/api/smi/results/public") .then(response => response.json()) // Group by SMI-spec version .then(results => { diff --git a/src/sections/Learn/Books-grid/index.js b/src/sections/Learn/Books-grid/index.js index d898f3c0e208..10f8313a8488 100644 --- a/src/sections/Learn/Books-grid/index.js +++ b/src/sections/Learn/Books-grid/index.js @@ -1,10 +1,10 @@ +import "slick-carousel/slick/slick.css"; +import "slick-carousel/slick/slick-theme.css"; import React from "react"; import { graphql, useStaticQuery } from "gatsby"; import PageHeader from "../../../reusecore/PageHeader"; import { Link } from "gatsby"; import Slider from "react-slick"; -import "slick-carousel/slick/slick.css"; -import "slick-carousel/slick/slick-theme.css"; import { BooksPageWrapper } from "./BooksGrid.style"; const BooksPage = ({ hide_path }) => { diff --git a/src/sections/Learn/LearnPage-Sections/workshops.js b/src/sections/Learn/LearnPage-Sections/workshops.js index af7175e20091..e7b8e90a0974 100644 --- a/src/sections/Learn/LearnPage-Sections/workshops.js +++ b/src/sections/Learn/LearnPage-Sections/workshops.js @@ -1,11 +1,11 @@ +import "slick-carousel/slick/slick.css"; +import "slick-carousel/slick/slick-theme.css"; import React from "react"; import { graphql, useStaticQuery, Link } from "gatsby"; import { Row, Col } from "../../../reusecore/Layout"; import Button from "../../../reusecore/Button"; import { feedbackData } from "./feedbackData"; import Slider from "react-slick"; -import "slick-carousel/slick/slick.css"; -import "slick-carousel/slick/slick-theme.css"; import { FiArrowRight } from "@react-icons/all-files/fi/FiArrowRight"; import { FiArrowLeft } from "@react-icons/all-files/fi/FiArrowLeft"; import styled from "styled-components"; diff --git a/src/sections/Meshery/Features-Col/index.js b/src/sections/Meshery/Features-Col/index.js index eeec9fb67718..850ea68f4d76 100644 --- a/src/sections/Meshery/Features-Col/index.js +++ b/src/sections/Meshery/Features-Col/index.js @@ -60,7 +60,7 @@ function getFeatureBlock(feature, index, performanceCount) { const Features = () => { const [performanceCount, setPerformanceCount] = useState(0); - const performanceCountEndpoint = "https://meshery.layer5.io/api/performance/results/total"; + const performanceCountEndpoint = "https://cloud.layer5.io/api/performance/results/total"; useEffect(() => { fetch(performanceCountEndpoint) diff --git a/src/sections/Meshery/Features-section/index.js b/src/sections/Meshery/Features-section/index.js index 5f8f33648442..00c9744d426b 100644 --- a/src/sections/Meshery/Features-section/index.js +++ b/src/sections/Meshery/Features-section/index.js @@ -1,9 +1,9 @@ +import "slick-carousel/slick/slick.css"; +import "slick-carousel/slick/slick-theme.css"; import React from "react"; import { Row, Col } from "../../../reusecore/Layout"; import Button from "../../../reusecore/Button"; import Slider from "react-slick"; -import "slick-carousel/slick/slick.css"; -import "slick-carousel/slick/slick-theme.css"; import Slide1 from "../images/service mesh performance example.gif"; import Slide2 from "../images/meshery_benchmark_screen.webp"; import Slide3 from "../images/meshery-configuration-management.webp"; diff --git a/src/sections/Meshery/How-meshery-works/howitworks.style.js b/src/sections/Meshery/How-meshery-works/howitworks.style.js index 1fa527c79528..54b027752651 100644 --- a/src/sections/Meshery/How-meshery-works/howitworks.style.js +++ b/src/sections/Meshery/How-meshery-works/howitworks.style.js @@ -71,6 +71,7 @@ h2 { } .diagram { + margin-bottom:150px; width: 591px; max-width: 100%; position: sticky; diff --git a/src/sections/Meshery/Meshery-integrations/Individual-Integrations/CatalogGrid.js b/src/sections/Meshery/Meshery-integrations/Individual-Integrations/CatalogGrid.js index 27a1f1ad114a..2ddb301c232d 100644 --- a/src/sections/Meshery/Meshery-integrations/Individual-Integrations/CatalogGrid.js +++ b/src/sections/Meshery/Meshery-integrations/Individual-Integrations/CatalogGrid.js @@ -13,7 +13,7 @@ const CatalogGrid = ({ frontmatter }) => { const { isDark } = useStyledDarkMode(); useEffect(() => { - const CLOUD_FETCH_DESIGN = `https://meshery.layer5.io/api/catalog/content/pattern?technology=${ + const CLOUD_FETCH_DESIGN = `https://cloud.layer5.io/api/catalog/content/pattern?technology=${ technology[technology.length - 1] }&page=0&pagesize=${designSize}&search=&order=&metrics=true`; const fetchData = async () => { @@ -52,7 +52,7 @@ const CatalogGrid = ({ frontmatter }) => { return ( { ) : isGcpItem ? ( ) : ( diff --git a/src/sections/Meshery/Meshery-integrations/Integration.style.js b/src/sections/Meshery/Meshery-integrations/Integration.style.js index 7c7ee84326d2..60b595b5be5e 100755 --- a/src/sections/Meshery/Meshery-integrations/Integration.style.js +++ b/src/sections/Meshery/Meshery-integrations/Integration.style.js @@ -1,7 +1,7 @@ -import styled from "styled-components"; -import Slider from "react-slick"; import "slick-carousel/slick/slick.css"; import "slick-carousel/slick/slick-theme.css"; +import styled from "styled-components"; +import Slider from "react-slick"; export const HoneycombGrid = styled.div` .heading { diff --git a/src/sections/Meshery/meshery-operator/index.js b/src/sections/Meshery/meshery-operator/index.js index 13617d323278..3ef3a3c5bc81 100644 --- a/src/sections/Meshery/meshery-operator/index.js +++ b/src/sections/Meshery/meshery-operator/index.js @@ -1,12 +1,12 @@ -import React from "react"; + +import "slick-carousel/slick/slick.css"; +import "slick-carousel/slick/slick-theme.css";import React from "react"; import { StaticImage } from "gatsby-plugin-image"; import MesheryOperatorWrapper from "./mesheryoperator.style"; import { Container, Row, Col } from "../../../reusecore/Layout"; import Slider from "react-slick"; -import "slick-carousel/slick/slick.css"; -import "slick-carousel/slick/slick-theme.css"; import SubscribeSection from "../../../sections/subscribe/subscribe"; import Deployment from "./deployment.svg"; diff --git a/src/sections/Pricing/data.js b/src/sections/Pricing/archived/data.js similarity index 99% rename from src/sections/Pricing/data.js rename to src/sections/Pricing/archived/data.js index 90838de228b1..731ab10e2e8c 100644 --- a/src/sections/Pricing/data.js +++ b/src/sections/Pricing/archived/data.js @@ -434,7 +434,7 @@ export const options = [ monthlyprice: 0, yearlyprice: 0, byline: "Open Source features, plus:", - button: ["Join for Free", "https://meshery.layer5.io"], + button: ["Join for Free", "https://cloud.layer5.io"], summary: [ { id: 0, category: "Cloud Native Design Patterns", description: "Import and export your designs using your local filesystem or remote URL." }, { id: 1, category: "Multiple Kubernetes Clusters", description: "Ongoing synchronization of Kubernetes configuration, workloads and cloud native infrastructure changes across any number of Kubernetes clusters." }, diff --git a/src/sections/Pricing/comparison.js b/src/sections/Pricing/comparison.js index 3d4e735ea0d6..5081e3181f40 100644 --- a/src/sections/Pricing/comparison.js +++ b/src/sections/Pricing/comparison.js @@ -1,6 +1,6 @@ import React from "react"; import styled from "styled-components"; -import { details } from "./data"; +import details from "./generateDetails"; import { Container } from "../../reusecore/Layout"; // import FeatureDetails from "./collapsible-details"; import FeatureDetails from "../../components/PlanCard/collapsible-details"; @@ -40,7 +40,7 @@ h2, h5{ vertical-align: middle; transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - h5{ + h5 { display: flex; text-align: left; padding-top: 1rem; @@ -49,7 +49,9 @@ h2, h5{ } .price-table tr td:first-child { border-left: 0 none; - width: 45%; + width: 100%; + justify-content: flex-start; + text-align: left; } .price-table tr td:not(:first-child) { text-align: center; @@ -70,22 +72,21 @@ h2, h5{ /* Highlighted column */ -.price-table tr td:nth-child(2) { +.price-table tr td:nth-child(3) { background: rgba(0,179,159,0.1); padding: 8px 48px; } .price-table tr.price-table-head td { - font-size: 16px; + font-size: 1.15rem; + line-height: 1.5rem; font-weight: 600; + padding: .5rem; text-transform: uppercase; } .price-table tr.price-table-head { - background-color: #00b39f; + background-color:${props => props.theme.secondaryColor}; color: #FFFFFF; - td{ - padding: 1rem 0; - } } .price-table td.price { padding: 16px 24px; @@ -101,59 +102,93 @@ h2, h5{ display: inline-block; border-radius: 64px; } -.price-table td.price-table-popular { +.price-table th.price-table-popular { border-top: 3px solid #00b39f; - color: #00b39f; + color:${props => props.theme.saffronColor}; + background-color:rgba(0,179,159,0.1); text-transform: uppercase; font-size: 12px; padding: 12px 48px; font-weight: 700; } .price-table .price-blank { - background-color: ${props => props.theme.grey191919ToGreyFAFAFA}; + background-color: ${props => props.theme.secondaryDarkColor}; border: 0 none; transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); } -.category{ +.category { display: inline-block; margin: 0 1rem; } -.icon{ +.icon { height: 4rem; width: auto; fill: #00b39f; display: inline-block; } -.no-icon{ +.no-icon { height: 1.5rem; width: auto; fill: red; } -.yes-icon{ +.yes-icon { height: 1.5rem; width: auto; fill: #00b39f; } -.toggle-btn{ +.toggle-btn { margin-top: 1rem; } -.details{ - p{ +.details { + p { color: #7A848E; margin-left: 1.1rem; } } -.category-icon{ - margin: 0rem auto; +.category-icon { + +} +.categories { + display: flex; + width: 100%; + text-align: left; + align-items: center; + margin: 1rem auto; +} +.docs { + width:1rem; + height:1rem; +} + +td.feature { + padding: auto; + margin: 0px; } -.categories{ +.feature-link-container { display: flex; align-items: center; - margin: 1rem 0; + justify-content: space-between; +} + +.feature-name { + margin-right: 0.5rem; } +.feature-link { + color: #00b39f; + text-decoration: none; + font-size: 0.9rem; +} +.feature-link > svg { + &:hover { + opacity:.5; + } + } +.feature-link:hover { + text-decoration: underline; +} `; const Comparison = () => { @@ -166,34 +201,34 @@ const Comparison = () => { - - - - + + + + + - + + {details.map((x) => ( <> - - - - {x.features.map((f) => ( - - - + + + + ))} diff --git a/src/sections/Pricing/feature_data.json b/src/sections/Pricing/feature_data.json new file mode 100644 index 000000000000..a6710a672626 --- /dev/null +++ b/src/sections/Pricing/feature_data.json @@ -0,0 +1,1186 @@ +[ + { + "theme": "This sheet is for purposes of classifying and itemizing the features and their subscription tiers for publishing on layer5.io/pricing and cloud.layer5.io.", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "1st section of webpage", + "comparison_tiers": { + "free": "2nd section of webpage", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "1", + "function": "Infrastructure as Design", + "feature": "Drag-n-drop cloud native infrastructure designer to configure, model, and deploy your workloads", + "subscription_tier": "Free", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "2", + "function": "Export Designs", + "feature": "Export a latest version of design in any supported format: Kubernetes Manifest, Helm Chart, Docker Compose, Artifact Hub and as any OCI, YAML, or JSON.", + "subscription_tier": "", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/kanvas/designer/export-designs/#exporting-as-a-design-file" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "3", + "function": "350 Built-in Models", + "feature": "Thousands of standardized components to represent complex systems, providing logical architecture of your infrastructure.", + "subscription_tier": "Free", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.meshery.io/concepts/logical/models" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "4", + "function": "Custom Models", + "feature": "Define new components, relationships, and policies as needed. Import/export your custom models as OCI images.", + "subscription_tier": "Free", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.meshery.io/guides/configuration-management/importing-models" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "5", + "function": "Import your IaC", + "feature": "Import a design from Kubernetes Manifest, Helm Chart, Docker Compose or Artifact Hub.", + "subscription_tier": "", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.meshery.io/extensions/importing-a-design" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "6", + "function": "Design Review Notifications", + "feature": "In-line commenting. Threaded discussions. Notifications w/user mentions. Silence notifications. Resolve and reopen comments. Comment history.", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "x", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "7", + "function": "Bulk Import IaC", + "feature": "Bulk import of your existing infrastructure as code from GitHub repositories.", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/cloud/getting-started/github-integration/" + }, + { + "theme": "", + "categoryOrder": "0", + "category": "Configuration Management", + "functionOrder": "8", + "function": "Validate Infrastructure Configuration", + "feature": "Static validation of configured parameters for design completeness and accuracy.", + "subscription_tier": "TeamDesigner", + "comparison_tiers": { + "free": "", + "teamDesigner": "x", + "teamOperator": "", + "enterprise": "" + }, + "docs": "https://docs.layer5.io/kanvas/tasks/designs/validating-designs/" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "no", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "101", + "function": "Discovery of existing infrastructure", + "feature": "Discover clusters and/or import existing Kubernetes applications. Visualize their architecture, and gain a clear understanding of how different components interact.", + "subscription_tier": "Free", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "102", + "function": "Robust CLI", + "feature": "Seamlessly manage your configurations, deployments, and interactions through our intuitive and powerful command-line interface: mesheryctl", + "subscription_tier": "Free", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.meshery.io/reference/mesheryctl" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "103", + "function": "Environments, Deployments, & Dry-runs", + "feature": "Operational control of infrastructure and applications by group. Deploy to multiple Environments. Test and verify configuration changes prior to deployment.", + "subscription_tier": "TeamOperator", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "104", + "function": "Web-based Terminal", + "feature": "Direct terminal access to one ore more pods/containers simultaneously. Integrated experience.", + "subscription_tier": "TeamOperator", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/kanvas/tasks/designs/deploying-designs/" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "105", + "function": "Standard Metrics", + "feature": "Real-time resource metrics for managed workloads.", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/kanvas/operator/operator-views/" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "107", + "function": "Assign Views to Workspace", + "feature": "Add new views to workspace", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "108", + "function": "Export views", + "feature": "Export views to JSON format", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/kanvas/operator/operator-views/#5-export-a-view" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "109", + "function": "Share Views", + "feature": "Share views with anyone within your organization, and make your design easily accessible to all relevant team members.", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/kanvas/operator/operator-views/#3-share-a-view" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "110", + "function": "Stream Container Logs", + "feature": "Stream and search logs from one or more pod/container simultaneously to observe application behavior and identify issues in real time.", + "subscription_tier": "TeamOperator", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "112", + "function": "Multiple Kubernetes Clusters", + "feature": "Management and ongoing synchronization of cloud native infrastructure across any number of Clouds and Kubernetes clusters.", + "subscription_tier": "TeamOperator", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "113", + "function": "Multi-Cloud Integration", + "feature": "Management and ongoing synchronization of AWS and GCP services, workloads and changes across any number of accounts.", + "subscription_tier": "TeamOperator", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "1", + "category": "Lifecycle Management", + "functionOrder": "115", + "function": "Orchestration: Provisioning / Deprovisioning", + "feature": "Provision and deprovision cloud native infrastructure using your designs.", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/kanvas/tasks/designs/undeploying-designs/" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "2", + "category": "Kanvas", + "functionOrder": "201", + "function": "Whiteboarding", + "feature": "Pencil for freeform drawing of any shapes", + "subscription_tier": "Free", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/kanvas/designer/whiteboarding/" + }, + { + "theme": "", + "categoryOrder": "2", + "category": "Kanvas", + "functionOrder": "202", + "function": "500 Built-in Shapes, Pen and Pencil", + "feature": "Draw shapes, lines, text, customize style, drag and drop images and text files to represent the components and relationships of between your infrastructure components.", + "subscription_tier": "", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "2", + "category": "Kanvas", + "functionOrder": "203", + "function": "Layers", + "feature": "Use layers to show, hide, and group objects on the same board—perfect for building detailed diagrams or revealing project phases.", + "subscription_tier": "", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "3", + "category": "Performance Management", + "functionOrder": "301", + "function": "Load Generation and Performance Testing", + "feature": "Continuous visibility across all of your clusters and workloads. Single or multiple results in standardized format.", + "subscription_tier": "Free", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.meshery.io/guides/performance-management/performance-management" + }, + { + "theme": "", + "categoryOrder": "3", + "category": "Performance Management", + "functionOrder": "302", + "function": "Performance Profiles", + "feature": "Define, name, and save performance profiles. Share performance profiles and test results with individual users or teams.", + "subscription_tier": "TeamOperator", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "3", + "category": "Performance Management", + "functionOrder": "303", + "function": "Comparative Testing", + "feature": "Visual comparison of performance test results.", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "3", + "category": "Performance Management", + "functionOrder": "304", + "function": "Capacity, soak, and burst testing", + "feature": "Protocols: HTTP, HTTPS, TCP, gRPC with configuration duration, concurrency", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "4", + "category": "Collaboration", + "functionOrder": "401", + "function": "Team Design Review", + "feature": "Multiple users to simultaneously edit a document, leave comments directly on specific text sections, and track changes made by others, enabling efficient collaboration and feedback loops during the review process.", + "subscription_tier": "TeamDesigner", + "comparison_tiers": { + "free": "", + "teamDesigner": "x", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/kanvas/designer/comments/" + }, + { + "theme": "", + "categoryOrder": "4", + "category": "Collaboration", + "functionOrder": "402", + "function": "Collaborative Infrastructure Design", + "feature": "Create and collaborate in online designs in real-time.", + "subscription_tier": "TeamDesigner", + "comparison_tiers": { + "free": "", + "teamDesigner": "x", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "4", + "category": "Collaboration", + "functionOrder": "403", + "function": "Public and Private Designs", + "feature": "Invite any user to collaborate on your public or private designs.", + "subscription_tier": "TeamDesigner", + "comparison_tiers": { + "free": "", + "teamDesigner": "x", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "4", + "category": "Collaboration", + "functionOrder": "404", + "function": "Collaborative Infrastructure Views", + "feature": "Simultaneously manage your infrastructure using shared views in real-time. See the status of your deployments, monitor performance, and troubleshoot issues. Views provide tools for interacting with your cluster, such as terminal access and log streaming.", + "subscription_tier": "TeamOperator", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "4", + "category": "Collaboration", + "functionOrder": "405", + "function": "Public and Private Views", + "feature": "Invite any user to collaborate on your public or private views.", + "subscription_tier": "TeamOperator", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/kanvas/operator/operator-views/" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "5", + "category": "Identity & Access Management", + "functionOrder": "501", + "function": "Built-in Roles", + "feature": "Predefined user roles: Organization Admin, Team Admin, Workspace Admin", + "subscription_tier": "Free", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/cloud/security/roles/" + }, + { + "theme": "", + "categoryOrder": "5", + "category": "Identity & Access Management", + "functionOrder": "502", + "function": "Identity through OAuth", + "feature": "Use third-party identity providers, Google and GitHub, to manage the identities of your organization's members.", + "subscription_tier": "", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "5", + "category": "Identity & Access Management", + "functionOrder": "503", + "function": "Teams", + "feature": "Establish new team for organizing groups of users and resource access. Single organization, multiple teams.", + "subscription_tier": "TeamDesigner|TeamOperator", + "comparison_tiers": { + "free": "", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/cloud/identity/teams/" + }, + { + "theme": "", + "categoryOrder": "5", + "category": "Identity & Access Management", + "functionOrder": "504", + "function": "Custom Roles", + "feature": "Assign User Roles, Assign Keychains to Roles", + "subscription_tier": "Enterprise", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/cloud/security/roles/" + }, + { + "theme": "", + "categoryOrder": "5", + "category": "Identity & Access Management", + "functionOrder": "508", + "function": "Cloud as an IDP", + "feature": "Own and control the user accounts of your enterprise members with Layer5 Cloud your identity provider (IdP).", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "5", + "category": "Identity & Access Management", + "functionOrder": "509", + "function": "Organizations", + "feature": "Particpate as a member of multiple organizations each with their own accounting and billing structure. Multiple organizations, multiple teams.", + "subscription_tier": "Enterprise", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/cloud/identity/organizations/" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "6", + "category": "Workspaces", + "functionOrder": "601", + "function": "My Workspace", + "feature": "My Workspace is your always available, primary space for storing designs, views, and models that you own.", + "subscription_tier": "Free", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "6", + "category": "Workspaces", + "functionOrder": "605", + "function": "Manage Workspace Team and Environment Access", + "feature": "Assign designs, views, users, and environments to shared workspaces.", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "6", + "category": "Workspaces", + "functionOrder": "602", + "function": "Shared Workspaces", + "feature": "Shared Workspaces are collaborative spaces that you can use to store and collaborate on files within and between teams. Easily share files with customizable permissions (edit, comment, view). Create up to 10 shared workspaces per organization.", + "subscription_tier": "TeamDesigner|TeamOperator", + "comparison_tiers": { + "free": "", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "6", + "category": "Workspaces", + "functionOrder": "603", + "function": "GitOps Snapshots", + "feature": "Visual insights in your pull requests in GitHub. Verify your workload designs and Kubernetes cluster configurations prior to accepting and merging pull requests.", + "subscription_tier": "TeamDesigner", + "comparison_tiers": { + "free": "", + "teamDesigner": "x", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/cloud/tutorials/gitops-snapshots/" + }, + { + "theme": "", + "categoryOrder": "6", + "category": "Workspaces", + "functionOrder": "604", + "function": "GitOps Integrations", + "feature": "Initiate deployment with creation of pull request, ArgoEvents, Flux sync, or webhook.", + "subscription_tier": "Enterprise", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "701", + "function": "Public Catalog: 400 Cloud Native Patterns", + "feature": "A library of pre-built design patterns and operational templates for common deployment scenarios, simplifying the configuration process and ensuring best practices.", + "subscription_tier": "Free", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "https://cloud.layer5.io/catalog" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "702", + "function": "Organization Private Catalog", + "feature": "Privately publish and share reusable design patterns and operational templates within your organization.", + "subscription_tier": "Enterprise", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/cloud/catalog/" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "703", + "function": "Share Design", + "feature": "Share design with anyone within your organization, and make your design easily accessible to all relevant team members.", + "subscription_tier": "", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/kanvas/designer/share-resource/" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "704", + "function": "Clone Design", + "feature": "Clone any published design to customise it according to your use cases", + "subscription_tier": "", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/kanvas/tasks/designs/cloning-a-design/" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "707", + "function": "View Filters", + "feature": "View all public and published filters of other team members and private of signed-in user", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "7", + "category": "Catalog", + "functionOrder": "708", + "function": "Approve Catalog Request", + "feature": "Change management for the curation of content published in the catalog.", + "subscription_tier": "Enterprise", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/cloud/catalog/" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "8", + "category": "Security", + "functionOrder": "802", + "function": "Event Audit Trail", + "feature": "Detailed accounting of user activity. Historical record or each action taken.", + "subscription_tier": "Enterprise", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/cloud/security/" + }, + { + "theme": "", + "categoryOrder": "8", + "category": "Security", + "functionOrder": "803", + "function": "Customizable Permissions: Keys, Keychains and Roles", + "feature": "Highly flexible permissioning. Organize keys into custom keychains and assign to existing or custom roles that you define.", + "subscription_tier": "Enterprise", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/cloud/security/" + }, + { + "theme": "", + "categoryOrder": "8", + "category": "Security", + "functionOrder": "805", + "function": "User Session and API Token Oversight", + "feature": "Expiring and non-expiring API tokens. Visibility into active and expired user sessions.", + "subscription_tier": "Enterprise", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/cloud/security/tokens/" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "9", + "category": "Managed Service Provider", + "functionOrder": "902", + "function": "Public Profiles for Users", + "feature": "See public user profile details, public activities and public resources.", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "9", + "category": "Managed Service Provider", + "functionOrder": "903", + "function": "Recognition Program Badges", + "feature": "Badges are visual indicators of achievements or milestones that users can earn in order to recognizing activity milestones, encouraging positive behavior, mark progress, and gamifying platform experience.", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "9", + "category": "Managed Service Provider", + "functionOrder": "904", + "function": "Self-service User Accounts", + "feature": "New user sign-up verification. Self-service password recovery.", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "https://docs.layer5.io/cloud/getting-started/getting-started-with-layer5-account/#7-viewing-your-layer5-profile" + }, + { + "theme": "", + "categoryOrder": "10", + "category": "Support and Deployment", + "functionOrder": "1001", + "function": "Community Support", + "feature": "Get help with most of your questions and issues in our Community Forum.", + "subscription_tier": "Free", + "comparison_tiers": { + "free": "x", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "10", + "category": "Support and Deployment", + "functionOrder": "1002", + "function": "Standard Support", + "feature": "Layer5 Support can help you troubleshoot issues you run into. Get support via email.", + "subscription_tier": "TeamDesigner|TeamOperator", + "comparison_tiers": { + "free": "", + "teamDesigner": "x", + "teamOperator": "x", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "10", + "category": "Support and Deployment", + "functionOrder": "1003", + "function": "Managed Service Provider", + "feature": "White Label: Customize the appearance and branding of your engineering platform powered by Layer5 Cloud. \n

        Multi-tenancy: Hierarchical organizations, teams, users and customizable permissioning.", + "subscription_tier": "Enterprise", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "10", + "category": "Support and Deployment", + "functionOrder": "1004", + "function": "Premium Support", + "feature": "With Premium, get a 2-hour SLA and 24/7 web and phone support.", + "subscription_tier": "Enterprise", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "x" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + }, + { + "theme": "", + "categoryOrder": "", + "category": "", + "functionOrder": "", + "function": "", + "feature": "", + "subscription_tier": "", + "comparison_tiers": { + "free": "", + "teamDesigner": "", + "teamOperator": "", + "enterprise": "" + }, + "docs": "" + } +] \ No newline at end of file diff --git a/src/sections/Pricing/generateDetails.js b/src/sections/Pricing/generateDetails.js new file mode 100644 index 000000000000..498fec33f2d9 --- /dev/null +++ b/src/sections/Pricing/generateDetails.js @@ -0,0 +1,101 @@ +import React from "react"; +import { GiCheckMark } from "@react-icons/all-files/gi/GiCheckMark"; +import { MdClose } from "@react-icons/all-files/md/MdClose"; +import featureData from "./feature_data.json"; +import Configuration from "./icons/configuration.svg"; +import Lifecycle from "./icons/lifecycle.svg"; +import Kanvas from "./icons/kanvas-icon.svg"; +import Perforamance from "./icons/perf.svg"; +import Collab from "./icons/collaboration.svg"; +import Spaces from "./icons/spaces.svg"; +import Identity from "./icons/identity.svg"; +// import Notification from "./icons/notification.svg"; +import Support from "./icons/support.svg"; +import Catalog from "./icons/catalog.svg"; +import Security from "./icons/security.svg"; +import Docs from "./icons/docs.js"; + +function generateDetails(data) { + const categories = [ + { id: 0, name: "Configuration Management", icon: Configuration }, + { id: 1, name: "Lifecycle Management", icon: Lifecycle }, + { id: 2, name: "Kanvas", icon: Kanvas }, + { id: 3, name: "Performance Management", icon: Perforamance }, + { id: 4, name: "Collaboration", icon: Collab }, + { id: 5, name: "Identity & Access Management", icon: Identity }, + { id: 6, name: "Workspaces", icon: Spaces }, + // { id: 6, name: "Incident Management", icon: Notification }, + { id: 7, name: "Catalog", icon: Catalog }, + { id: 8, name: "Security", icon: Security }, + { id: 9, name: "Managed Service Provider", icon: Support }, + { id: 10, name: "Support and Deployment", icon: Support }, + // { id: 11, name: "Support and Deployment", icon: Support }, + ]; + + return categories.map(category => { + const features = data + .filter( + item => + item.category === category.name) + .map(item => { + const featureName = item.function; + const description = item.feature; + const documentedLink = item.docs; + const featureWithLink = documentedLink ? ( +
        + {featureName}{" "} + + + +
        + ) : ( + featureName + ); + + return { + feature: featureWithLink, + description, + free: + item.comparison_tiers.free === "X" || item.comparison_tiers.free === "x" ? ( + + ) : ( + + ), + teamDesigner: + item.comparison_tiers.teamDesigner === "X" || item.comparison_tiers.teamDesigner === "x" ? ( + + ) : ( + + ), + teamOperator: + item.comparison_tiers.teamOperator === "X" || item.comparison_tiers.teamOperator === "x" ? ( + + ) : ( + + ), + enterprise: + item.comparison_tiers.enterprise === "X" || item.comparison_tiers.enterprise === "x" ? ( + + ) : ( + + ), + }; + }); + + return { + id: category.id, + category: category.name, + icon: category.icon, + features: features, + }; + }); +} + +const details = generateDetails(featureData); + +export default details; \ No newline at end of file diff --git a/src/sections/Pricing/generatePlans.js b/src/sections/Pricing/generatePlans.js new file mode 100644 index 000000000000..a819f58e67fa --- /dev/null +++ b/src/sections/Pricing/generatePlans.js @@ -0,0 +1,86 @@ +import featureData from "./feature_data.json"; +import comingSoon from "./icons/coming-soon.webp"; +import React from "react"; + +function generatePlans(data) { + + const tiers = { + "Free": { + tier: "Personal", + featured: false, + monthlyprice: 0, + yearlyprice: 0, + byline: "The basics for individuals and organizations", + byline2: " Everything from Open Source, plus...", + button: ["Join for Free", "https://cloud.layer5.io"] + }, + "TeamDesigner": { + tier: "Team Designer", + featured: true, + monthlyprice: 8, + yearlyprice: 68, + byline: "Advanced collaboration for declarative DevOps", + byline2: "← Everything included in Free, plus...", + button: ["Start Free Trial", "https://cloud.layer5.io"], + }, + "TeamOperator": { + tier: "Team Operator", + featured: false, + monthlyprice: 8, + yearlyprice: 68, + // pricing_coming_soon: Coming Soon, + byline: "Advanced collaboration for imperative DevOps", + byline2: "← Everything included in Free, plus...", + button: ["Start Free Trial", "https://cloud.layer5.io"], + }, + "Enterprise": { + tier: "Enterprise", + featured: false, + monthlyprice: 22, + yearlyprice: 248, + pricing_coming_soon: Coming Soon, + byline: "Flexible deployment, and MSP multi-tenancy.", + byline2: "← Everything included in Team, plus...", + button: ["Contact Sales", "https://us15.list-manage.com/contact-form?u=6b50be5aea3dfe1fd4c041d80&form_id=d0ffe17c92d8014ede6b721aa16096e8"], + }, + }; + + const plans = Object.entries(tiers).map(([tierName, tierInfo]) => { + + const summary = data + .flatMap((item) => { + const tiers = item.subscription_tier.split("|"); + return tiers.map((tier) => ({ + ...item, + subscription_tier: tier.trim() + })); + }) + .filter((item) => { + const matches = + item.subscription_tier === tierName; //&& !item.exclude === "x"; + return matches; + }) + .map((item, index) => { + const mappedItem = { + id: index, + categoryOrder: item.categoryOrder, + category: item.function, + functionOrder: item.functionOrder, + description: item.feature, + tier: item.subscription_tier, + }; + + return mappedItem; + }) + .sort((a, b) => a.categoryOrder - b.categoryOrder || a.functionOrder - b.functionOrder); + return { + ...tierInfo, + summary: summary.length > 0 ? summary : [], + }; + }); + return plans; +} + +const plans = generatePlans(featureData); + +export default plans; diff --git a/src/sections/Pricing/icons/catalog.svg b/src/sections/Pricing/icons/catalog.svg new file mode 100644 index 000000000000..6f073f051a58 --- /dev/null +++ b/src/sections/Pricing/icons/catalog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/sections/Pricing/icons/docs.js b/src/sections/Pricing/icons/docs.js new file mode 100644 index 000000000000..01640ee2ee19 --- /dev/null +++ b/src/sections/Pricing/icons/docs.js @@ -0,0 +1,22 @@ +import React from "react"; + +const docsIcon = ({ + width = "20px", + height = "20px", + fill = "currentColor", + style = {} +}) => ( + + + +); + +export default docsIcon; \ No newline at end of file diff --git a/src/sections/Pricing/icons/security.svg b/src/sections/Pricing/icons/security.svg new file mode 100644 index 000000000000..69a39a29f8e9 --- /dev/null +++ b/src/sections/Pricing/icons/security.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/sections/Pricing/icons/spaces.svg b/src/sections/Pricing/icons/spaces.svg new file mode 100644 index 000000000000..c7d35448ba54 --- /dev/null +++ b/src/sections/Pricing/icons/spaces.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/sections/Pricing/index.js b/src/sections/Pricing/index.js index c93cb0c8ff9e..d7e6f852ef80 100644 --- a/src/sections/Pricing/index.js +++ b/src/sections/Pricing/index.js @@ -1,21 +1,41 @@ -import React from "react"; +import React, { useState } from "react"; import PricingWrapper from "./pricing.style"; import Comparison from "./comparison"; import FAQ from "../General/Faq"; import Reviews from "./review-slider"; -import { options } from "./data"; +import options from "./generatePlans"; import PlanCard from "../../components/PlanCard"; const Pricing = () => { - // const [monthly, setMonthly] = useState(false); + const [isYearly, setIsYearly] = useState(false); + + const handleToggle = () => { + setIsYearly((prev) => !prev); + }; return ( -

        Plans For Every Team Size

        +
        +
        + handleToggle(false)} // Call handleToggle + > + Monthly + + handleToggle(true)} // Call handleToggle + > + Yearly + +
        +
        + {/*
        - +
        diff --git a/src/sections/Pricing/pricing.style.js b/src/sections/Pricing/pricing.style.js index c74766e32bd1..c4ed2a12b473 100644 --- a/src/sections/Pricing/pricing.style.js +++ b/src/sections/Pricing/pricing.style.js @@ -31,11 +31,44 @@ const PricingWrapper = styled.section` height: 12vw; } .header-heading { + margin-top: 2rem; color: white; text-align: center; } } +.toggle-container { + display: flex; + justify-content: end; + align-items: center; + margin: 2rem 0; + font-size: .9rem; + gap: 10px; + width: 85%; +} + +.toggle { + border: 2px solid ${props => props.theme.shadowLightColor}; + padding: .4rem; + border-radius: .5rem; +} + +.toggle-container span { + cursor: pointer; + padding: .5rem 1rem; + color: #fff; + border-radius: .5rem; + transition: background-color 0.3s, color 0.3s; +} + +.toggle-container .active { + background-color: ${props => props.theme.secondaryColor}; + color: #fff; + font-weight: 600; + border-color: ${props => props.theme.secondaryColor}; +} + + .subscription-duration { margin-top: 2rem; margin-bottom: 4rem; @@ -78,26 +111,29 @@ const PricingWrapper = styled.section` .inactive { background-color: ${props => props.theme.primaryLightColor}; - padding: 0.2rem; + padding: 0.rem; transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); } } .wrapper{ - max-width: 1090px; + max-width: 1600px; position: relative; width: 100%; padding: 0 2rem; - margin: -2rem auto; + margin: -6rem auto; display: flex; flex-wrap: wrap; justify-content: space-between; + /* @media (max-width: 1200px) { + margin: -6rem auto; + } @media (min-width: 1400px) { - margin: -8rem auto 0; + margin: -6rem auto; } @media (min-width: 2048px) { - margin: -10rem auto; - } + margin: -6rem auto; + } */ } .accordion__item { @@ -106,13 +142,13 @@ const PricingWrapper = styled.section` } } -.pricing_coming_soon{ - width : 150px; - position : relative ; - float : right; +.pricing_coming_soon { + width: 80px; + position: relative ; + float: right; z-index:2; - margin-top:-2rem; - margin-right:-5.4rem; + margin-top: -1.4rem; + margin-right: -2.4rem; -webkit-transform: translateY(0%) translateX(0%) rotate(14deg); } diff --git a/src/sections/Pricing/review-slider.js b/src/sections/Pricing/review-slider.js index 5acb8d09d61c..58f2a76e84f2 100644 --- a/src/sections/Pricing/review-slider.js +++ b/src/sections/Pricing/review-slider.js @@ -1,9 +1,9 @@ +import "slick-carousel/slick/slick.css"; +import "slick-carousel/slick/slick-theme.css"; import React from "react"; import styled from "styled-components"; import Customers from "../../reusecore/Blockquote/Blockquote-image"; import Slider from "react-slick"; -import "slick-carousel/slick/slick.css"; -import "slick-carousel/slick/slick-theme.css"; import Maxi from "../../collections/members/maximiliano-churichi/Maximiliano-Churichi.webp"; import Otto from "../../collections/members/otto-van-der-schaaf/otto-van-der-schaaf.webp"; import Nic from "../../collections/members/nicholas-jackson/nic-jackson.webp"; diff --git a/src/sections/Products/index.js b/src/sections/Products/index.js index 656fa5b706bf..40caa00cad8a 100644 --- a/src/sections/Products/index.js +++ b/src/sections/Products/index.js @@ -24,7 +24,7 @@ const options = [ monthlyprice: 0, yearlyprice: 0, byline: "Open Source features, plus:", - button: ["Join for Free", "https://meshery.layer5.io"], + button: ["Join for Free", "https://cloud.layer5.io"], summary: [ { id: 0, @@ -212,7 +212,7 @@ const index = () => { flexibility, elevating operations to new efficiencies.{" "}

        -
        diff --git a/src/sections/Projects/Image-Hub/index.js b/src/sections/Projects/Image-Hub/index.js index 197da9b1642d..7ccdcc359a30 100644 --- a/src/sections/Projects/Image-Hub/index.js +++ b/src/sections/Projects/Image-Hub/index.js @@ -1,3 +1,5 @@ +import "slick-carousel/slick/slick.css"; +import "slick-carousel/slick/slick-theme.css"; import React from "react"; @@ -6,8 +8,6 @@ import ImageHubWrapper from "./imageHub.style"; import { Container } from "../../../reusecore/Layout"; import Button from "../../../reusecore/Button"; import Slider from "react-slick"; -import "slick-carousel/slick/slick.css"; -import "slick-carousel/slick/slick-theme.css"; import VintageBox from "../../../reusecore/VintageBox"; diff --git a/src/sections/Projects/Sistent/components/backdrop/code.js b/src/sections/Projects/Sistent/components/backdrop/code.js new file mode 100644 index 000000000000..85c395f42cb0 --- /dev/null +++ b/src/sections/Projects/Sistent/components/backdrop/code.js @@ -0,0 +1,126 @@ +import { useLocation } from "@reach/router"; +import { navigate } from "gatsby"; +import React from "react"; + +import { Container, SistentThemeProvider } from "@layer5/sistent"; +import { SistentLayout } from "../../sistent-layout"; +import { CodeBlock } from "../button/code-block"; + +import TabButton from "../../../../../reusecore/Button"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +import { Backdrop, Button, CircularProgress } from "@layer5/sistent"; + +const codes = [ + ` + import { Backdrop, Button, CircularProgress } from "@layer5/sistent"; + + // declare states and functions to handle open and close operation + + /* + const [open, setOpen] = React.useState(false); + const handleClose = () => setOpen(false); + const handleOpen = () => setOpen(true); + */ +
        + + ({ + color: "#fff", + zIndex: theme.zIndex.drawer + 1, + })} + open={open} + onClick={handleClose} + > + + +
        `, +]; + +const BackdropCode = () => { + const location = useLocation(); + const { isDark } = useStyledDarkMode(); + + const [open, setOpen] = React.useState(false); + const handleClose = () => setOpen(false); + const handleOpen = () => setOpen(true); + + return ( + +
        + +

        Backdrop

        +
        +

        +
        + navigate("/projects/sistent/components/backdrop")} + title="Overview" + /> + + navigate("/projects/sistent/components/backdrop/guidance") + } + title="Guidance" + /> + + navigate("/projects/sistent/components/backdrop/code") + } + title="Code" + /> +
        +
        +

        + The Backdrop component overlays a dimmed background across the + screen to direct focus to specific content in the foreground, like + loading indicators, modals, or dialogs. It visually signals that the + background content is temporarily inaccessible. The Backdrop can be + closed when clicked, depending on the close action set in its props. +

        + +

        Backdrop Example

        +
        +
        +
        + + + + ({ + color: "#fff", + zIndex: theme.zIndex.drawer + 1, + })} + open={open} + onClick={handleClose} + > + + + + +
        + +
        +
        +
        +
        + ); +}; + +export default BackdropCode; \ No newline at end of file diff --git a/src/sections/Projects/Sistent/components/backdrop/guidance.js b/src/sections/Projects/Sistent/components/backdrop/guidance.js new file mode 100644 index 000000000000..a4c9d8c770ea --- /dev/null +++ b/src/sections/Projects/Sistent/components/backdrop/guidance.js @@ -0,0 +1,313 @@ +import React from "react"; +import { navigate } from "gatsby"; +import { useLocation } from "@reach/router"; +import { SistentLayout } from "../../sistent-layout"; +import TabButton from "../../../../../reusecore/Button"; + +const BackdropGuidance = () => { + const location = useLocation(); + + return ( + +
        + +

        Backdrop

        +
        +

        + The Backdrop component is used to overlay a dimmed background across + the screen, drawing attention to content in the foreground, such as + modals, dialogs, or loading indicators. The backdrop signals that the + background content is temporarily inaccessible. +

        +
        + navigate("/projects/sistent/components/backdrop")} + title="Overview" + /> + + navigate("/projects/sistent/components/backdrop/guidance") + } + title="Guidance" + /> + + navigate("/projects/sistent/components/backdrop/code") + } + title="Code" + /> +
        +
        +

        + The Backdrop component provides a clean and efficient way to overlay + a backdrop layer to indicate that the background content is + temporarily inactive or inaccessible. This component is primarily + used in conjunction with modals, loading indicators, or popovers. +

        + + +

        Function

        +
        + +

        The Backdrop component helps achieve the following functions:

        +
          +
        • + Modal Backdrop: Provides a visual overlay when a + modal is open, dimming the background and focusing attention on + the modal. +
        • +
        • + Loading Indicator: Can be used with a loading + spinner or indicator to notify users that content is being + processed. +
        • +
        • + Popover or Custom Select: Useful for making a + popover or custom select component more noticeable by blocking + interaction with the background. +
        • +
        + + +

        Props

        +
        +

        Props of the Fade component are also available.

        + +
        Most popularMost popular
        FreeTeamTeam DesignerTeam Operator Enterprise
        - {x.category} + + {x.category}

        {x.category}

        {f.free}{f.team}{f.enterprise}{f.free}{f.teamDesigner}{f.teamOperator}{f.enterprise}
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameTypeDefaultDescription
        + open* + + bool + - + If true, the component is shown. +
        + children + + node + -The content of the component.
        + classes + + object + - + Override or extend the styles applied to the component. See + CSS classes API below for more details. +
        + component + + elementType + - + The component used for the root node. Either a string to use + an HTML element or a component. +
        + components + + Root?: elementType + + {} + + The components used for each slot inside. + Deprecated — Use the slots prop + instead. This prop will be removed in v7. See Migrating from + deprecated APIs for more details. +
        + componentsProps + + root?: object + + {} + + The extra props for the slot components. You can override the + existing props or add new ones. + Deprecated — Use the slotProps{" "} + prop instead. This prop will be removed in v7. +
        + invisible + + bool + + false + + If true, the backdrop is invisible, useful for + popovers or custom selects. +
        + slotProps + + root?: func | object, transition?: func | object + + {} + The props used for each slot inside the component.
        + slots + + root?: elementType, transition?: elementType + + {} + The components used for each slot inside.
        + sx + + Array<func | object | bool> | func | object + - + The system prop for defining system overrides and additional + CSS styles. See the{" "} + sx page for more + details. +
        + TransitionComponent + + elementType + + Fade + + The component used for the transition. Refer to the guide for + component requirements. +
        + transitionDuration + + + number | appear?: number, enter?: number, exit?: number{" "} + + - + Duration for the transition, in milliseconds. Specify a single + timeout or individual times. +
        + + +

        Labeling

        +
        + +

        + The Backdrop component provides a clear visual indication that + content is temporarily inaccessible. It is typically used for + displaying temporary UI elements, such as dialogs or loading + indicators. It's important to ensure that the backdrop is not + intrusive and is used in the appropriate context. +

        + +

        + It is also essential to consider accessibility and usability when + implementing a backdrop. Ensure that users can interact with the + content behind the backdrop when it is dismissed or closed, and + ensure proper keyboard and screen reader support. +

        + + +

        Responsive Design

        +
        + +

        + The Backdrop component can be easily integrated into responsive + designs, ensuring that it adapts to different screen sizes and + layouts. It should be used in a way that works well on mobile + devices, tablets, and desktops. Consider the size of the overlay and + how it impacts the user experience across devices. +

        + +

        + You can adjust the backdrop's visibility, duration, and animation to + suit different screen sizes and provide a smooth user experience on + all devices. +

        +
        + + + ); +}; + +export default BackdropGuidance; \ No newline at end of file diff --git a/src/sections/Projects/Sistent/components/backdrop/index.js b/src/sections/Projects/Sistent/components/backdrop/index.js new file mode 100644 index 000000000000..fae98c2eeec3 --- /dev/null +++ b/src/sections/Projects/Sistent/components/backdrop/index.js @@ -0,0 +1,119 @@ +import React from "react"; +import { navigate } from "gatsby"; +import { useLocation } from "@reach/router"; + +import { + SistentThemeProvider, + Button, + Backdrop, + CircularProgress, +} from "@layer5/sistent"; +import TabButton from "../../../../../reusecore/Button"; +import { SistentLayout } from "../../sistent-layout"; +import { Row } from "../../../../../reusecore/Layout"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +const SistentBackdrop = () => { + const location = useLocation(); + const { isDark } = useStyledDarkMode(); + + const [open, setOpen] = React.useState(false); + const handleClose = () => setOpen(false); + const handleOpen = () => setOpen(true); + + return ( + +
        + +

        Backdrop

        +
        +

        + The Backdrop component overlays a dimmed background across the screen + to direct focus to specific content in the foreground, like loading + indicators, modals, or dialogs. It visually signals that the + background content is temporarily inaccessible. The Backdrop can be + closed when clicked, depending on the close action set in its props. +

        +
        + navigate("/projects/sistent/components/backdrop")} + title="Overview" + /> + + navigate("/projects/sistent/components/backdrop/guidance") + } + title="Guidance" + /> + + navigate("/projects/sistent/components/backdrop/code") + } + title="Code" + /> +
        +
        +

        + The Backdrop component in React is used to overlay a dimmed + background across the entire screen, guiding the user's focus to a + specific element or content in the foreground. This component is + often utilized for scenarios that require a change in the + application’s state, such as showing loading indicators, modals, + dialogs, or other focused content. +

        +

        + In its simplest use, a Backdrop dims the background, enhancing the + visibility of what’s in the foreground while signaling that the + underlying content is temporarily inaccessible. When Backdrop is + open, users can click on it to close it, depending on how the close + action is handled in the component’s props. +

        + +

        How to use

        +
        +

        + The demo below shows a basic Backdrop with a Circular Progress + component in the foreground to indicate a loading state. After + clicking Show Backdrop, you can click anywhere on the page to close + it. +

        + + +
        + + ({ + color: "#fff", + zIndex: theme.zIndex.drawer + 1, + })} + open={open} + onClick={handleClose} + > + + +
        +
        +
        +
        +
        +
        + ); +}; + +export default SistentBackdrop; diff --git a/src/sections/Projects/Sistent/components/box/code.js b/src/sections/Projects/Sistent/components/box/code.js new file mode 100644 index 000000000000..7dd3032bc2c1 --- /dev/null +++ b/src/sections/Projects/Sistent/components/box/code.js @@ -0,0 +1,210 @@ +import React from "react"; +import { navigate } from "gatsby"; +import { useLocation } from "@reach/router"; + +import { SistentThemeProvider, Box } from "@layer5/sistent"; +import { CodeBlock } from "../button/code-block"; +import { SistentLayout } from "../../sistent-layout"; + +import TabButton from "../../../../../reusecore/Button"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +const codes = [ + ` +

        + This is a Box component with custom background and padding. +

        +
        `, + ` +

        + This Box is responsive, changing style based on screen size. +

        +
        `, + ` +

        + This Box is responsive, changing style based on screen size. +

        +
        `, + ` +

        Hover over this Box to see the interactive effect.

        +
        `, +]; + +const BoxCode = () => { + const location = useLocation(); + const { isDark } = useStyledDarkMode(); + + return ( + +
        + +

        Box

        +
        +
        + navigate("/projects/sistent/components/box")} + title="Overview" + /> + + navigate("/projects/sistent/components/box/guidance") + } + title="Guidance" + /> + navigate("/projects/sistent/components/box/code")} + title="Code" + /> +
        +
        +

        + The Box component is a flexible and foundational + container in Sistent, designed to structure and style content. It + provides quick access to the theme and CSS utilities, allowing for + easy customization and responsive design. Using the sx prop, + developers can apply CSS styles directly with theme-aware + properties, making Box ideal for layouts, spacing, and other UI + adjustments. It can render as any HTML element using the component + prop, offering high versatility in both structure and styling. +

        + +

        Basic Box Example

        +
        +

        + A simple Box component can be used to contain and structure other + elements. Here, the Box serves as a basic container without any + styling applied. +

        +
        +
        + + +

        This is a basic Box component.

        +
        +
        +
        + +
        + +

        Styled Box Example

        +
        +

        + You can add custom styles to a Box component by applying{" "} + sx + properties. In this example, the Box has a background color, + padding, and a defined height. +

        +
        +
        + + +

        + This is a Box component with custom background and padding. +

        +
        +
        +
        + +
        + +

        Responsive Box Example

        +
        +

        + The Box component also supports responsive styling using the{" "} + sx prop. In this example, the Box adjusts its padding + and background color based on screen size. +

        +
        +
        + + +

        + This Box is responsive, changing style based on screen size. +

        +
        +
        +
        + +
        + +

        Interactive Box Example

        +
        +

        + Here’s an example where the Box component includes hover effects to + create a more interactive experience. This is useful for buttons, + cards, and other clickable elements. +

        +
        +
        + + +

        + Hover over this Box to see the interactive effect. +

        +
        +
        +
        + +
        +
        +
        +
        + ); +}; + +export default BoxCode; \ No newline at end of file diff --git a/src/sections/Projects/Sistent/components/box/guidance.js b/src/sections/Projects/Sistent/components/box/guidance.js new file mode 100644 index 000000000000..e692d982a680 --- /dev/null +++ b/src/sections/Projects/Sistent/components/box/guidance.js @@ -0,0 +1,181 @@ +import React from "react"; +import { navigate } from "gatsby"; +import { useLocation } from "@reach/router"; +import { Row } from "../../../../../reusecore/Layout"; +import { SistentThemeProvider, Box } from "@layer5/sistent"; +import { SistentLayout } from "../../sistent-layout"; + +import TabButton from "../../../../../reusecore/Button"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +const BoxGuidance = () => { + const location = useLocation(); + const { isDark } = useStyledDarkMode(); + + return ( + +
        + +

        Box

        +
        +

        + The Box component is a flexible, theme-aware container that adapts + seamlessly across various layouts. It provides a convenient way to + apply styles, positioning, and responsive adjustments to content, + making it ideal for any layout needs. +

        +
        + navigate("/projects/sistent/components/box")} + title="Overview" + /> + + navigate("/projects/sistent/components/box/guidance") + } + title="Guidance" + /> + navigate("/projects/sistent/components/box/code")} + title="Code" + /> +
        + +
        +

        + The Box component is a highly versatile tool that can be used for + layout management, spacing, styling, and more. With full support for + responsive design, Box is an essential part of any well-structured + application, allowing developers to customize and style elements + while keeping the theme consistent. +

        + + +

        Function

        +
        + +

        The Box component serves several functions:

        + +

        Responsive Styling

        +

        + The sx prop makes it easy to apply responsive styles + directly within the component, allowing for adaptive design that + looks great across all screen sizes. +

        + + + +

        + This is a responsive Box component. +

        +
        +
        +
        + +

        Flexible Layout Control

        +

        + Box can serve as a container for organizing other elements, whether + it's aligning text, images, or interactive components. The + flexibility of the Box component allows it to adapt to a wide range + of layout needs, from card-style containers to more complex nested + structures. +

        + +

        Customizable Appearance

        +

        + The Box component’s customization options allow you to adjust + colors, borders, shadows, and more through the sx prop, + ensuring that components blend well with your app's overall theme. +

        + + + +

        + Customized Box with shadow and color. +

        +
        +
        +
        + + +

        Use Cases

        +
        + +

        Nested Layouts

        +

        + Use Box to create nested layouts by embedding one Box within + another, each with distinct styling. This setup enables the creation + of structured and multi-layered designs. +

        + + + + +

        Nested Box layout example.

        +
        +
        +
        +
        + +

        Utility for Spacing and Margin

        +

        + Leveraging Box for margin and padding adjustments offers + fine-grained control over spacing between components, making it + useful in complex layouts where alignment and spacing are crucial. +

        + +

        Event Handling and State Management

        +

        + Box can also be used as an interactive element, handling events and + managing state. This makes it ideal for use cases that require + dynamic behavior or user interaction. +

        + +

        Responsive Design

        +

        + The Box component seamlessly integrates with Sistent’s responsive + design principles, providing a cohesive experience across various + screen sizes by leveraging breakpoints in the sx prop. +

        +
        +
        +
        + ); +}; + +export default BoxGuidance; diff --git a/src/sections/Projects/Sistent/components/box/index.js b/src/sections/Projects/Sistent/components/box/index.js new file mode 100644 index 000000000000..bb02738c6122 --- /dev/null +++ b/src/sections/Projects/Sistent/components/box/index.js @@ -0,0 +1,133 @@ +import React from "react"; +import { navigate } from "gatsby"; +import { useLocation } from "@reach/router"; + +import { SistentThemeProvider, Box } from "@layer5/sistent"; +import TabButton from "../../../../../reusecore/Button"; +import { SistentLayout } from "../../sistent-layout"; +import { Row } from "../../../../../reusecore/Layout"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +const SistentBox = () => { + const location = useLocation(); + const { isDark } = useStyledDarkMode(); + + return ( + +
        + +

        Box

        +
        +

        + The Box component is a versatile, theme-aware container + in Sistent, ideal for styling and layout customization. It supports + the sx prop for easy, responsive styling and can render as any HTML + element. +

        +
        + navigate("/projects/sistent/components/box")} + title="Overview" + /> + + navigate("/projects/sistent/components/box/guidance") + } + title="Guidance" + /> + navigate("/projects/sistent/components/box/code")} + title="Code" + /> +
        +
        +

        + The Box component is a flexible and foundational + container in Sistent, designed to structure and style content. It + provides quick access to the theme and CSS utilities, allowing for + easy customization and responsive design. Using the sx prop, + developers can apply CSS styles directly with theme-aware + properties, making Box ideal for layouts, spacing, and other UI + adjustments. It can render as any HTML element using the component + prop, offering high versatility in both structure and styling. +

        + +

        Usage

        +
        +

        + The Box component differs from other containers available in Sistent + in that its usage is intended to be multipurpose and open-ended, + just like a `div`. Components like Container, Stack and + Paper, by contrast, feature usage-specific props that make them + ideal for certain use cases: Container for main layout orientation, + Stack for one-dimensional layouts, and Paper for elevated surfaces. +

        +

        Box component

        +

        + The Box component renders as a `div` by default, but + you can swap in any other valid HTML tag or React component using + the component prop. The demo below replaces the `div` + with a `section` element: +

        + + + + This Box renders as an HTML section element. + + + + + +

        Customization

        +
        +

        + The Box component can be styled flexibly with Sistent + sxprop and custom themes. The sx prop allows quick + application of CSS styles that are theme-aware, enabling responsive + and consistent design. +

        + +

        Using the sx Prop

        +

        + The sx prop supports a wide range of style properties, including + colors, spacing, and responsive adjustments. It directly accesses + theme values, allowing you to apply theme-based styles to a Box with + minimal code. +

        + + + + + +
        +
        +
        + ); +}; + +export default SistentBox; diff --git a/src/sections/Projects/Sistent/components/button/code.js b/src/sections/Projects/Sistent/components/button/code.js index 89363d64a8c9..a8d4903d1978 100644 --- a/src/sections/Projects/Sistent/components/button/code.js +++ b/src/sections/Projects/Sistent/components/button/code.js @@ -35,12 +35,12 @@ const codes = [ `, ]; -export const ButtonCode = () => { +const ButtonCode = () => { const location = useLocation(); const { isDark } = useStyledDarkMode(); return ( - +

        Button

        @@ -177,3 +177,5 @@ export const ButtonCode = () => { ); }; + +export default ButtonCode; diff --git a/src/sections/Projects/Sistent/components/button/guidance.js b/src/sections/Projects/Sistent/components/button/guidance.js index 7c82855fb74d..8fafed9689b5 100644 --- a/src/sections/Projects/Sistent/components/button/guidance.js +++ b/src/sections/Projects/Sistent/components/button/guidance.js @@ -8,7 +8,7 @@ import { SistentLayout } from "../../sistent-layout"; import TabButton from "../../../../../reusecore/Button"; import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; -export const ButtonGuidance = () => { +const ButtonGuidance = () => { const location = useLocation(); const { isDark } = useStyledDarkMode(); @@ -195,3 +195,5 @@ export const ButtonGuidance = () => { ); }; + +export default ButtonGuidance; diff --git a/src/sections/Projects/Sistent/components/container/code.js b/src/sections/Projects/Sistent/components/container/code.js index dc55461dd067..5dc8eb3b9634 100644 --- a/src/sections/Projects/Sistent/components/container/code.js +++ b/src/sections/Projects/Sistent/components/container/code.js @@ -44,7 +44,7 @@ const codes = [ `, ]; -export const ContainerCode = () => { +const ContainerCode = () => { const location = useLocation(); const { isDark } = useStyledDarkMode(); @@ -217,3 +217,5 @@ export const ContainerCode = () => { ); }; + +export default ContainerCode; diff --git a/src/sections/Projects/Sistent/components/container/guidance.js b/src/sections/Projects/Sistent/components/container/guidance.js index 6578572a29f9..b1a8a0b963e6 100644 --- a/src/sections/Projects/Sistent/components/container/guidance.js +++ b/src/sections/Projects/Sistent/components/container/guidance.js @@ -8,7 +8,7 @@ import { SistentLayout } from "../../sistent-layout"; import TabButton from "../../../../../reusecore/Button"; import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; -export const ContainerGuidancePage = () => { +const ContainerGuidancePage = () => { const location = useLocation(); const { isDark } = useStyledDarkMode(); @@ -162,3 +162,5 @@ export const ContainerGuidancePage = () => { ); }; + +export default ContainerGuidancePage; diff --git a/src/sections/Projects/Sistent/components/content.js b/src/sections/Projects/Sistent/components/content.js new file mode 100644 index 000000000000..388e34486f06 --- /dev/null +++ b/src/sections/Projects/Sistent/components/content.js @@ -0,0 +1,100 @@ +const componentsData = [ + { + id: 1, + name: "Button", + description: + "A button is an interactive element that triggers a specific action and also lets users know what will happen next.", + url: "/projects/sistent/components/button", + src: "/button", + }, + { + id: 2, + name: "Text Input", + description: + "A text input is made up of multiple elements that combine to form a component that helps users to read, write, and edit text in an interface.", + url: "/projects/sistent/components/text-input", + src: "/text-input", + }, + { + id: 3, + name: "Modal", + description: + "A text input is made up of multiple elements that combine to form a component that helps users to read, write, and edit text in an interface.", + url: "/projects/sistent/components/modal", + src: "/modal", + }, + { + id: 4, + name: "Paper", + description: + "The Paper component offers an elevated surface with shadow effects, following Material Design’s elevation system.", + url: "/projects/sistent/components/paper", + src: "/paper", + }, + { + id: 5, + name: "Popper", + description: + "A popper is a tooltip that appears when a user interacts with an element.", + url: "/projects/sistent/components/popper", + src: "/popper", + }, + { + id: 6, + name: "Text Field", + description: + "The TextField component is a versatile input field used to capture user input in forms and user interfaces.", + url: "/projects/sistent/components/text-field", + src: "/text-field", + }, + { + id: 7, + name: "Link", + description: + "Links are essential and integral components of an interface. They are primarily used for navigation, guiding users to the next step in a journey or redirecting them to relevant sections or pages.", + url: "/projects/sistent/components/link", + src: "/link", + }, + { + id: 8, + name: "Container", + description: + "Containers align and center content, providing responsive layout options for different screen sizes.", + url: "/projects/sistent/components/container", + src: "/container", + }, + { + id: 9, + name: "ButtonGroup", + description: + "ButtonGroup is a component that groups multiple buttons together.", + url: "/projects/sistent/components/button-group", + src: "/button-group", + }, + { + id: 10, + name: "Box", + description: + "Box is used as a flexible container for layout and styling, allowing quick customization and responsive design adjustments.", + url: "/projects/sistent/components/box", + src: "/box", + }, + { + id: 11, + name: "Tooltip", + description: + "The Tooltip component is a small pop-up box that appears when a user hovers over an element.", + url: "/projects/sistent/components/tooltip", + src: "/tooltip", + }, + { + id: 12, + name: "Backdrop", + description: + "Backdrop component overlays a dimmed screen to focus attention on foreground content.", + url: "/projects/sistent/components/backdrop", + src: "/backdrop", + }, +]; + +module.exports = { componentsData }; \ No newline at end of file diff --git a/src/sections/Projects/Sistent/components/index.js b/src/sections/Projects/Sistent/components/index.js index 749fb2c5e34e..3988ff1670cc 100644 --- a/src/sections/Projects/Sistent/components/index.js +++ b/src/sections/Projects/Sistent/components/index.js @@ -7,72 +7,8 @@ import SearchBox from "../../../../reusecore/Search"; import useDataList from "../../../../utils/usedataList"; import { FaArrowRight } from "@react-icons/all-files/fa/FaArrowRight"; import { Link } from "gatsby"; +import { componentsData } from "./content"; -const componentsData = [ - { - id: 1, - name: "Button", - description: - "A button is an interactive element that triggers a specific action and also lets users know what will happen next.", - url: "/projects/sistent/components/button", - }, - { - id: 2, - name: "Text Input", - description: - "A text input is made up of multiple elements that combine to form a component that helps users to read, write, and edit text in an interface.", - url: "/projects/sistent/components/text-input", - }, - { - id: 3, - name: "Modal", - description: - "A text input is made up of multiple elements that combine to form a component that helps users to read, write, and edit text in an interface.", - url: "/projects/sistent/components/modal", - }, - { - id: 4, - name: "Paper", - description: - "The Paper component offers an elevated surface with shadow effects, following Material Design’s elevation system.", - url: "/projects/sistent/components/paper", - }, - { - id: 5, - name: "Popper", - description: - "A popper is a tooltip that appears when a user interacts with an element.", - url: "/projects/sistent/components/popper", - }, - { - id: 6, - name: "Text Field", - description: - "The TextField component is a versatile input field used to capture user input in forms and user interfaces.", - url: "/projects/sistent/components/text-field", - }, - { - id: 7, - name: "Link", - description: - "Links are essential and integral components of an interface. They are primarily used for navigation, guiding users to the next step in a journey or redirecting them to relevant sections or pages.", - url: "/projects/sistent/components/link", - }, - { - id: 8, - name: "Container", - description: - "Containers align and center content, providing responsive layout options for different screen sizes.", - url: "/projects/sistent/components/container", - }, - { - id: 9, - name: "ButtonGroup", - description: - "ButtonGroup is a component that groups multiple buttons together.", - url: "/projects/sistent/components/button-group", - }, -]; const SistentComponents = () => { const [searchQuery, setSearchQuery] = useState(""); diff --git a/src/sections/Projects/Sistent/components/link/code.js b/src/sections/Projects/Sistent/components/link/code.js index 2096cd6fd8f8..6e8b91eefff3 100644 --- a/src/sections/Projects/Sistent/components/link/code.js +++ b/src/sections/Projects/Sistent/components/link/code.js @@ -68,7 +68,7 @@ const codes = [ `, - ` + ` Visit Secure Link - ` + `, ]; -export const LinkCode = () => { +const LinkCode = () => { const location = useLocation(); const { isDark } = useStyledDarkMode(); return ( - +

        Link

        -

        -

        +

        { /> {

        - Links are fundamental components in web navigation, allowing users to move between different pages or resources. Their design and implementation are crucial for creating a seamless browsing experience. + Links are fundamental components in web navigation, allowing users + to move between different pages or resources. Their design and + implementation are crucial for creating a seamless browsing + experience.

        Simple Link

        -

        The link can be presented in a simple format, primarily as underlined text that serves as a gateway to navigate users to other pages or resources, without any prominent styling or buttons attached to it.

        +

        + The link can be presented in a simple format, primarily as + underlined text that serves as a gateway to navigate users to other + pages or resources, without any prominent styling or buttons + attached to it. +

        @@ -157,17 +163,23 @@ export const LinkCode = () => {

        Customized Links

        - Customized Links enhance user experience by adapting their design and behavior to match the app’s theme. They can include personalized styles, hover effects, or icons, ensuring both visual consistency and improved usability across the website. + Customized Links enhance user experience by adapting their design + and behavior to match the app’s theme. They can include personalized + styles, hover effects, or icons, ensuring both visual consistency + and improved usability across the website.

        Colored Link

        - Colored Links can help draw attention to key areas of a page. They are styled with custom colors to stand out and indicate their importance, enhancing navigation and usability. + Colored Links can help draw attention to key areas of a page. They + are styled with custom colors to stand out and indicate their + importance, enhancing navigation and usability.

        - {

        Underlined Link

        - Underlined Links, often referred to as ghost buttons, are styled primarily with text without any fills or borders. They utilize specific text styling and color to signify different states, making them easily identifiable and enhancing user navigation. + Underlined Links, often referred to as ghost buttons, are styled + primarily with text without any fills or borders. They utilize + specific text styling and color to signify different states, making + them easily identifiable and enhancing user navigation.

        @@ -197,7 +212,7 @@ export const LinkCode = () => { marginLeft: "10px", }} > - Underlined Link + Underlined Link
        @@ -206,7 +221,10 @@ export const LinkCode = () => {

        Customized Link

        - Customized Links allow for distinct text styles and presentations that can enhance the user experience. By leveraging different styling properties, these links can be tailored to fit the design aesthetics of your application while maintaining functionality. + Customized Links allow for distinct text styles and presentations + that can enhance the user experience. By leveraging different + styling properties, these links can be tailored to fit the design + aesthetics of your application while maintaining functionality.

        @@ -233,7 +251,9 @@ export const LinkCode = () => {

        Security Considerations

        - When utilizing links we should use them with the target="_blank" attribute, it's essential to implement rel="noopener" or rel="noreferrer" to enhance security and user privacy + When utilizing links we should use them with the target="_blank" + attribute, it's essential to implement rel="noopener" or + rel="noreferrer" to enhance security and user privacy

        @@ -259,3 +279,4 @@ export const LinkCode = () => { ); }; +export default LinkCode; diff --git a/src/sections/Projects/Sistent/components/link/guidance.js b/src/sections/Projects/Sistent/components/link/guidance.js index e07030a91889..48ae032caa14 100644 --- a/src/sections/Projects/Sistent/components/link/guidance.js +++ b/src/sections/Projects/Sistent/components/link/guidance.js @@ -6,10 +6,10 @@ import { SistentThemeProvider, Link, ExternalLinkIcon } from "@layer5/sistent"; import { SistentLayout } from "../../sistent-layout"; import TabButton from "../../../../../reusecore/Button"; -import StyledButton from "../../../../../reusecore/Button"; +import StyledButton from "../../../../../reusecore/Button"; import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; -export const LinkGuidancePage = () => { +const LinkGuidancePage = () => { const location = useLocation(); const { isDark } = useStyledDarkMode(); @@ -20,7 +20,8 @@ export const LinkGuidancePage = () => {

        Link

        - A link component is a navigational element that directs users to another page or section within an application. + A link component is a navigational element that directs users to + another page or section within an application.

        { /> {

        - Links are fundamental components in web navigation, allowing users to move between different pages or resources. Their design and implementation are crucial for creating a seamless browsing experience. + Links are fundamental components in web navigation, allowing users + to move between different pages or resources. Their design and + implementation are crucial for creating a seamless browsing + experience.

        Function

        -

        - Links too have a lot many functions as: -

        +

        Links too have a lot many functions as:

        Navigation Links

        - These links help users navigate through a website, directing them to important sections or related content. They should be easily accessible and clearly labeled to enhance usability. + These links help users navigate through a website, directing them to + important sections or related content. They should be easily + accessible and clearly labeled to enhance usability.

        @@ -85,11 +88,18 @@ export const LinkGuidancePage = () => {

        Call to Action (CTA) Links

        - CTA links encourage users to take specific actions, such as signing up for a newsletter or downloading a resource. They should stand out visually to attract user attention and drive engagement. + CTA links encourage users to take specific actions, such as signing + up for a newsletter or downloading a resource. They should stand out + visually to attract user attention and drive engagement.

        - + {

        External Links

        - These links direct users to external websites. It’s important to provide clear indicators (like icons or different styles) that these links lead to external content, which helps users manage their navigation expectations. + These links direct users to external websites. It’s important to + provide clear indicators (like icons or different styles) that these + links lead to external content, which helps users manage their + navigation expectations.

        @@ -121,7 +134,9 @@ export const LinkGuidancePage = () => { display: "inline-flex", alignItems: "center", }} - onMouseEnter={(e) => (e.target.style.textDecoration = "underline")} + onMouseEnter={(e) => + (e.target.style.textDecoration = "underline") + } onMouseLeave={(e) => (e.target.style.textDecoration = "none")} > Visit External Resource @@ -133,22 +148,37 @@ export const LinkGuidancePage = () => {

        Labeling

        - Link labels are vital for communicating the action associated with the link. Labels should be concise, informative, and use action-oriented language (e.g., "Download Report," "Learn More") to guide users effectively. + Link labels are vital for communicating the action associated with + the link. Labels should be concise, informative, and use + action-oriented language (e.g., "Download Report," "Learn More") to + guide users effectively.

        Case Style

        - Consistency in the case style of link text improves readability and enhances the overall aesthetic of the website. Using a uniform style, such as sentence case or title case, contributes to a more professional appearance. + Consistency in the case style of link text improves readability and + enhances the overall aesthetic of the website. Using a uniform + style, such as sentence case or title case, contributes to a more + professional appearance.

        Font Weight

        - The weight of the font in link text can signify importance and attract user attention. A bolder font can indicate a primary action, while a lighter font may denote secondary options. Legibility is essential for ensuring that links are easy to read. + The weight of the font in link text can signify importance and + attract user attention. A bolder font can indicate a primary action, + while a lighter font may denote secondary options. Legibility is + essential for ensuring that links are easy to read.

        Text Decoration

        - Links typically use underlines to distinguish them from regular text. However, it’s important to maintain the underline for accessibility and usability, as users often associate underlined text with clickable links. Consider hover effects to provide visual feedback. + Links typically use underlines to distinguish them from regular + text. However, it’s important to maintain the underline for + accessibility and usability, as users often associate underlined + text with clickable links. Consider hover effects to provide visual + feedback.

        ); }; + +export default LinkGuidancePage; diff --git a/src/sections/Projects/Sistent/components/modal/code.js b/src/sections/Projects/Sistent/components/modal/code.js index b71e2b8962bb..174e1c8b7e5d 100644 --- a/src/sections/Projects/Sistent/components/modal/code.js +++ b/src/sections/Projects/Sistent/components/modal/code.js @@ -80,7 +80,7 @@ const codes = [ `, ]; -export const ModalCode = () => { +const ModalCode = () => { const [open, setOpen] = useState(false); const [actionOpen, setActionOpen] = useState(false); const location = useLocation(); diff --git a/src/sections/Projects/Sistent/components/modal/guidance.js b/src/sections/Projects/Sistent/components/modal/guidance.js index 99dba2bd4dd7..fdb7e0bf197c 100644 --- a/src/sections/Projects/Sistent/components/modal/guidance.js +++ b/src/sections/Projects/Sistent/components/modal/guidance.js @@ -4,7 +4,7 @@ import TabButton from "../../../../../reusecore/Button"; import { navigate } from "gatsby"; import { useLocation } from "@reach/router"; -export const ModalGuidance = () => { +const ModalGuidance = () => { const location = useLocation(); return ( diff --git a/src/sections/Projects/Sistent/components/modal/index.js b/src/sections/Projects/Sistent/components/modal/index.js index f89f2e129bc7..dd7b698b98b2 100644 --- a/src/sections/Projects/Sistent/components/modal/index.js +++ b/src/sections/Projects/Sistent/components/modal/index.js @@ -8,7 +8,7 @@ import ConfirmationDarkBg from "../../../../../assets/images/app/projects/sisten import { Col, Row } from "../../../../../reusecore/Layout"; import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; -export const SistentModal = () => { +const SistentModal = () => { const location = useLocation(); const { isDark } = useStyledDarkMode(); return ( diff --git a/src/sections/Projects/Sistent/components/paper/index.js b/src/sections/Projects/Sistent/components/paper/index.js index 34ed637986af..519525e0d48c 100644 --- a/src/sections/Projects/Sistent/components/paper/index.js +++ b/src/sections/Projects/Sistent/components/paper/index.js @@ -6,7 +6,7 @@ import { useLocation } from "@reach/router"; import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; import { Paper, SistentThemeProvider } from "@layer5/sistent"; -export const SistentPaper = () => { +const SistentPaper = () => { const location = useLocation(); const { isDark } = useStyledDarkMode(); return ( diff --git a/src/sections/Projects/Sistent/components/popper/code.js b/src/sections/Projects/Sistent/components/popper/code.js index 7983121f6aeb..d34899bdf4e1 100644 --- a/src/sections/Projects/Sistent/components/popper/code.js +++ b/src/sections/Projects/Sistent/components/popper/code.js @@ -138,7 +138,7 @@ const codes = [ `, ]; -export const PooperCode = () => { +const PooperCode = () => { const { isDark } = useStyledDarkMode(); const location = useLocation(); @@ -345,3 +345,5 @@ export const PooperCode = () => { ); }; + +export default PooperCode; diff --git a/src/sections/Projects/Sistent/components/popper/guidance.js b/src/sections/Projects/Sistent/components/popper/guidance.js index 8a9e4a4c9dab..f08720d6a236 100644 --- a/src/sections/Projects/Sistent/components/popper/guidance.js +++ b/src/sections/Projects/Sistent/components/popper/guidance.js @@ -7,7 +7,7 @@ import { Row } from "../../../../../reusecore/Layout"; import TabButton from "../../../../../reusecore/Button"; import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; -export const PopperGuidance = () => { +const PopperGuidance = () => { const { isDark } = useStyledDarkMode(); const location = useLocation(); const [open, setOpen] = useState(false); @@ -43,7 +43,7 @@ export const PopperGuidance = () => { { ); }; + +export default PopperGuidance; diff --git a/src/sections/Projects/Sistent/components/popper/index.js b/src/sections/Projects/Sistent/components/popper/index.js index 9931d3a4381b..6f2400d02c26 100644 --- a/src/sections/Projects/Sistent/components/popper/index.js +++ b/src/sections/Projects/Sistent/components/popper/index.js @@ -7,7 +7,7 @@ import { SistentLayout } from "../../sistent-layout"; import { Row } from "../../../../../reusecore/Layout"; import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; -export const SistentPopper = () => { +const SistentPopper = () => { const location = useLocation(); const { isDark } = useStyledDarkMode(); @@ -46,7 +46,7 @@ export const SistentPopper = () => { { ); }; + +export default SistentPopper; diff --git a/src/sections/Projects/Sistent/components/text-field/code.js b/src/sections/Projects/Sistent/components/text-field/code.js index f1dd658f7469..ead9a2f449fc 100644 --- a/src/sections/Projects/Sistent/components/text-field/code.js +++ b/src/sections/Projects/Sistent/components/text-field/code.js @@ -316,18 +316,21 @@ const codes = [ `, ]; -export const TextFieldCode = () => { +const TextFieldCode = () => { const location = useLocation(); const { isDark } = useStyledDarkMode(); return ( - +

        Text Field

        - The TextField component is a versatile input field used to capture user input in forms and user interfaces. It can handle a variety of input types, such as text, numbers, emails, and passwords, and offers built-in styling and validation features. + The TextField component is a versatile input field used to capture + user input in forms and user interfaces. It can handle a variety of + input types, such as text, numbers, emails, and passwords, and offers + built-in styling and validation features.

        { { /> {

        - A TextField allow user to enter and edit any text. It mostly present in Forms or dialogue box in UI. - TextField are crucial and integral elements in an interface. It allows to get data from enetered user. + A TextField allow user to enter and edit any text. It mostly present + in Forms or dialogue box in UI. TextField are crucial and integral + elements in an interface. It allows to get data from enetered user.

        Form Props

        - Standard form attributes are supported, for example required, disabled, type, etc. - HelperText attributes is used to give context about a field's input, - such as how the input will be used. + Standard form attributes are supported, for example required, + disabled, type, etc. HelperText attributes is used to give context + about a field's input, such as how the input will be used.

        @@ -407,7 +412,11 @@ export const TextFieldCode = () => { label="Number" type="number" /> - + {

        Validation

        - The error property toggles the error state. The helperText prop can then be used to provide feedback to the user about the error. As shown below it can be used with variant such as outlined (default), filled, and standard. + The error property toggles the error state. The helperText prop can + then be used to provide feedback to the user about the error. As + shown below it can be used with variant such as outlined (default), + filled, and standard.

        @@ -577,7 +589,10 @@ export const TextFieldCode = () => {

        Multiline

        - The multiline prop transforms the text field into a TextareaAutosize element. Unless the rows prop is set, the height of the text field dynamically matches its content (using TextareaAutosize). You can use the minRows and maxRows props to bound it. + The multiline prop transforms the text field into a TextareaAutosize + element. Unless the rows prop is set, the height of the text field + dynamically matches its content (using TextareaAutosize). You can + use the minRows and maxRows props to bound it.

        @@ -666,7 +681,8 @@ export const TextFieldCode = () => {

        Sizes

        - TextField can have small or normal field sizes. According the requirement it can be adjusted. + TextField can have small or normal field sizes. According the + requirement it can be adjusted.

        @@ -684,7 +700,11 @@ export const TextFieldCode = () => { defaultValue="Small" size="small" /> - +
        {

        Full Width

        - FullWidth attribute can be used to make the input take up the full width of its container. + FullWidth attribute can be used to make the input take up the full + width of its container.

        @@ -744,4 +765,4 @@ export const TextFieldCode = () => { ); }; - +export default TextFieldCode; diff --git a/src/sections/Projects/Sistent/components/text-field/guidance.js b/src/sections/Projects/Sistent/components/text-field/guidance.js index 7f07899f1fc8..bfb5cf9ef39f 100644 --- a/src/sections/Projects/Sistent/components/text-field/guidance.js +++ b/src/sections/Projects/Sistent/components/text-field/guidance.js @@ -7,7 +7,7 @@ import { SistentLayout } from "../../sistent-layout"; import TabButton from "../../../../../reusecore/Button"; import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; -export const TextFieldGuidance = () => { +const TextFieldGuidance = () => { const location = useLocation(); const { isDark } = useStyledDarkMode(); @@ -18,7 +18,10 @@ export const TextFieldGuidance = () => {

        Text Field

        - The TextField component is a versatile input field used to capture user input in forms and user interfaces. It can handle a variety of input types, such as text, numbers, emails, and passwords, and offers built-in styling and validation features. + The TextField component is a versatile input field used to capture + user input in forms and user interfaces. It can handle a variety of + input types, such as text, numbers, emails, and passwords, and offers + built-in styling and validation features.

        { { /> navigate("/projects/sistent/components/text-field/code")} + onClick={() => + navigate("/projects/sistent/components/text-field/code") + } title="Code" />

        For proper application, these TextField can be used for different - purposes. It can be effectively used in any project to increase User Interaction. - Lets see how can we use TextField effectively in our project. + purposes. It can be effectively used in any project to increase User + Interaction. Lets see how can we use TextField effectively in our + project.

        Basic TextField

        - The TextField wrapper component is a complete form control including a label, variant, helper text etc. TextField comes with three variants: outlined (default), filled, and standard. + The TextField wrapper component is a complete form control including + a label, variant, helper text etc. TextField comes with three + variants: outlined (default), filled, and standard.

        Outlined (default)

        @@ -79,15 +88,19 @@ export const TextFieldGuidance = () => { noValidate autoComplete="off" > - +

        Filled

        - Filled TextField are TextField that consist a background color fill and - a text in it. Depending on the theme or intended action, the color - fill can range from a primary brand color to any other applicable - color in a brand’s color palette. + Filled TextField are TextField that consist a background color fill + and a text in it. Depending on the theme or intended action, the + color fill can range from a primary brand color to any other + applicable color in a brand’s color palette.

        {

        Standard

        - Standard TextField are TextField that do not have background color fill and - a text in it. Colors can also be used to style these buttons in order to fit - into the theme align with brand guidelines. + Standard TextField are TextField that do not have background color + fill and a text in it. Colors can also be used to style these + buttons in order to fit into the theme align with brand guidelines.

        { noValidate autoComplete="off" > - +

        When to use different properties?

        - You might come across in a situation you needed some helper text, field with number, disabled field etc. Let's see different properties availble for TextField. + You might come across in a situation you needed some helper text, + field with number, disabled field etc. Let's see different + properties availble for TextField.

        Type prop

        -

        - Type prop can have a value such as password, number or text. -

        +

        Type prop can have a value such as password, number or text.

        { type="password" autoComplete="current-password" /> - - + +

        Helper Text

        - Helper text also very effective for your form or for better understanding. + Helper text also very effective for your form or for better + understanding.

        {

        Error

        - Error handling is very important for UI. User might come in sitatution where they enter invalid value or forget to enter any data in TextField. Here come error prop helps to indicate partucular field are required or user have entered invalid value. + Error handling is very important for UI. User might come in + sitatution where they enter invalid value or forget to enter any + data in TextField. Here come error prop helps to indicate partucular + field are required or user have entered invalid value.

        { ); }; + +export default TextFieldGuidance; diff --git a/src/sections/Projects/Sistent/components/text-input/code.js b/src/sections/Projects/Sistent/components/text-input/code.js index 3d2c35a33d90..7749ec23e2c0 100644 --- a/src/sections/Projects/Sistent/components/text-input/code.js +++ b/src/sections/Projects/Sistent/components/text-input/code.js @@ -5,7 +5,7 @@ import { SistentLayout } from "../../sistent-layout"; import TabButton from "../../../../../reusecore/Button"; -export const TextInputCode = () => { +const TextInputCode = () => { const location = useLocation(); return ( @@ -61,3 +61,5 @@ export const TextInputCode = () => { ); }; + +export default TextInputCode; diff --git a/src/sections/Projects/Sistent/components/text-input/guidance.js b/src/sections/Projects/Sistent/components/text-input/guidance.js index 09c455fe260d..f501f68590d0 100644 --- a/src/sections/Projects/Sistent/components/text-input/guidance.js +++ b/src/sections/Projects/Sistent/components/text-input/guidance.js @@ -8,7 +8,7 @@ import { SistentLayout } from "../../sistent-layout"; import TabButton from "../../../../../reusecore/Button"; import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; -export const TextInputGuidance = () => { +const TextInputGuidance = () => { const location = useLocation(); const { isDark } = useStyledDarkMode(); @@ -126,3 +126,5 @@ export const TextInputGuidance = () => { ); }; + +export default TextInputGuidance; diff --git a/src/sections/Projects/Sistent/components/tooltip/code.js b/src/sections/Projects/Sistent/components/tooltip/code.js new file mode 100644 index 000000000000..a537bf3e9590 --- /dev/null +++ b/src/sections/Projects/Sistent/components/tooltip/code.js @@ -0,0 +1,463 @@ +import React from "react"; +import { navigate } from "gatsby"; +import { useLocation } from "@reach/router"; +import { + SistentThemeProvider, + Button, + Box, + Grid, + CustomTooltip, +} from "@layer5/sistent"; +import { SistentLayout } from "../../sistent-layout"; +import { CodeBlock } from "../button/code-block"; +import TabButton from "../../../../../reusecore/Button"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +const codes = [ + ` + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + +
        + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + +
        `, + ` + + + +`, + ` + + + + + + + + +`, + ` + + + +`, + ` + + + +`, +]; + +const TooltipCode = () => { + const { isDark } = useStyledDarkMode(); + const location = useLocation(); + + return ( + +
        + +

        Tooltip

        +
        +

        + The Tooltip component displays informative text when users hover over, + focus on, or tap an element. Tooltips are designed to enhance + accessibility and user understanding of interface elements. +

        +
        + + navigate("/projects/sistent/components/tooltip") + } + title="Overview" + /> + + navigate("/projects/sistent/components/tooltip/guidance") + } + title="Guidance" + /> + + navigate("/projects/sistent/components/tooltip/code") + } + title="Code" + /> +
        +
        +

        + The Tooltip component displays informative text when users hover + over, focus on, or tap an element. Tooltips are designed to enhance + accessibility and user understanding of interface elements. +

        + +

        Basic Tooltip

        +
        +
        +
        + + + +
        + +
        + +

        Positioned Example

        +
        +

        + You can specify the position of the Popper using the{" "} + placement prop. Here's an example of a Tooltip + positioned above its anchor: +

        +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + +
        + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + +
        +
        +
        + +
        + +

        Distance from anchor

        +
        +

        + To adjust the distance between the tooltip and its anchor, you can + use the slotProps prop to modify the offset of the popper. +

        +
        +
        + + + + + + + +
        + +
        + +

        Variable width

        +
        +

        + The variant prop in Tooltip allows you to control the tooltips size + with predefined styles (standard or small). This makes it easier to + adjust the tooltip to fit various UI requirements quickly and + consistently. +

        +
        +
        + + *": { + m: 1, + }, + }} + > + + + + + + + + + + + + +
        + +
        + +

        Follow Cursor

        +
        +

        + Tooltips can be configured to follow the cursor, making it easier to + read the content. +

        +
        +
        + + + + + + + +
        + +
        + +

        Showing and Hiding

        +
        +

        + A delay in showing or hiding the tooltip can be added through the{" "} + enterDelay and leaveDelay props. +

        +
        +
        + + + + + + + +
        + +
        +
        +
        +
        + ); +}; + +export default TooltipCode; diff --git a/src/sections/Projects/Sistent/components/tooltip/guidance.js b/src/sections/Projects/Sistent/components/tooltip/guidance.js new file mode 100644 index 000000000000..cd3071eda652 --- /dev/null +++ b/src/sections/Projects/Sistent/components/tooltip/guidance.js @@ -0,0 +1,270 @@ +import React from "react"; +import { navigate } from "gatsby"; +import { useLocation } from "@reach/router"; +import { SistentLayout } from "../../sistent-layout"; +import { + SistentThemeProvider, + Button, + Typography, + CustomTooltip, + Grid, +} from "@layer5/sistent"; +import { Row } from "../../../../../reusecore/Layout"; +import TabButton from "../../../../../reusecore/Button"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +const TooltipGuidance = () => { + const { isDark } = useStyledDarkMode(); + const location = useLocation(); + + return ( + +
        + +

        Tooltip

        +
        +

        + The Tooltip component displays informative text when users hover over, + focus on, or tap an element. Tooltips are designed to enhance + accessibility and user understanding of interface elements. +

        +
        + navigate("/projects/sistent/components/tooltip")} + title="Overview" + /> + + navigate("/projects/sistent/components/tooltip/guidance") + } + title="Guidance" + /> + + navigate("/projects/sistent/components/tooltip/code") + } + title="Code" + /> +
        +
        +

        + The Tooltip component displays informative text when users hover + over, focus on, or tap an element. Tooltips are designed to enhance + accessibility and user understanding of interface elements. +

        + + +

        Positioning

        +
        +

        + The positioning of the Tooltip is critical for usability. Use the + `placement` prop to control where the Tooltip appears relative to + its anchor element. Options include: +

        +
          +
        • top
        • +
        • bottom
        • +
        • left
        • +
        • right
        • +
        • top-start
        • +
        • top-end
        • +
        • bottom-start
        • +
        • bottom-end
        • +
        • left-start
        • +
        • left-end
        • +
        • right-start
        • +
        • right-end
        • +
        +

        + Choosing the right position helps to prevent overlap with other + interface elements and improves readability. +

        + + +

        Styling

        +
        +

        + The Tooltip component inherits styles from the Sistent theme. You + can customize the appearance by applying styles to the content + inside the Tooltip. For instance: +

        + + + Custom Tooltip} + > + + + + + + + + + + + + + + + + + + + + + + + + +

        Accessibility

        +
        +

        + It’s important to ensure that the Tooltip component is accessible to + all users. Here are some key considerations: +

        +
          +
        • + By default, tooltips are designed to label their child element + rather than describe it. This differs from the title{" "} + attribute, which can either label or describe the child element + based on whether it already has an accessible label. +
        • +
        • + Using describeChild : When you want the tooltip to + act as an accessible description (adding additional context), you + can enable the describeChild prop. Use describeChild only if the + tooltip provides supplementary information and the child element + already has an accessible label. +
        • +
        • + Avoiding Accessibility Violations: Do not use describeChild if the + tooltip is the only visible label for the child element, as this + would prevent the child from having an accessible name. +
        • +
        + + +

        Performance Tips

        +
        +

        + When using the Tooltip component, consider the following to optimize + performance: +

        +
          +
        • + Use the `placement` prop to control the position of the Tooltip + and prevent overlap with other interface elements. +
        • +
        • + Ensure that the Tooltip is keyboard navigable, allowing users to + open/close it using keyboard shortcuts. +
        • +
        +
        +
        +
        + ); +}; + +export default TooltipGuidance; diff --git a/src/sections/Projects/Sistent/components/tooltip/index.js b/src/sections/Projects/Sistent/components/tooltip/index.js new file mode 100644 index 000000000000..97d9606f46a4 --- /dev/null +++ b/src/sections/Projects/Sistent/components/tooltip/index.js @@ -0,0 +1,238 @@ +import React from "react"; +import { navigate } from "gatsby"; +import { useLocation } from "@reach/router"; +import { + SistentThemeProvider, + Button, + CustomTooltip, + Box, +} from "@layer5/sistent"; +import TabButton from "../../../../../reusecore/Button"; +import { SistentLayout } from "../../sistent-layout"; +import { Row } from "../../../../../reusecore/Layout"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +const SistentTooltip = () => { + const location = useLocation(); + const { isDark } = useStyledDarkMode(); + + return ( + +
        + +

        Tooltip

        +
        +

        + The Tooltip component displays informative text when users hover over, + focus on, or tap an element. Tooltips are designed to enhance + accessibility and user understanding of interface elements. +

        +
        + navigate("/projects/sistent/components/tooltip")} + title="Overview" + /> + + navigate("/projects/sistent/components/tooltip/guidance") + } + title="Guidance" + /> + + navigate("/projects/sistent/components/tooltip/code") + } + title="Code" + /> +
        +
        +

        + The Tooltip component displays informative text when users hover + over, focus on, or tap an element. Tooltips are designed to enhance + accessibility and user understanding of interface elements. +

        + +

        Basic Tooltip

        +
        +

        + A simple tooltip that displays helpful information when hovering + over an icon button. +

        + + + + + + + + + + +

        Disabled Elements

        +

        + By default disabled elements like button do not trigger user + interactions so a Tooltip will not activate on normal + events like hover. To accommodate disabled elements, add a simple + wrapper element, such as a span. +

        + + + + + + + + + + + +

        Distance from anchor

        +
        +

        + To adjust the distance between the tooltip and its anchor, you can + use the slotProps prop to modify the offset of the popper. +

        + + + + + + + + + + + +

        Variable width

        +
        +

        + The variant prop in Tooltip allows you to control the tooltips size + with predefined styles (standard or small). This makes it easier to + adjust the tooltip to fit various UI requirements quickly and + consistently. +

        + + + *": { + m: 1, + }, + }} + > + + + + + + + + + + + + + + + +

        Follow Cursor

        +
        +

        + Tooltips can be configured to follow the cursor, making it easier to + read the content. +

        + + + + + + + + + + + +

        Showing and Hiding

        +
        +

        + The Tooltip is normally shown immediately when the user's mouse + hovers over the element, and hides immediately when the user's mouse + leaves. A delay in showing or hiding the tooltip can be added + through the enterDelay and leaveDelay{" "} + props. +

        + + + + + + + + + +
        +
        +
        + ); +}; + +export default SistentTooltip; diff --git a/src/sections/Projects/Sistent/index.js b/src/sections/Projects/Sistent/index.js index 9c9684df1960..d2c3b5030f66 100644 --- a/src/sections/Projects/Sistent/index.js +++ b/src/sections/Projects/Sistent/index.js @@ -1,12 +1,13 @@ import React from "react"; import SistentWrapper from "./sistent.style"; import HandbookCard from "../../../components/HandbookCard"; +import SistentLogo from "../../../assets/images/sistent/horizontal/sistent-horizontal-white.svg"; const SistentHome = () => { return (
        -

        Sistent

        + Sistent Logo

        Design system for Layer5 projects

        diff --git a/src/sections/Projects/Sistent/sistent.style.js b/src/sections/Projects/Sistent/sistent.style.js index 57ef8e728ca4..4f69e1fabe2f 100644 --- a/src/sections/Projects/Sistent/sistent.style.js +++ b/src/sections/Projects/Sistent/sistent.style.js @@ -101,6 +101,8 @@ const SistentWrapper = styled.div` .page-header-section { height: 10rem; text-align: center; + display: flex; + justify-content: center; background: rgb(71, 126, 150); background: linear-gradient( 250deg, @@ -108,10 +110,15 @@ const SistentWrapper = styled.div` rgba(0, 179, 159, 1) 35%, rgba(60, 73, 79, 1) 100% ); + padding: 0 1.5rem; h1 { line-height: 10rem; color: white; } + img { + max-width: 500px; + width: 100%; + } } .community-home-subtitle { diff --git a/src/sections/app.style.js b/src/sections/app.style.js index dbff856e861e..1a1a644524fc 100644 --- a/src/sections/app.style.js +++ b/src/sections/app.style.js @@ -64,7 +64,6 @@ body { transition-timing-function: cubic-bezier(0.2, 0.8, 0.2, 1); font-family: "Qanelas Soft", "Open Sans", sans-serif; - overflow-x: hidden !important; font-weight: 400 !important; margin: 0; padding: 0; diff --git a/src/sections/gitops/PerformanceManagementPage.js b/src/sections/gitops/PerformanceManagementPage.js index a4d03c38cbca..37b2a336dcda 100644 --- a/src/sections/gitops/PerformanceManagementPage.js +++ b/src/sections/gitops/PerformanceManagementPage.js @@ -25,7 +25,7 @@ const PerformanceManagementPage = () => { Test your Kubernetes cluster and service mesh implementation for conformance with the SMI specification -
        diff --git a/src/templates/news-single.js b/src/templates/news-single.js index ed520e6efb6a..2a18df86558f 100644 --- a/src/templates/news-single.js +++ b/src/templates/news-single.js @@ -24,6 +24,13 @@ export const query = graphql` extension publicURL } + darkthumbnail { + childImageSharp { + gatsbyImageData(width: 500, layout: CONSTRAINED) + } + extension + publicURL + } } fields { slug diff --git a/src/theme/app/themeStyles.js b/src/theme/app/themeStyles.js index aff46ff5d86f..cb13e86d0fd5 100644 --- a/src/theme/app/themeStyles.js +++ b/src/theme/app/themeStyles.js @@ -34,7 +34,7 @@ const lighttheme = { darkJungleGreenHalfColor: "rgba(30, 33, 23, .5)", // Teal Blue - tertiaryColorTwo: "#477E96", + tealBlue: "#477E96", headingColor: "#111111", @@ -99,6 +99,7 @@ const lighttheme = { blackToWhite: "#FFFFFF", blue477E96ToGreen00B39F: "#00B39F", blueE0FFFCToBlue477E96: "#477E96", + blue6eb0ccToBlue477E96: "#477E96", boxShadowBlue477E96: "-0.25rem 0.25rem 1.25rem #477e96", boxShadowGreen00D3A9: "-0.25rem 0.25rem 3rem #00D3A9", boxShadowGreen00D3A9ToBlackTwoFive: "rgb(0 0 0 / 0.25) 0px 0px 10px", @@ -266,7 +267,7 @@ export const darktheme = { darkJungleGreenHalfColor: "rgba(30, 33, 23, .5)", // Teal Blue - tertiaryColorTwo: "#477E96", + tealBlue: "#477E96", headingColor: "#000000", @@ -333,6 +334,7 @@ export const darktheme = { blackToWhite: "#000000", blue477E96ToGreen00B39F: "#477E96", blueE0FFFCToBlue477E96: "#E0FFFC", + blue6eb0ccToBlue477E96: "#6eb0cc", boxShadowBlue477E96: "0rem 0.25rem 1.25rem #477e96", boxShadowGreen00D3A9: "0rem 0.25rem 3rem #00D3A9", boxShadowGreen00D3A9ToBlackTwoFive: "#00D3A9 0px 0px 10px", diff --git a/src/theme/blog/themeStyles.js b/src/theme/blog/themeStyles.js deleted file mode 100644 index b420abb322c8..000000000000 --- a/src/theme/blog/themeStyles.js +++ /dev/null @@ -1,50 +0,0 @@ -const theme = { - black: "#000000", - white: "#ffffff", - - // charcoal - primaryColor: "#3c494f", - - // silver chalice (light gray) - primaryLightColor: "#b3b3b3", - - // keppel (dark green) - primaryLightColorTwo: "#00d3a9", - keppelColor: "#00d3a9", - - // caribbean green (light green) - secondaryColor: "#00b39f", - caribbeanGreenColor: "#00d3a9", - secondaryLightColorTwo: "#F3FFFD", - - // lavender blush (light pink) - secondaryLightColor: "#FFEBEC", - - // dark jungle green - tertiaryColor: "#1e2117", - - headingColor: "#111111", - - // light slate gray (medium gray) - textColor: "#000000", - shadowColor: "rgba(0, 0, 0, 0.05)", - - // platinum (light gray) - shadowLightColor: "#E6E6E6", - - // charcoal - menuColor: "#3c494f", - - // caribbean green (light green) - menuHoverColor: "#00b39f", - linkColor: "#111111", - - // saffron (dark yellow) - highlightColor: "#EBC017", - - // flax (light yellow) - highlightLightColor: "#EAD07D", - saffronLightColor: "#EAD07D", -}; -export default theme; - diff --git a/src/theme/classic/themeStyles.js b/src/theme/classic/themeStyles.js deleted file mode 100644 index ad2eb14d059e..000000000000 --- a/src/theme/classic/themeStyles.js +++ /dev/null @@ -1,19 +0,0 @@ - - -const theme = { - black: "#000000", - white: "#ffffff", - primaryColor: "#52DE97", - primaryLightColor: "#e0f5ea", - primaryLightColorTwo: "#f8f5fd", - secondaryColor: "#00B39F", - secondaryLightColor: "#FFEBEC", - shadowColor: "rgba(0, 0, 0, 0.15)", - headingColor: "#3c494f", - textColor: "#7A848E", - shadowLightColor: "#E6E6E6", - menuHoverColor: "#00B39F" -}; - -export default theme; - diff --git a/src/theme/hosting/themeStyles.js b/src/theme/hosting/themeStyles.js deleted file mode 100644 index bbc33e7979e6..000000000000 --- a/src/theme/hosting/themeStyles.js +++ /dev/null @@ -1,20 +0,0 @@ - - -const theme = { - black: "#000000", - white: "#ffffff", - primaryColor: "#A29BFE", - primaryLightColor: "#EDEBFC", - primaryLightColorTwo: "#EDEBFC", - secondaryColor: "#00B39F", - secondaryLightColor: "#FFEBEC", - shadowColor: "rgba(0, 0, 0, 0.15)", - headingColor: "#3c494f", - textColor: "#7A848E", - shadowLightColor: "#E6E6E6", - tetriaryColor: "#00B39F", - menuHoverColor: "#00B39F" -}; - -export default theme; - diff --git a/src/theme/modern/themeStyles.js b/src/theme/modern/themeStyles.js deleted file mode 100644 index e1dc487022a5..000000000000 --- a/src/theme/modern/themeStyles.js +++ /dev/null @@ -1,19 +0,0 @@ -const theme = { - black: "#000000", - white: "#ffffff", - primaryColor: "#8A57DE", - primaryLightColor: "#EEE6FA", - primaryLightColorTwo: "#f8f5fd", - secondaryColor: "#00B39F", - secondaryLightColor: "#FFEBEC", - tetriaryColor: "#E281CE", - headingColor: "#3c494f", - textColor: "#7A848E", - shadowColor: "rgba(138, 87, 222, 0.15)", - shadowLightColor: "#E6E6E6", - menuColor: "#ffffff", - menuHoverColor: "#00B39F" -}; -export default theme; - - diff --git a/static/brand/sistent-brand-kit.zip b/static/brand/sistent-brand-kit.zip new file mode 100644 index 000000000000..7fd46639e7bc Binary files /dev/null and b/static/brand/sistent-brand-kit.zip differ diff --git a/static/mail/2023/feature-friday.html b/static/mail/2023/feature-friday.html index 13feb8255f2c..f2c11b30836b 100644 --- a/static/mail/2023/feature-friday.html +++ b/static/mail/2023/feature-friday.html @@ -493,7 +493,7 @@

      • Import your WASM Envoy filters into Meshery using the UI or CLI.
      • Publish and clone your WASM Envoy filters in the Meshery Catalog
      • -
      • Download WASM binaries from Layer5 Cloud.
      • +
      • Download WASM binaries from Layer5 Cloud.
      • Design and deploy Istio and Envoy dataplanes in Kanvas.
      • Contribute to any of the 7 open source wasm-filters.