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/workflows/feature-list.yml b/.github/workflows/feature-list.yml new file mode 100644 index 000000000000..5432507af762 --- /dev/null +++ b/.github/workflows/feature-list.yml @@ -0,0 +1,87 @@ +name: Feature List + +on: + workflow_dispatch: + inputs: + spreadsheet_uri: + description: 'Link of the spreadsheet containing subscription details.' + type: string + required: true + schedule: + - cron: '0 0 * * *' + +permissions: + contents: write + actions: read + +jobs: + trigger-feature-list: + runs-on: ubuntu-latest + env: + FEATURES_FILE: 'feature_data.json' + + steps: + - name: Checkout current repository + uses: actions/checkout@v4 + + - name: Restore cache + id: cache-sha + uses: actions/cache@v3 + with: + path: .sha-cache + key: feature-data-sha + restore-keys: | + feature-data-sha + + - name: Check for updates in source repository + id: check-updates + uses: actions/github-script@v7 + with: + script: | + const { data: sourceFile } = await github.rest.repos.getContent({ + owner: 'layer5labs', + repo: 'meshery-extensions-packages', + path: 'feature_data.json', + ref: 'master' + }); + + // Store the latest commit SHA + const latestSHA = sourceFile.sha; + + const fs = require('fs'); + + // Check if we have a previous SHA + let hasUpdates = true; + const shaCachePath = '.sha-cache/latest-sha'; + if (fs.existsSync(shaCachePath)) { + const lastSHA = fs.readFileSync(shaCachePath, 'utf8'); + hasUpdates = lastSHA !== latestSHA; + } + + if (hasUpdates) { + // Save the new SHA + fs.mkdirSync('.sha-cache', { recursive: true }); + fs.writeFileSync(shaCachePath, latestSHA); + + // Decode and save the content + const content = Buffer.from(sourceFile.content, 'base64').toString('utf8'); + + // Write the new content + fs.writeFileSync(process.env.FEATURES_FILE, content); + + core.setOutput('has-updates', 'true'); + } else { + core.setOutput('has-updates', 'false'); + } + + - name: Commit changes + if: steps.check-updates.outputs.has-updates == 'true' + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "Updated feature data from source repository" + file_pattern: ${{ env.FEATURES_FILE }} + branch: master + commit_options: "--signoff" + commit_user_name: l5io + commit_user_email: ci@layer5.io + commit_author: 'l5io ' \ No newline at end of file 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

=16.0.0" } @@ -2989,6 +2994,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", + "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", @@ -3002,6 +3008,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, "engines": { "node": ">=12.22" }, @@ -3014,7 +3021,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead" + "deprecated": "Use @eslint/object-schema instead", + "dev": true }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.33.5", @@ -6174,136 +6182,6 @@ "resolved": "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz", "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==" }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "peer": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "peer": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/type-utils": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", @@ -6406,58 +6284,6 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "peer": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/utils": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", @@ -6575,27 +6401,11 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true }, "node_modules/@vercel/webpack-asset-relocator-loader": { "version": "1.7.3", @@ -6785,25 +6595,6 @@ "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==" }, - "node_modules/@xstate/react": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@xstate/react/-/react-4.1.3.tgz", - "integrity": "sha512-zhE+ZfrcCR87bu71Rkh5Z5ruZBivR/7uD/dkelzJqjQdI45IZc9DqTI8lL4Cg5+VN2p5k86KxDsusqW1kW11Tg==", - "peer": true, - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.2", - "use-sync-external-store": "^1.2.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "xstate": "^5.18.2" - }, - "peerDependenciesMeta": { - "xstate": { - "optional": true - } - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -7451,36 +7242,6 @@ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "peer": true, - "engines": { - "node": ">=4" - } - }, "node_modules/babel-jsx-utils": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/babel-jsx-utils/-/babel-jsx-utils-1.1.0.tgz", @@ -11515,6 +11276,7 @@ "version": "8.57.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -11960,6 +11722,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -11975,6 +11738,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -11989,6 +11753,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12004,6 +11769,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -12014,12 +11780,14 @@ "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -12035,6 +11803,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -12046,6 +11815,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -12057,6 +11827,7 @@ "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -12071,6 +11842,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -12078,12 +11850,14 @@ "node_modules/eslint/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==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -12109,6 +11883,7 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -12125,6 +11900,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -17473,6 +17249,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -17878,12 +17655,6 @@ "@sideway/pinpoint": "^2.0.0" } }, - "node_modules/jquery": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", - "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", - "peer": true - }, "node_modules/js-cookie": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", @@ -26114,19 +25885,6 @@ "is-typedarray": "^1.0.0" } }, - "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/ua-parser-js": { "version": "1.0.39", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", @@ -26716,15 +26474,6 @@ } } }, - "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==", - "peer": true, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 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/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/blog/2024/11-10-kubecon-na-2024/kubeconna-2024.png b/src/collections/blog/2024/11-10-kubecon-na-2024/kubeconna-2024.png new file mode 100644 index 000000000000..edbbe2fa45be Binary files /dev/null and b/src/collections/blog/2024/11-10-kubecon-na-2024/kubeconna-2024.png differ diff --git a/src/collections/blog/2024/11-10-kubecon-na-2024/post.mdx b/src/collections/blog/2024/11-10-kubecon-na-2024/post.mdx new file mode 100644 index 000000000000..69dda7e6fe3b --- /dev/null +++ b/src/collections/blog/2024/11-10-kubecon-na-2024/post.mdx @@ -0,0 +1,91 @@ +--- +title: "Meshery at KubeCon + CloudNativeCon NA 2024" +subtitle: "Join us at these Meshery sessions" +date: 2024-11-10 +author: Layer5 Team +thumbnail: ./kubeconna-2024.png +darkthumbnail: ./kubeconna-2024.png +description: "Meshery sessions at KubeCon + CloudNativeCon NA 2024" +type: Blog +category: Events +tags: + - Meshery +featured: false +published: true +resource: false +--- + +import { BlogWrapper } from "../../Blog.style.js"; +import { Link } from "gatsby"; +import Button from "../../../../reusecore/Button"; + + + + +Join Layer5 at KubeCon + CloudNativeCon NA, Salt Lake City, Utah! + + +

+Join the Meshery project at KubeCon NA 2024 from November 11th to November 16th, 2024 and get introduced to collaborative cloud native management and Meshery open source maintainers. +

+ +### Session: Meshery - Visualizing Kubernetes Resource Relationships with Meshery + +

+Meshery and its extensions empower you to navigate cloud native infrastructure in complex environments. This lighting talk delves into the human-computer interaction (HCI) principles that underpin MeshMap's intuitive visualization of Kubernetes resources and the various forms of inter/relationships with other CNCF projects' resources. + +Human-Computer Interaction Principles in Meshery: + +

+

+ +
+

+ Date: November 12, 2024
+ Time: 3:04pm - 3:09pm MST +

+ +
+ +### Session: CNCF TAG Network - Intro & Deep Dive + +

+“It’s the network!” is the cry of every engineer. With the increased prevalence of microservices and distributed systems, it’s true - networking as a discipline has never been more critical in the well-architected design and efficient operation of modern infrastructure. Join this talk for an intro to the TAG, its charter and a deeper discussion of current cloud native networking topics being advanced in this TAG. +

+ +
+

+ Date: November 14, 2024
+ Time: 11:55am - 12:30pm MST +

+ +
+ +### Session: Contribfest - Meshery Contribfest: Extending the Cloud Native Manager + +

+Join the Meshery maintainers and community in improving the leading cloud native management plane. This is your chance to get hands-on with the tools shaping the future of collaborative cloud native management. Opportunities: Work on core functionality in the Server (Golang) or UI (React) or extend Meshery by building your own plugin. Contribute to the Meshery documentation by incorporating your own examples of cloud native solution architectures using Meshery Designer. +

+

+Why Contribute to Meshery? - Gain experience with cloud native technologies, including essentially every CNCF project and open source development practices. As is the 10th fastest growing CNCF project, Meshery has a vibrant community. Work alongside passionate maintainers and contributors. No Prior Experience Needed: We welcome contributions from all levels of experience. Join us at Meshery Contribfest and be part of the growing community shaping the future of collaborative cloud native management. +

+ +
+

+ Date: November 14, 2024
+ Time: 4:30pm - 6:00pm MST +

+
+ + + + + +
diff --git a/src/collections/integrations/antrea/icons/components/packet-capture/icons/color/packet-capture-color.svg b/src/collections/integrations/antrea/icons/components/packet-capture/icons/color/packet-capture-color.svg new file mode 100644 index 000000000000..8294df7d2b51 --- /dev/null +++ b/src/collections/integrations/antrea/icons/components/packet-capture/icons/color/packet-capture-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/antrea/icons/components/packet-capture/icons/white/packet-capture-white.svg b/src/collections/integrations/antrea/icons/components/packet-capture/icons/white/packet-capture-white.svg new file mode 100644 index 000000000000..c016e3a306b9 --- /dev/null +++ b/src/collections/integrations/antrea/icons/components/packet-capture/icons/white/packet-capture-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/integrations/antrea/index.mdx b/src/collections/integrations/antrea/index.mdx index 0d695cbbf8d7..cf138d411dc3 100644 --- a/src/collections/integrations/antrea/index.mdx +++ b/src/collections/integrations/antrea/index.mdx @@ -110,6 +110,12 @@ components: [ "colorIcon": "icons/components/node-latency-monitor/icons/color/node-latency-monitor-color.svg", "whiteIcon": "icons/components/node-latency-monitor/icons/white/node-latency-monitor-white.svg", "description": "", +}, +{ +"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": "", }] featureList: [ "Network policy enforcement", 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/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/_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/ aditya-Mohan/aditya-mohan.webp b/src/collections/members/aditya-Mohan/aditya-mohan.webp similarity index 100% rename from src/collections/members/ aditya-Mohan/aditya-mohan.webp rename to src/collections/members/aditya-Mohan/aditya-mohan.webp diff --git a/src/collections/members/ aditya-Mohan/index.mdx b/src/collections/members/aditya-Mohan/index.mdx similarity index 97% rename from src/collections/members/ aditya-Mohan/index.mdx rename to src/collections/members/aditya-Mohan/index.mdx index 9bb952555768..33de690f48c9 100644 --- a/src/collections/members/ aditya-Mohan/index.mdx +++ b/src/collections/members/aditya-Mohan/index.mdx @@ -10,7 +10,7 @@ location: Atlanta, Georgia, United States bio: Hi, Open-source enthusiast, full-stack developer, and M.S. Computer Science student at Georgia State University—blending creativity in code, music, and gaming with a passion for tech and gadgets, and always on the lookout for the next cool toy to tinker with. badges: - meshery -status: Active +status: Inactive published: true maintainer: no --- 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/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.

- - 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/Playground-home/index.js b/src/sections/Home/Playground-home/index.js index 0ba21c56e679..c2aff158ba18 100644 --- a/src/sections/Home/Playground-home/index.js +++ b/src/sections/Home/Playground-home/index.js @@ -64,7 +64,10 @@ const ViewsSectionWrapper = styled.div` @media only screen and (max-width: 767px) { text-align: center; flex-direction: column-reverse; + height: 600px; + padding: 0 2%; } + } .hero-text { display: flex; @@ -76,7 +79,13 @@ const ViewsSectionWrapper = styled.div` max-width: 100%; justify-content: center; text-align: center; + margin-top: 4rem; + } + @media only screen and (min-width: 768px) and (max-width: 1100px) { + padding-left: 1rem; } + + } .hero-image { 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/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/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/Pricing/comparison.js b/src/sections/Pricing/comparison.js index 3d4e735ea0d6..9502dc790d19 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"; diff --git a/src/sections/Pricing/data.js b/src/sections/Pricing/data.js index 90838de228b1..731ab10e2e8c 100644 --- a/src/sections/Pricing/data.js +++ b/src/sections/Pricing/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/generateDetails.js b/src/sections/Pricing/generateDetails.js new file mode 100644 index 000000000000..7d7d358d6310 --- /dev/null +++ b/src/sections/Pricing/generateDetails.js @@ -0,0 +1,48 @@ +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 Identity from "./icons/identity.svg"; +import Notification from "./icons/notification.svg"; +import Support from "./icons/support.svg"; + +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: "Incident Management", icon: Notification }, + { id: 7, name: "Support and Deployment", icon: Support }, + ]; + + return categories.map(category => { + const features = data + .filter(item => item.entire_row["Theme (also: Keychain Name)"] === category.name) + .map(item => ({ + feature: item.entire_row.Function, + description: item.entire_row.Feature, + free: item.entire_row["Subscription Tier"] === "Free" ? : , + team: item.entire_row["Subscription Tier"] === "Team" || item.entire_row["Subscription Tier"] === "Free" ? : , + enterprise: , + })); + + 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/generateOptions.js b/src/sections/Pricing/generateOptions.js new file mode 100644 index 000000000000..07825de1cb38 --- /dev/null +++ b/src/sections/Pricing/generateOptions.js @@ -0,0 +1,62 @@ +import featureData from "../../../feature_data.json"; +import comingSoon from "./icons/coming-soon.webp"; +import React from "react"; + +function generateOptions(data) { + const tiers = { + "Free": { + tier: "Personal", + featured: true, + monthlyprice: 0, + yearlyprice: 0, + byline: "Open Source features, plus:", + button: ["Join for Free", "https://meshery.layer5.io"] + }, + "Team": { + tier: "Team", + featured: false, + monthlyprice: 9.99, + yearlyprice: 100, + byline: "Everything in Free, plus:", + button: [ + "Contact Sales", + "https://us15.list-manage.com/contact-form?u=6b50be5aea3dfe1fd4c041d80&form_id=d0ffe17c92d8014ede6b721aa16096e8" + ] + }, + "Enterprise": { + tier: "Enterprise", + featured: false, + monthlyprice: 15.99, + yearlyprice: 180, + pricing_coming_soon: Coming Soon, + byline: "Everything in Team, plus:", + button: ["Coming Soon", ""] + } + }; + + const options = Object.entries(tiers).map(([tierName, tierInfo]) => { + const summary = data + .filter((item) => + (tierName === "Team" && + (item.entire_row["Subscription Tier"] === "Team" || item.entire_row["Subscription Tier"] === "Team-Beta")) || + (item.entire_row["Subscription Tier"] === tierName && item.pricing_page === "true") + ) + .map((item, index) => ({ + id: index, + category: item.entire_row.Function, + description: item.entire_row.Feature, + tier: item.entire_row["Subscription Tier"] + })); + + return { + ...tierInfo, + summary: summary.length > 0 ? summary : [] + }; + }); + + return options; +} + +const options = generateOptions(featureData); + +export default options; diff --git a/src/sections/Pricing/index.js b/src/sections/Pricing/index.js index c93cb0c8ff9e..56d8457d5d7e 100644 --- a/src/sections/Pricing/index.js +++ b/src/sections/Pricing/index.js @@ -3,11 +3,10 @@ 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 "./generateOptions"; import PlanCard from "../../components/PlanCard"; const Pricing = () => { - // const [monthly, setMonthly] = useState(false); return ( 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/Sistent/components/box/code.js b/src/sections/Projects/Sistent/components/box/code.js new file mode 100644 index 000000000000..e2ef20c0ed79 --- /dev/null +++ b/src/sections/Projects/Sistent/components/box/code.js @@ -0,0 +1,208 @@ +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.

+
`, +]; + +export 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. +

+
+
+
+ +
+
+
+
+ ); +}; 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..9edf1052df65 --- /dev/null +++ b/src/sections/Projects/Sistent/components/box/guidance.js @@ -0,0 +1,179 @@ +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"; + +export 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. +

+
+
+
+ ); +}; 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/index.js b/src/sections/Projects/Sistent/components/index.js index e440e4ed50d2..2f5639e963a0 100644 --- a/src/sections/Projects/Sistent/components/index.js +++ b/src/sections/Projects/Sistent/components/index.js @@ -74,11 +74,18 @@ const componentsData = [ }, { 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", + }, + { + id: 11, name: "Drawer", description: "A Drawer component provides a sliding panel that can be used to display navigation links, actions, or additional content", url: "/projects/sistent/components/drawer", - }, + } ]; const SistentComponents = () => { 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 -