From 94753a996464a60506cb6195e106c1315760ca54 Mon Sep 17 00:00:00 2001 From: jason2000-cpu Date: Mon, 6 Oct 2025 20:41:56 +0300 Subject: [PATCH 01/23] fix: added a MUI data table for badges on community/handbook/recognition Signed-off-by: jason2000-cpu --- .env.development | 1 + .../Handbook/BadgesComponent/BadgesTable.js | 106 ++++++++++++++++++ .../Community/Handbook/recognition.js | 10 +- 3 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 src/sections/Community/Handbook/BadgesComponent/BadgesTable.js diff --git a/.env.development b/.env.development index 9b8e2098704b9..232bb6de90686 100644 --- a/.env.development +++ b/.env.development @@ -1 +1,2 @@ GATSBY_GRAPHQL_IDE=playground +CLOUD_API_TOKEN="your-token-here" \ No newline at end of file diff --git a/src/sections/Community/Handbook/BadgesComponent/BadgesTable.js b/src/sections/Community/Handbook/BadgesComponent/BadgesTable.js new file mode 100644 index 0000000000000..3cc8233137868 --- /dev/null +++ b/src/sections/Community/Handbook/BadgesComponent/BadgesTable.js @@ -0,0 +1,106 @@ +/* eslint-disable linebreak-style */ +import React, { useEffect, useState } from "react"; +import MUIDataTable from "mui-datatables"; +import axios from "axios"; + +function BadgesTable() { + const [badges, setBadges] = useState(); + + useEffect(() => { + async function getBadges() { + const response = await axios.get("/data.json"); + + if (response.data) { + const data = response.data; + const fetchedBadges = Object.values(data.badges); + console.log("FETCHED BADGES", fetchedBadges); + setBadges(fetchedBadges); + } + + } + + getBadges(); + }, []); + + const columns = [ + { + name: "image_url", + label: "Badge/icon", + options: { + filter: false, + sort: false, + customBodyRender: (value) => ( +
+ {typeof value === "string" ? ( + value.startsWith("http") ? ( + badge + ) : ( + {value} + ) + ) : ( + value + )} +
+ ) + } + }, + { + name: "name", + label: "Badge Name", + options: { + filter: true, + sort: true + } + }, + { + name: "org_id", + label: "Badge Key", + option: { + filter: true, + sort: true + } + }, + { + name: "description", + label: "Description", + option: { + filer: false, + sort: false, + customBodyRender: (value) => ( +
{value}
+ ) + } + } + ]; + + const options = { + filterType: "dropdown", + responsive: "standard", + selectableRows: "none", + download: false, + print: false, + viewColumns: false, + elevation: 0, + rowsPerPage: 10, + rowsPerPageOptions: [5, 10, 20, 50], + }; + + return ( +
+ +
+ ); + +} +export default BadgesTable; diff --git a/src/sections/Community/Handbook/recognition.js b/src/sections/Community/Handbook/recognition.js index bc173a989725e..8d79c9a5a1b63 100644 --- a/src/sections/Community/Handbook/recognition.js +++ b/src/sections/Community/Handbook/recognition.js @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; import { Container } from "../../../reusecore/Layout"; import { HandbookWrapper } from "./Handbook.style"; import TOC from "../../../components/handbook-navigation/index"; @@ -36,6 +36,9 @@ import KanvasSnapshotLogo from "../../../assets/images/kanvas-snapshot/kanvas-sn import SistentContributorLogo from "../../../assets/images/sistent/badges/sistent-contributor.svg"; import ContinuousContributorLogo from "../../../assets/images/continuous-contributor/continuous-contributor.svg"; import AcademyLogo from "../../../assets/images/academy/academy.svg"; +import BadgesTable from "./BadgesComponent/BadgesTable"; + + const contents = [ { id: 0, link: "#Profile Bages", text: "Profile Bages" }, @@ -109,7 +112,8 @@ const RecognitionPage = () => {

Badges are awarded to community members who have been consistently engaged and impactful within a given area of the community or on a specific project. Every community member, whether contributing with code or not, has the opportunity to obtain any number of badges of recognition of their efforts. Community members are encouraged to collect the whole set!

- */}

How can I Earn Badges?

From 54b747601fb64d4c6646ca74e29ef7ed98ade1aa Mon Sep 17 00:00:00 2001 From: jason2000-cpu Date: Mon, 6 Oct 2025 20:50:33 +0300 Subject: [PATCH 02/23] fix: added a MUI data table for badges on community/handbook/recognition Signed-off-by: jason2000-cpu --- .../Community/Handbook/recognition.js | 82 +++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/src/sections/Community/Handbook/recognition.js b/src/sections/Community/Handbook/recognition.js index 8d79c9a5a1b63..ba59aac9affff 100644 --- a/src/sections/Community/Handbook/recognition.js +++ b/src/sections/Community/Handbook/recognition.js @@ -1,41 +1,41 @@ -import React, { useEffect, useState } from "react"; +import React from "react"; import { Container } from "../../../reusecore/Layout"; import { HandbookWrapper } from "./Handbook.style"; import TOC from "../../../components/handbook-navigation/index"; import { Link } from "gatsby"; -import CommunityLogo from "../../../assets/images/community/community-green.svg"; -import PatternsLogo from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; -import LandscapeGreen from "../../../assets/images/landscape/layer5_landscape_green.svg"; -import ImageHubLogo from "../../../assets/images/image-hub/layer5-image-hub.svg"; -import DockerExtension from "../../../assets/images/docker-extension/docker-extension-meshery-logo.svg"; -import MesheryLogo from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; -import MesheryOperator from "../../../assets/images/meshery-operator/meshery-operator-dark.svg"; -import ServiceMeshPerformance from "../../../assets/images/service-mesh-performance/stacked/smp-dark-text.svg"; -import NightHawkLogo from "../../../assets/images/nighthawk/icon-only/SVG/nighthawk-logo.svg"; +// import CommunityLogo from "../../../assets/images/community/community-green.svg"; +// import PatternsLogo from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; +// import LandscapeGreen from "../../../assets/images/landscape/layer5_landscape_green.svg"; +// import ImageHubLogo from "../../../assets/images/image-hub/layer5-image-hub.svg"; +// import DockerExtension from "../../../assets/images/docker-extension/docker-extension-meshery-logo.svg"; +// import MesheryLogo from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; +// import MesheryOperator from "../../../assets/images/meshery-operator/meshery-operator-dark.svg"; +// import ServiceMeshPerformance from "../../../assets/images/service-mesh-performance/stacked/smp-dark-text.svg"; +// import NightHawkLogo from "../../../assets/images/nighthawk/icon-only/SVG/nighthawk-logo.svg"; import TocPagination from "../../../components/handbook-navigation/TocPagination"; import IntraPage from "../../../components/handbook-navigation/intra-page"; -import uiuxrLogo from "../../../assets/images/uiuxr/uiuxr.svg"; -import writersLogo from "../../../assets/images/writer-program/writer-program-badge.svg"; -import kanvasLogo from "../../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; -import MesheryCatalogLogo from "../../../assets/images/meshery/meshery-catalog.svg"; -import DocsLogo from "../../../assets/images/docs/docs.svg"; -import ApplicationPioneerLogo from "../../../assets/images/application-pioneer/application-pioneer.svg"; -import BringABuddyLogo from "../../../assets/images/bring-a-buddy/bring-a-buddy.svg"; -import DesignPioneerLogo from "../../../assets/images/design-pioneer/design-pioneer.svg"; -import GitOPsWithFriendsLogo from "../../../assets/images/gitops-with-friends/gitops-with-friends.svg"; -import HipHackerLogo from "../../../assets/images/hip-hacker/hip-hacker.svg"; -import NeedForSpeedLogo from "../../../assets/images/need-for-speed/need-for-speed.svg"; -import SharingIsCaringLogo from "../../../assets/images/sharing-is-caring/sharing-is-caring.svg"; -import ShippedLogo from "../../../assets/images/shipped/shipped.svg"; -import StreamerLogo from "../../../assets/images/streamer/streamer.svg"; -import CodeCleanupCrewLogo from "../../../assets/images/code-cleanup-crew/code-cleanup-crew.svg"; -import SecuritySentinelLogo from "../../../assets/images/security-sentinel/security-sentinel.png"; -import LogevityLegendLogo from "../../../assets/images/longevity-legend/longevity-legend.svg"; -import ReviewRockstarLogo from "../../../assets/images/review-rockstar/review-rockstar.svg"; -import KanvasSnapshotLogo from "../../../assets/images/kanvas-snapshot/kanvas-snapshot.svg"; -import SistentContributorLogo from "../../../assets/images/sistent/badges/sistent-contributor.svg"; -import ContinuousContributorLogo from "../../../assets/images/continuous-contributor/continuous-contributor.svg"; -import AcademyLogo from "../../../assets/images/academy/academy.svg"; +// import uiuxrLogo from "../../../assets/images/uiuxr/uiuxr.svg"; +// import writersLogo from "../../../assets/images/writer-program/writer-program-badge.svg"; +// import kanvasLogo from "../../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; +// import MesheryCatalogLogo from "../../../assets/images/meshery/meshery-catalog.svg"; +// import DocsLogo from "../../../assets/images/docs/docs.svg"; +// import ApplicationPioneerLogo from "../../../assets/images/application-pioneer/application-pioneer.svg"; +// import BringABuddyLogo from "../../../assets/images/bring-a-buddy/bring-a-buddy.svg"; +// import DesignPioneerLogo from "../../../assets/images/design-pioneer/design-pioneer.svg"; +// import GitOPsWithFriendsLogo from "../../../assets/images/gitops-with-friends/gitops-with-friends.svg"; +// import HipHackerLogo from "../../../assets/images/hip-hacker/hip-hacker.svg"; +// import NeedForSpeedLogo from "../../../assets/images/need-for-speed/need-for-speed.svg"; +// import SharingIsCaringLogo from "../../../assets/images/sharing-is-caring/sharing-is-caring.svg"; +// import ShippedLogo from "../../../assets/images/shipped/shipped.svg"; +// import StreamerLogo from "../../../assets/images/streamer/streamer.svg"; +// import CodeCleanupCrewLogo from "../../../assets/images/code-cleanup-crew/code-cleanup-crew.svg"; +// import SecuritySentinelLogo from "../../../assets/images/security-sentinel/security-sentinel.png"; +// import LogevityLegendLogo from "../../../assets/images/longevity-legend/longevity-legend.svg"; +// import ReviewRockstarLogo from "../../../assets/images/review-rockstar/review-rockstar.svg"; +// import KanvasSnapshotLogo from "../../../assets/images/kanvas-snapshot/kanvas-snapshot.svg"; +// import SistentContributorLogo from "../../../assets/images/sistent/badges/sistent-contributor.svg"; +// import ContinuousContributorLogo from "../../../assets/images/continuous-contributor/continuous-contributor.svg"; +// import AcademyLogo from "../../../assets/images/academy/academy.svg"; import BadgesTable from "./BadgesComponent/BadgesTable"; @@ -52,16 +52,16 @@ const contents = [ { id: 4, link: "#SocialMedia", text: "Recognition on Social Media Platforms" }, ]; -const badgeStyle = { - height: "25px", - width: "25px", - verticalAlign: "middle", - marginRight: "1rem", -}; +// const badgeStyle = { +// height: "25px", +// width: "25px", +// verticalAlign: "middle", +// marginRight: "1rem", +// }; -const badgeListStyle = { - listStyleType: "none", -}; +// const badgeListStyle = { +// listStyleType: "none", +// }; const recognitionsstyle = { marginBottom: "0.5rem", From b21218dd8bf3f78a8c6df89498802e8d16d271d4 Mon Sep 17 00:00:00 2001 From: Aryan Shah Date: Sun, 14 Sep 2025 12:38:08 +0530 Subject: [PATCH 03/23] Enhaced The Introduction page for Sistent Signed-off-by: Aryan Shah Signed-off-by: jason2000-cpu --- src/components/SistentNavigation/content.js | 158 ++--- src/components/SistentNavigation/index.js | 80 ++- src/components/SistentNavigation/toc.style.js | 2 +- .../about/index.js} | 2 +- .../getting-started/installation/index.js | 8 + .../sistent/getting-started/tokens/index.js | 8 + .../sistent/getting-started/usage/index.js | 8 + src/sections/Projects/Sistent/about.js | 135 ---- .../Sistent/getting-started/about/index.js | 89 +++ .../getting-started/installation/index.js | 108 +++ .../Sistent/getting-started/tokens/index.js | 350 +++++++++ .../Sistent/getting-started/usage/index.js | 668 ++++++++++++++++++ src/sections/Projects/Sistent/index.js | 4 +- 13 files changed, 1393 insertions(+), 227 deletions(-) rename src/pages/projects/sistent/{about.js => getting-started/about/index.js} (57%) create mode 100644 src/pages/projects/sistent/getting-started/installation/index.js create mode 100644 src/pages/projects/sistent/getting-started/tokens/index.js create mode 100644 src/pages/projects/sistent/getting-started/usage/index.js delete mode 100644 src/sections/Projects/Sistent/about.js create mode 100644 src/sections/Projects/Sistent/getting-started/about/index.js create mode 100644 src/sections/Projects/Sistent/getting-started/installation/index.js create mode 100644 src/sections/Projects/Sistent/getting-started/tokens/index.js create mode 100644 src/sections/Projects/Sistent/getting-started/usage/index.js diff --git a/src/components/SistentNavigation/content.js b/src/components/SistentNavigation/content.js index f38bf81358859..bfbdb3a385faa 100644 --- a/src/components/SistentNavigation/content.js +++ b/src/components/SistentNavigation/content.js @@ -1,110 +1,108 @@ export const content = [ - // About - { id: 0, link: "/projects/sistent/about", text: "About Sistent" }, + // Getting Started + { id: 0, link: "/projects/sistent/getting-started/about", text: "About" }, + { id: 1, link: "/projects/sistent/getting-started/installation", text: "Installation" }, + { id: 2, link: "/projects/sistent/getting-started/usage", text: "Usage" }, + { id: 3, link: "/projects/sistent/getting-started/tokens", text: "Tokens" }, // Identity - { id: 1, link: "/projects/sistent/identity/color", text: "Colors" }, - { id: 2, link: "/projects/sistent/identity/color/guidance", text: "Colors" }, - { id: 3, link: "/projects/sistent/identity/color/code", text: "Colors" }, - { id: 4, link: "/projects/sistent/identity/spacing", text: "Spacing" }, - { id: 5, link: "/projects/sistent/identity/spacing/guidance", text: "Spacing" }, - { id: 6, link: "/projects/sistent/identity/spacing/code", text: "Spacing" }, - { id: 7, link: "/projects/sistent/identity/typography", text: "Typography" }, - { id: 8, link: "/projects/sistent/identity/typography/guidance", text: "Typography" }, - { id: 9, link: "/projects/sistent/identity/typography/code", text: "Typography" }, + { id: 4, link: "/projects/sistent/identity/color", text: "Colors" }, + { id: 5, link: "/projects/sistent/identity/color/guidance", text: "Colors" }, + { id: 6, link: "/projects/sistent/identity/color/code", text: "Colors" }, + { id: 7, link: "/projects/sistent/identity/spacing", text: "Spacing" }, + { id: 8, link: "/projects/sistent/identity/spacing/guidance", text: "Spacing" }, + { id: 9, link: "/projects/sistent/identity/spacing/code", text: "Spacing" }, + { id: 10, link: "/projects/sistent/identity/typography", text: "Typography" }, + { id: 11, link: "/projects/sistent/identity/typography/guidance", text: "Typography" }, + { id: 12, link: "/projects/sistent/identity/typography/code", text: "Typography" }, // Components - { id: 10, link: "/projects/sistent/components/backdrop", text: "Backdrop" }, - { id: 11, link: "/projects/sistent/components/backdrop/guidance", text: "Backdrop" }, - { id: 12, link: "/projects/sistent/components/backdrop/code", text: "Backdrop" }, + { id: 13, link: "/projects/sistent/components/backdrop", text: "Backdrop" }, + { id: 14, link: "/projects/sistent/components/backdrop/guidance", text: "Backdrop" }, + { id: 15, link: "/projects/sistent/components/backdrop/code", text: "Backdrop" }, - { id: 13, link: "/projects/sistent/components/badge", text: "Badge" }, - { id: 14, link: "/projects/sistent/components/badge/guidance", text: "Badge" }, - { id: 15, link: "/projects/sistent/components/badge/code", text: "Badge" }, + { id: 16, link: "/projects/sistent/components/badge", text: "Badge" }, + { id: 17, link: "/projects/sistent/components/badge/guidance", text: "Badge" }, + { id: 18, link: "/projects/sistent/components/badge/code", text: "Badge" }, - { id: 16, link: "/projects/sistent/components/box", text: "Box" }, - { id: 17, link: "/projects/sistent/components/box/guidance", text: "Box" }, - { id: 18, link: "/projects/sistent/components/box/code", text: "Box" }, + { id: 19, link: "/projects/sistent/components/box", text: "Box" }, + { id: 20, link: "/projects/sistent/components/box/guidance", text: "Box" }, + { id: 21, link: "/projects/sistent/components/box/code", text: "Box" }, - { id: 19, link: "/projects/sistent/components/button", text: "Button" }, - { id: 20, link: "/projects/sistent/components/button/guidance", text: "Button" }, - { id: 21, link: "/projects/sistent/components/button/code", text: "Button" }, + { id: 22, link: "/projects/sistent/components/button", text: "Button" }, + { id: 23, link: "/projects/sistent/components/button/guidance", text: "Button" }, + { id: 24, link: "/projects/sistent/components/button/code", text: "Button" }, - { id: 22, link: "/projects/sistent/components/button-group", text: "Button Group" }, - { id: 23, link: "/projects/sistent/components/button-group/guidance", text: "Button Group" }, - { id: 24, link: "/projects/sistent/components/button-group/code", text: "Button Group" }, + { id: 25, link: "/projects/sistent/components/button-group", text: "Button Group" }, + { id: 26, link: "/projects/sistent/components/button-group/guidance", text: "Button Group" }, + { id: 27, link: "/projects/sistent/components/button-group/code", text: "Button Group" }, - { id: 25, link: "/projects/sistent/components/circularprogress", text: "Circular Progress" }, - { id: 26, link: "/projects/sistent/components/circularprogress/guidance", text: "Circular Progress" }, - { id: 27, link: "/projects/sistent/components/circularprogress/code", text: "Circular Progress" }, + { id: 28, link: "/projects/sistent/components/circularprogress", text: "Circular Progress" }, + { id: 29, link: "/projects/sistent/components/circularprogress/guidance", text: "Circular Progress" }, + { id: 30, link: "/projects/sistent/components/circularprogress/code", text: "Circular Progress" }, - { id: 28, link: "/projects/sistent/components/container", text: "Container" }, - { id: 29, link: "/projects/sistent/components/container/guidance", text: "Container" }, - { id: 30, link: "/projects/sistent/components/container/code", text: "Container" }, + { id: 31, link: "/projects/sistent/components/container", text: "Container" }, + { id: 32, link: "/projects/sistent/components/container/guidance", text: "Container" }, + { id: 33, link: "/projects/sistent/components/container/code", text: "Container" }, - { id: 31, link: "/projects/sistent/components/dialog", text: "Dialog" }, - { id: 32, link: "/projects/sistent/components/dialog/guidance", text: "Dialog" }, - { id: 33, link: "/projects/sistent/components/dialog/code", text: "Dialog" }, - - { id: 34, link: "/projects/sistent/components/grid", text: "Grid" }, - { id: 35, link: "/projects/sistent/components/grid/guidance", text: "Grid" }, - { id: 36, link: "/projects/sistent/components/grid/code", text: "Grid" }, + { id: 34, link: "/projects/sistent/components/dialog", text: "Dialog" }, + { id: 35, link: "/projects/sistent/components/dialog/guidance", text: "Dialog" }, + { id: 36, link: "/projects/sistent/components/dialog/code", text: "Dialog" }, { id: 37, link: "/projects/sistent/components/icons", text: "Icons" }, + { id: 38, link: "/projects/sistent/components/link", text: "Link" }, + { id: 39, link: "/projects/sistent/components/link/guidance", text: "Link" }, + { id: 40, link: "/projects/sistent/components/link/code", text: "Link" }, { id: 38, link: "/projects/sistent/components/link", text: "Link" }, { id: 39, link: "/projects/sistent/components/link/guidance", text: "Link" }, { id: 40, link: "/projects/sistent/components/link/code", text: "Link" }, - { id: 41, link: "/projects/sistent/components/list", text: "List" }, - { id: 42, link: "/projects/sistent/components/list/guidance", text: "List" }, - { id: 43, link: "/projects/sistent/components/list/code", text: "List" }, - - { id: 44, link: "/projects/sistent/components/modal", text: "Modal" }, - { id: 45, link: "/projects/sistent/components/modal/guidance", text: "Modal" }, - { id: 46, link: "/projects/sistent/components/modal/code", text: "Modal" }, + { id: 41, link: "/projects/sistent/components/modal", text: "Modal" }, + { id: 42, link: "/projects/sistent/components/modal/guidance", text: "Modal" }, + { id: 43, link: "/projects/sistent/components/modal/code", text: "Modal" }, - { id: 47, link: "/projects/sistent/components/pagination", text: "Pagination" }, - { id: 48, link: "/projects/sistent/components/pagination/guidance", text: "Pagination" }, - { id: 49, link: "/projects/sistent/components/pagination/code", text: "Pagination" }, + { id: 44, link: "/projects/sistent/components/pagination", text: "Pagination" }, + { id: 45, link: "/projects/sistent/components/pagination/guidance", text: "Pagination" }, + { id: 46, link: "/projects/sistent/components/pagination/code", text: "Pagination" }, - { id: 50, link: "/projects/sistent/components/paper", text: "Paper" }, - { id: 51, link: "/projects/sistent/components/paper/guidance", text: "Paper" }, - { id: 52, link: "/projects/sistent/components/paper/code", text: "Paper" }, + { id: 47, link: "/projects/sistent/components/paper", text: "Paper" }, + { id: 48, link: "/projects/sistent/components/paper/guidance", text: "Paper" }, + { id: 49, link: "/projects/sistent/components/paper/code", text: "Paper" }, - { id: 53, link: "/projects/sistent/components/popper", text: "Popper" }, - { id: 54, link: "/projects/sistent/components/popper/guidance", text: "Popper" }, - { id: 55, link: "/projects/sistent/components/popper/code", text: "Popper" }, + { id: 50, link: "/projects/sistent/components/popper", text: "Popper" }, + { id: 51, link: "/projects/sistent/components/popper/guidance", text: "Popper" }, + { id: 52, link: "/projects/sistent/components/popper/code", text: "Popper" }, - { id: 56, link: "/projects/sistent/components/radiogroup", text: "RadioGroup" }, - { id: 57, link: "/projects/sistent/components/radiogroup/guidance", text: "RadioGroup" }, - { id: 58, link: "/projects/sistent/components/radiogroup/code", text: "RadioGroup" }, + { id: 53, link: "/projects/sistent/components/radiogroup", text: "RadioGroup" }, + { id: 54, link: "/projects/sistent/components/radiogroup/guidance", text: "RadioGroup" }, + { id: 55, link: "/projects/sistent/components/radiogroup/code", text: "RadioGroup" }, - { id: 59, link: "/projects/sistent/components/select", text: "Select" }, - { id: 60, link: "/projects/sistent/components/select/guidance", text: "Select" }, - { id: 61, link: "/projects/sistent/components/select/code", text: "Select" }, + { id: 56, link: "/projects/sistent/components/select", text: "Select" }, + { id: 57, link: "/projects/sistent/components/select/guidance", text: "Select" }, + { id: 58, link: "/projects/sistent/components/select/code", text: "Select" }, - { id: 62, link: "/projects/sistent/components/switch", text: "Switch" }, - { id: 63, link: "/projects/sistent/components/switch/guidance", text: "Switch" }, - { id: 64, link: "/projects/sistent/components/switch/code", text: "Switch" }, + { id: 59, link: "/projects/sistent/components/switch", text: "Switch" }, + { id: 60, link: "/projects/sistent/components/switch/guidance", text: "Switch" }, + { id: 61, link: "/projects/sistent/components/switch/code", text: "Switch" }, - { id: 65, link: "/projects/sistent/components/tabs", text: "Tabs" }, - { id: 66, link: "/projects/sistent/components/tabs/guidance", text: "Tabs" }, - { id: 67, link: "/projects/sistent/components/tabs/code", text: "Tabs" }, + { id: 62, link: "/projects/sistent/components/tabs", text: "Tabs" }, + { id: 63, link: "/projects/sistent/components/tabs/guidance", text: "Tabs" }, + { id: 64, link: "/projects/sistent/components/tabs/code", text: "Tabs" }, - { id: 68, link: "/projects/sistent/components/text-field", text: "Text Field" }, - { id: 69, link: "/projects/sistent/components/text-field/guidance", text: "Text Field" }, - { id: 70, link: "/projects/sistent/components/text-field/code", text: "Text Field" }, + { id: 65, link: "/projects/sistent/components/text-field", text: "Text Field" }, + { id: 66, link: "/projects/sistent/components/text-field/guidance", text: "Text Field" }, + { id: 67, link: "/projects/sistent/components/text-field/code", text: "Text Field" }, - { id: 71, link: "/projects/sistent/components/text-input", text: "Text Input" }, - { id: 72, link: "/projects/sistent/components/text-input/guidance", text: "Text Input" }, - { id: 73, link: "/projects/sistent/components/text-input/code", text: "Text Input" }, + { id: 68, link: "/projects/sistent/components/text-input", text: "Text Input" }, + { id: 69, link: "/projects/sistent/components/text-input/guidance", text: "Text Input" }, + { id: 70, link: "/projects/sistent/components/text-input/code", text: "Text Input" }, - { id: 74, link: "/projects/sistent/components/toolbar", text: "Toolbar" }, - { id: 75, link: "/projects/sistent/components/toolbar/guidance", text: "Toolbar" }, - { id: 76, link: "/projects/sistent/components/toolbar/code", text: "Toolbar" }, + { id: 71, link: "/projects/sistent/components/toolbar", text: "Toolbar" }, + { id: 72, link: "/projects/sistent/components/toolbar/guidance", text: "Toolbar" }, + { id: 73, link: "/projects/sistent/components/toolbar/code", text: "Toolbar" }, - { id: 77, link: "/projects/sistent/components/tooltip", text: "Tooltip" }, - { id: 78, link: "/projects/sistent/components/tooltip/guidance", text: "Tooltip" }, - { id: 79, link: "/projects/sistent/components/tooltip/code", text: "Tooltip" }, -]; + { id: 74, link: "/projects/sistent/components/tooltip", text: "Tooltip" }, + { id: 75, link: "/projects/sistent/components/tooltip/guidance", text: "Tooltip" }, + { id: 76, link: "/projects/sistent/components/tooltip/code", text: "Tooltip" }, +]; \ No newline at end of file diff --git a/src/components/SistentNavigation/index.js b/src/components/SistentNavigation/index.js index 4ee774392c7c8..f5bca82b99ad8 100644 --- a/src/components/SistentNavigation/index.js +++ b/src/components/SistentNavigation/index.js @@ -12,6 +12,9 @@ import { useLocation } from "@reach/router"; const TOC = () => { const [expand, setExpand] = useState(false); const location = useLocation(); + const [expandGettingStarted, setExpandGettingStarted] = useState( + location.pathname.includes("/getting-started") + ); const [expandIdentity, setExpandIdentity] = useState( location.pathname.includes("/identity") ); @@ -52,13 +55,74 @@ const TOC = () => {
  • - - About - +
    +
  • setExpandGettingStarted((prev) => !prev)} + > + Getting Started + {expandGettingStarted ? + : + + } +
  • + {expandGettingStarted && ( +
    +
  • + + About + +
  • +
  • + + Installation + +
  • +
  • + + Usage + +
  • +
  • + + Tokens + +
  • +
    + )} +
  • @@ -163,4 +227,4 @@ const TOC = () => { ); }; -export default TOC; +export default TOC; \ No newline at end of file diff --git a/src/components/SistentNavigation/toc.style.js b/src/components/SistentNavigation/toc.style.js index 59775c9ba70fa..9fbe06c55056a 100644 --- a/src/components/SistentNavigation/toc.style.js +++ b/src/components/SistentNavigation/toc.style.js @@ -135,7 +135,7 @@ const TOCWrapper = styled.div` background-color: transparent; } - .identity, .components { + .identity, .components, .getting-started { display: flex; width: 100%; justify-content: space-between; diff --git a/src/pages/projects/sistent/about.js b/src/pages/projects/sistent/getting-started/about/index.js similarity index 57% rename from src/pages/projects/sistent/about.js rename to src/pages/projects/sistent/getting-started/about/index.js index ca244873d926f..5e0f5cb4b0132 100644 --- a/src/pages/projects/sistent/about.js +++ b/src/pages/projects/sistent/getting-started/about/index.js @@ -1,5 +1,5 @@ import React from "react"; -import SistentAbout from "../../../sections/Projects/Sistent/about"; +import SistentAbout from "../../../../../sections/Projects/Sistent/getting-started/about"; const SistentAboutPage = () => { return ; diff --git a/src/pages/projects/sistent/getting-started/installation/index.js b/src/pages/projects/sistent/getting-started/installation/index.js new file mode 100644 index 0000000000000..a95a95e6e24fa --- /dev/null +++ b/src/pages/projects/sistent/getting-started/installation/index.js @@ -0,0 +1,8 @@ +import React from "react"; +import SistentInstallation from "../../../../../sections/Projects/Sistent/getting-started/installation"; + +const SistentInstallationPage = () => { + return ; +}; + +export default SistentInstallationPage; diff --git a/src/pages/projects/sistent/getting-started/tokens/index.js b/src/pages/projects/sistent/getting-started/tokens/index.js new file mode 100644 index 0000000000000..38bcbd26d1030 --- /dev/null +++ b/src/pages/projects/sistent/getting-started/tokens/index.js @@ -0,0 +1,8 @@ +import React from "react"; +import SistentTokens from "../../../../../sections/Projects/Sistent/getting-started/tokens"; + +const SistentTokensPage = () => { + return ; +}; + +export default SistentTokensPage; diff --git a/src/pages/projects/sistent/getting-started/usage/index.js b/src/pages/projects/sistent/getting-started/usage/index.js new file mode 100644 index 0000000000000..4dfb186487637 --- /dev/null +++ b/src/pages/projects/sistent/getting-started/usage/index.js @@ -0,0 +1,8 @@ +import React from "react"; +import SistentUsage from "../../../../../sections/Projects/Sistent/getting-started/usage"; + +const SistentUsagePage = () => { + return ; +}; + +export default SistentUsagePage; diff --git a/src/sections/Projects/Sistent/about.js b/src/sections/Projects/Sistent/about.js deleted file mode 100644 index 114ae1e607dd2..0000000000000 --- a/src/sections/Projects/Sistent/about.js +++ /dev/null @@ -1,135 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import SistentWrapper from "./sistent.style"; -import TOC from "../../../components/SistentNavigation"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; -import SistentPagination from "../../../components/SistentNavigation/pagination"; - -import { Link } from "gatsby"; -import { useStyledDarkMode } from "../../../theme/app/useStyledDarkMode"; -import { CodeBlock } from "./components/button/code-block"; -import { SistentThemeProvider } from "@sistent/sistent"; -import { Button } from "@sistent/sistent"; - -const contents = [{ id: 0, link: "#About Sistent", text: "About Sistent" }]; - -const codes = [ - "npm i @sistent/sistent", - ` import { SistentThemeProvider } from "@sistent/sistent"; - import { Button } from "@sistent/sistent"; - - - - - - `, -]; - -const SistentAbout = () => { - const { isDark } = useStyledDarkMode(); - - return ( - -
    -

    About Sistent

    -
    - -
    - -
    - -

    About Sistent

    -
    -

    - Sistent an open source design system - that offers building blocks to create consistent, accessible, and - user-friendly interfaces. It's aimed at developers who want to - design applications aligned with the same brand and ensure a - uniform user experience across different products. -

    -

    - Sistent leverages Material UI libraries and provides a custom - theme on top of it for a consistent look and feel. It includes - components, icons, and design tokens that developers can readily - integrate into their applications. By using Sistent, developers - can save time and effort while maintaining a high-quality user - experience. -

    -

    - - Sistent provides a consistent user experience across any frontend - software projects that choose to use it. - -

    -

    - 'Sistent' is a play on words to ensure that we have a{" "} - consistent theme, components, design tokens, etc across all - of the apps that will be using this library. Sistent is a design - system that uses the MUI v5 components and a{" "} - custom theme provider instead of using the default theme - from MUI v5. -

    - -

    - Sistent is built with Typescript and Reactjs and contains - components and a large collection of icons that can be reused - across projects. If you’re interested in joining the project - (please do!), let us know, and we will help you get started on - contributing. -

    -

    Layer5 Brand Resources

    -
      -
    • Brand Guide
    • -
    • Logos and Brand Kits
    • -
    - -

    Installation and Quickstart

    -
    -

    To install the Sistent NPM package, run:

    -
    - -
    -

    - After installation, you can import Sistent theme and any Sistent - component from "@sistent/sistent". The component needs to be - included inside "SistentThemeProvider". -

    -

    Taking button as an example:

    -
    -
    - - - - - -
    - -
    - -

    - To contribute to Layer5 projects' UI using Sistent e.g. meshery-ui and others, You can - refer to {" "} - - sistent set-up guide - , {" "} - Hands-on Training Session: Migrating Components to MUI v5 and Sistent, {" "} - - Training: contributing to Sistent - {" "} - and{" "} - - Websites call - {" "} - where experienced contributors have taught how to use sistent in - various Layer5 projects. -

    -
    - -
    - -
    -
    - ); -}; - -export default SistentAbout; diff --git a/src/sections/Projects/Sistent/getting-started/about/index.js b/src/sections/Projects/Sistent/getting-started/about/index.js new file mode 100644 index 0000000000000..854cad9f6584a --- /dev/null +++ b/src/sections/Projects/Sistent/getting-started/about/index.js @@ -0,0 +1,89 @@ +import React from "react"; +import { Container } from "../../../../../reusecore/Layout"; +import SistentWrapper from "../../sistent.style"; +import TOC from "../../../../../components/SistentNavigation"; +import IntraPage from "../../../../../components/handbook-navigation/intra-page"; +import SistentPagination from "../../../../../components/SistentNavigation/pagination"; +import { Link } from "gatsby"; + +const contents = [ + { id: 0, link: "#About Sistent", text: "About Sistent" }, + { id: 1, link: "#Key Features", text: "Key Features" }, + { id: 2, link: "#Brand Resources", text: "Brand Resources" } +]; + +const SistentAbout = () => { + return ( + +
    +

    About Sistent

    +
    + +
    + +
    + +

    Overview

    +
    +

    + Sistent is an open source design system that offers building blocks + to create consistent, accessible, and user-friendly interfaces. It's + aimed at developers who want to design applications aligned with the + same brand and ensure a uniform user experience across different products. +

    +

    + + Sistent provides a consistent user experience across any frontend + software projects that choose to use it. + +

    +

    + 'Sistent' is a play on words to ensure that we have a{" "} + consistent theme, components, design tokens, etc across all + of the apps that will be using this library. Sistent is a design + system that uses MUI v5 components with a{" "} + custom theme provider instead of using the default theme + from MUI v5. +

    +
    + +

    Key Features

    +
    +

    + Sistent leverages Material UI libraries and provides a custom + theme on top of it for a consistent look and feel. Key features include: +

    +
      +
    • Consistent Design System: Unified components, icons, and design tokens across all Layer5 projects
    • +
    • Material UI Foundation: Built on top of MUI v5 with custom theming
    • +
    • Comprehensive Token System: Color, typography, and spacing tokens for consistent design
    • +
    • Accessibility First: Components designed with accessibility in mind
    • +
    • Large Icon Collection: Extensive collection of icons for various use cases
    • +
    • Theme Flexibility: Light and dark mode support with customizable themes
    • +
    +
    + +

    Brand Resources

    +
    +

    + Layer5 provides comprehensive brand resources to ensure consistent + branding across all applications and materials: +

    +
      +
    • Brand Guide - Complete brand guidelines and usage instructions
    • +
    • Logos and Brand Kits - Official logos, colors, and brand assets
    • +
    +

    + These resources work hand-in-hand with Sistent to maintain brand + consistency across the entire Layer5 ecosystem. +

    +
    + +
    + +
    +
    + ); +}; + +export default SistentAbout; \ No newline at end of file diff --git a/src/sections/Projects/Sistent/getting-started/installation/index.js b/src/sections/Projects/Sistent/getting-started/installation/index.js new file mode 100644 index 0000000000000..84abf008941a2 --- /dev/null +++ b/src/sections/Projects/Sistent/getting-started/installation/index.js @@ -0,0 +1,108 @@ +import React from "react"; +import { Container } from "../../../../../reusecore/Layout"; +import SistentWrapper from "../../sistent.style"; +import TOC from "../../../../../components/SistentNavigation"; +import IntraPage from "../../../../../components/handbook-navigation/intra-page"; +import SistentPagination from "../../../../../components/SistentNavigation/pagination"; +import Code from "../../../../../components/CodeBlock"; + +const contents = [ + { id: 0, link: "#overview", text: "Overview" }, + { id: 1, link: "#installation", text: "Installation" }, + { id: 2, link: "#quick-start", text: "Quick Start" }, + { id: 3, link: "#contributing", text: "Contributing" } +]; + +const codeExamples = { + npmInstall: "npm install @sistent/sistent", + + yarnInstall: "yarn add @sistent/sistent", + + quickStart: `import { SistentThemeProvider, Button } from "@sistent/sistent"; + + function App() { + return ( + + + + ); + } + + export default App;`, + + prerequisites: `{ + "peerDependencies": { + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } +}` +}; + +const SistentInstallation = () => { + return ( + +
    +

    Installation

    +
    + +
    + +
    + +

    Overview

    +
    +

    + Sistent is a React-based design system from Layer5. To get started, make sure your environment meets the following requirements: +

    +
      +
    • + React: >=17.0.0 and React DOM: >=17.0.0 +
    • +
    • + Node.js: >=16.x (verified in CI on Node 16, Node 18, and Node 20) +
    • +
    + + +

    Installation

    +
    +

    + Install Sistent using your preferred package manager: +

    +

    Using npm

    + +

    Using yarn

    + + +

    Quick Start

    +
    +

    + Wrap your application with SistentThemeProvider to enable theming and start using components. + The theme provider automatically handles light/dark mode switching based on system preferences. +

    + +

    + That's it! Your Sistent components will automatically inherit the Layer5 design system with proper theming, spacing, and colors. + Components such as Button will also respond to system dark mode changes automatically. +

    + +

    Contributing

    +
    +

    + If you want to contribute or use it in your project locally, see our   + + Contributing Guide + for complete setup instructions. +

    +
    + +
    + +
    +
    + ); +}; + +export default SistentInstallation; \ No newline at end of file diff --git a/src/sections/Projects/Sistent/getting-started/tokens/index.js b/src/sections/Projects/Sistent/getting-started/tokens/index.js new file mode 100644 index 0000000000000..db1c2d8af2ead --- /dev/null +++ b/src/sections/Projects/Sistent/getting-started/tokens/index.js @@ -0,0 +1,350 @@ +import React from "react"; +import { Container } from "../../../../../reusecore/Layout"; +import SistentWrapper from "../../sistent.style"; +import TOC from "../../../../../components/SistentNavigation"; +import IntraPage from "../../../../../components/handbook-navigation/intra-page"; +import SistentPagination from "../../../../../components/SistentNavigation/pagination"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; +import { CodeBlock } from "../../components/button/code-block"; +import { SistentThemeProvider } from "@sistent/sistent"; +import { Box, Typography, Card, Alert } from "@sistent/sistent"; + +const contents = [ + { id: 0, link: "#overview", text: "Overview" }, + { id: 1, link: "#accessing-tokens", text: "Accessing Tokens" }, + { id: 2, link: "#color-system", text: "Color System" }, + { id: 3, link: "#typography", text: "Typography" }, + { id: 4, link: "#spacing", text: "Spacing" }, + { id: 5, link: "#examples", text: "Examples" } +]; + +const codeExamples = { + basicAccess: `import { useTheme } from "@sistent/sistent"; + +function MyComponent() { + const theme = useTheme(); + + return ( +
    + Using Sistent design tokens +
    + ); +}`, + + colors: `// Primary brand colors +theme.palette.primary.main // Layer5 Green +theme.palette.secondary.main // Layer5 Orange + +// Semantic colors +theme.palette.error.main // Error red +theme.palette.success.main // Success green +theme.palette.warning.main // Warning orange +theme.palette.info.main // Info blue + +// Background and text +theme.palette.background.default +theme.palette.text.primary`, + + typography: `// Typography scale +theme.typography.h1 // Large headings +theme.typography.h6 // Small headings +theme.typography.body1 // Primary body text +theme.typography.body2 // Secondary body text + +// Font properties +theme.typography.fontFamily // Primary font +theme.typography.fontWeightBold // Font weights`, + + spacing: `// 8px-based spacing system +theme.spacing(1) // 8px +theme.spacing(2) // 16px +theme.spacing(3) // 24px +theme.spacing(4) // 32px + +// Usage in components + + {/* padding: 16px, margin-bottom: 24px */} +`, + + practicalExample: `import { styled, Card, Typography } from "@sistent/sistent"; + +const ProductCard = styled(Card)(({ theme }) => ({ + // Background and borders using color tokens + backgroundColor: theme.palette.background.paper, + border: \`1px solid \${theme.palette.divider}\`, + borderRadius: theme.shape.borderRadius, + + // Consistent spacing using spacing tokens + padding: theme.spacing(3), + marginBottom: theme.spacing(2), + + // Typography tokens for text hierarchy + '& .product-title': { + ...theme.typography.h5, + color: theme.palette.text.primary, + marginBottom: theme.spacing(1), + fontWeight: theme.typography.fontWeightMedium, + }, + + '& .product-description': { + ...theme.typography.body1, + color: theme.palette.text.secondary, + marginBottom: theme.spacing(2), + lineHeight: 1.6, + }, + + '& .product-price': { + ...theme.typography.h6, + color: theme.palette.primary.main, + fontWeight: theme.typography.fontWeightBold, + }, + + // Interactive states with color tokens + '&:hover': { + backgroundColor: theme.palette.action.hover, + transform: 'translateY(-2px)', + transition: 'all 0.2s ease-in-out', + }, + + // Responsive spacing + [theme.breakpoints.up('md')]: { + padding: theme.spacing(4), + }, +})); + +// Usage example +function ProductShowcase({ products }) { + return ( +
    + {products.map(product => ( + +
    {product.name}
    +
    {product.description}
    +
    \`$\`{product.price}
    +
    + ))} +
    + ); +}` +}; + +const SistentTokens = () => { + const { isDark } = useStyledDarkMode(); + + return ( + +
    +

    Design Tokens

    +
    + + +
    + +
    + + +

    Overview

    +
    +

    + Design tokens are the foundation of Sistent's design system. They are named values that store + visual design attributes like colors, spacing, and typography scales. Instead of hardcoding + values like #00B39F or 16px, you reference semantic tokens that + automatically adapt to different themes and contexts. +

    + + + + Why tokens matter: They ensure visual consistency across Layer5 projects, + enable automatic theming (light/dark mode), and make maintenance significantly easier. + + + + +

    Accessing Tokens

    +
    +

    + All design tokens are available through the theme object using the useTheme hook: +

    + +
    + +
    + + +

    Color System

    +
    +

    + Sistent uses Layer5's brand colors as the foundation, with additional semantic colors + for UI states. +

    + +
    +
    + + + + Primary + + + Secondary + + + Error + + + Success + + + +
    + +
    + + +

    Typography

    +
    +

    + Typography tokens provide consistent text styling across all components. +

    + +
    +
    + + + Heading 1 + Heading 3 + Heading 6 + Body text primary + Body text secondary + + +
    + +
    + + +

    Spacing

    +
    +

    + Sistent uses an 8px-based spacing system. All spacing values are multiples of 8px + for consistent layouts. +

    + +
    +
    + + + {[1, 2, 3, 4, 6, 8].map((multiplier) => ( + + + spacing({multiplier}) + + + + {multiplier * 8}px + + + ))} + + +
    + +
    + + +

    Practical Examples

    +
    +

    + Here's how to use multiple token categories together in real components: +

    + +
    +
    + + + + Product Card + + + A beautifully designed card component using Sistent design tokens for consistent styling and theming. + + + $99.99 + + + +
    + +
    + +

    Implementation Guidelines

    +
    +
      +
    • Always use tokens instead of hardcoded values for maintainable code
    • +
    • Tokens automatically adapt to light/dark themes without additional configuration
    • +
    • Use useTheme() hook to access all available design tokens
    • +
    • Prefer semantic color names (primary, error) over specific hex values
    • +
    • Follow the 8px spacing grid system for consistent visual rhythm
    • +
    • Test components in both light and dark themes to ensure proper contrast
    • +
    + +
    + +
    + +
    +
    + ); +}; + +export default SistentTokens; \ No newline at end of file diff --git a/src/sections/Projects/Sistent/getting-started/usage/index.js b/src/sections/Projects/Sistent/getting-started/usage/index.js new file mode 100644 index 0000000000000..93ffdd6a6ffc2 --- /dev/null +++ b/src/sections/Projects/Sistent/getting-started/usage/index.js @@ -0,0 +1,668 @@ +import React from "react"; +import { Container } from "../../../../../reusecore/Layout"; +import SistentWrapper from "../../sistent.style"; +import TOC from "../../../../../components/SistentNavigation"; +import IntraPage from "../../../../../components/handbook-navigation/intra-page"; +import SistentPagination from "../../../../../components/SistentNavigation/pagination"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; +import { CodeBlock } from "../../components/button/code-block"; +import { SistentThemeProvider } from "@sistent/sistent"; +import { Button, TextField, Card, CardContent, Typography, Alert } from "@sistent/sistent"; + +const contents = [ + { id: 0, link: "#overview", text: "Overview" }, + { id: 1, link: "#theme-provider", text: "Theme Provider" }, + { id: 2, link: "#component-examples", text: "Component Examples" }, + { id: 3, link: "#advanced-usage", text: "Advanced Usage" }, + { id: 4, link: "#best-practices", text: "Best Practices" } +]; + +const codeExamples = { + basicUsage: `import { SistentThemeProvider } from "@sistent/sistent"; +import { Button } from "@sistent/sistent"; + +function App() { + return ( + + + + ); +}`, + + themeProvider: `import { SistentThemeProvider } from "@sistent/sistent"; + +function App() { + return ( + + {/* Your app components go here */} + + + ); +}`, + + buttonVariants: `import { Button, Stack } from "@sistent/sistent"; + +function ButtonExamples() { + return ( + + + + + + + ); +}`, + + formExample: `import React, { useState } from "react"; +import { + Card, + CardContent, + Typography, + TextField, + Button, + Stack, + Box +} from "@sistent/sistent"; + +function ContactForm() { + const [formData, setFormData] = useState({ + name: '', + email: '', + message: '' + }); + + const handleSubmit = (e) => { + e.preventDefault(); + console.log('Form submitted:', formData); + }; + + const handleChange = (field) => (e) => { + setFormData(prev => ({ + ...prev, + [field]: e.target.value + })); + }; + + return ( + + + + Get in Touch + + + Fill out the form below and we'll get back to you soon. + + + + + + + + + + + + + ); +}`, + + themeCustomization: `import { + SistentThemeProvider, + Button, + useTheme, + createTheme +} from "@sistent/sistent"; + +// Custom theme configuration +const customTheme = createTheme({ + palette: { + primary: { + main: '#1976d2', + dark: '#115293', + light: '#42a5f5', + }, + secondary: { + main: '#dc004e', + }, + }, + typography: { + h1: { + fontSize: '2.5rem', + fontWeight: 600, + }, + }, +}); + +function ThemedButton() { + const theme = useTheme(); + + return ( + + ); +} + +function App() { + return ( + + + + ); +}`, + + importStrategies: `// ✅ Recommended: Individual component imports +import { Button } from "@sistent/sistent"; +import { TextField } from "@sistent/sistent"; +import { Card, CardContent } from "@sistent/sistent"; + +// ✅ Also good: Grouped imports for related components +import { + Typography, + Box, + Stack, + Container +} from "@sistent/sistent"; + +// ❌ Avoid: Importing everything (increases bundle size) +import * as Sistent from "@sistent/sistent";`, + + iconUsage: `import { + Button, + IconButton, + Stack, + Tooltip +} from "@sistent/sistent"; +import { + Search as SearchIcon, + Menu as MenuIcon, + Download as DownloadIcon, + Favorite as FavoriteIcon +} from "@sistent/sistent"; + +function IconExamples() { + return ( + + {/* Button with start icon */} + + + {/* Button with end icon */} + + + {/* Icon-only buttons */} + + + + + + + + + + + + + ); +}`, + + responsiveUsage: `import { + Card, + CardContent, + Typography, + Box +} from "@sistent/sistent"; + +function ResponsiveGrid() { + return ( + +
    + + + + Responsive Card 1 + + + This card adapts to different screen sizes automatically. + + + + + + + + Responsive Card 2 + + + On mobile, cards stack vertically for better readability. + + + + + + + + Responsive Card 3 + + + Grid system provides flexible layouts across all devices. + + + + + + + + Responsive Card 4 + + + Design system ensures visual unity. + + + +
    +
    + ); +}` +}; + +const SistentUsage = () => { + const { isDark } = useStyledDarkMode(); + + return ( + +
    +

    Usage Guide

    +
    + + +
    + +
    + +

    Overview

    +
    +
    +

    + After installing Sistent, you can immediately start using components in your React application. + The most important step is wrapping your application with the + SistentThemeProvider + to ensure all components have access to the theme context. +

    + + + Prerequisites: Ensure you have React 16.8+ and have installed Sistent using + npm install @sistent/sistent + + +

    Quick Start Example

    +

    + Here's the minimal setup to get started with Sistent: +

    + +
    +
    + + + +
    + +
    +
    + + {/* Theme Provider Section */} +

    Theme Provider Setup

    +
    +

    + The SistentThemeProvider is the foundation of your Sistent application. + It provides theme context, manages color modes, and ensures consistent styling across all components. +

    + +

    Theme Configuration

    +

    + Configure your theme provider with various options: +

    + +
    + +
    + +
    +

    Theme Provider Props

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PropTypeDefaultDescription
    initialMode"light" | "dark" | "system""system"Sets the initial color mode
    themeThemeDefault themeCustom theme object
    childrenReactNode-Your application components
    +
    + + + Important: Place the SistentThemeProvider at the root of your + component tree, typically in your App.js or index.js file. + +
    + + {/* Component Examples Section */} +
    +

    Component Examples

    +

    + Explore practical examples of Sistent components with different configurations and use cases. +

    + +

    Button Variations

    +

    + Sistent provides multiple button variants, colors, and sizes to fit different design needs: +

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

    Interactive Form Example

    +

    + A complete form example showcasing multiple components working together: +

    + +
    +
    + + + + + Get in Touch + + + Fill out the form below and we'll get back to you soon. + +
    + + + + +
    +
    +
    +
    +
    + +
    +
    + + {/* Advanced Usage Section */} +

    Advanced Usage

    +
    + +

    Theme Customization

    +

    + Create custom themes and use the theme hook for advanced styling: +

    + +
    + +
    + +

    Import Strategies

    +

    + Optimize your bundle size with smart import strategies: +

    + +
    + +
    + +

    Working with Icons

    +

    + Integrate Sistent's comprehensive icon library: +

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

    Responsive Design

    +

    + Build responsive layouts with Sistent's grid system and breakpoint utilities: +

    +
    +
    + +
    +
    + + + + Responsive Card 1 + + + This card adapts to different screen sizes automatically. + + + + + + + Responsive Card 2 + + + On mobile, cards stack vertically for better readability. + + + + + + + Responsive Card 3 + + + Grid system provides flexible layouts across all devices. + + + + + + + Responsive Card 4 + + + Design system ensures visual unity. + + + +
    +
    +
    +
    + +
    +
    + {/* Best Practices Section */} +

    Best Practices

    +
    +
      +
    • + Theme Provider: Always wrap your application root with SistentThemeProvider. + Place it as high as possible in your component tree to ensure all components + have access to the theme context. +
    • + +
    • + Import Optimization: Import only the components you need to keep your bundle size minimal. + Use individual imports or group related components together rather than + importing everything. +
    • + +
    • + Consistent Design: Use consistent component variants, colors, and sizing throughout your application. + Create reusable component wrappers for commonly used patterns. +
    • + +
    • + Mobile-First: Leverage Sistent's responsive utilities and breakpoints to create mobile-first + designs. Test your components across different screen sizes. +
    • + +
    • + Accessibility: Take advantage of Sistent's built-in accessibility features. Always provide + proper labels, ARIA attributes, and ensure adequate color contrast. +
    • + +
    • + Theme Customization: Use design tokens and theme customization for styling rather than overriding + CSS directly. This ensures consistency and easier maintenance. +
    • +
    + + + Pro Tip: Create a custom hook to manage commonly used theme values + and component configurations across your application. + +
    +
    + +
    + +
    +
    + ); +}; + +export default SistentUsage; \ No newline at end of file diff --git a/src/sections/Projects/Sistent/index.js b/src/sections/Projects/Sistent/index.js index d2c3b5030f663..4387ad69594f9 100644 --- a/src/sections/Projects/Sistent/index.js +++ b/src/sections/Projects/Sistent/index.js @@ -14,9 +14,9 @@ const SistentHome = () => {
    Date: Sat, 4 Oct 2025 23:14:56 +0530 Subject: [PATCH 04/23] index.js Signed-off-by: Rajesh-Nagarajan-11 Signed-off-by: jason2000-cpu --- .../Projects/Sistent/components/chip/index.js | 199 ++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 src/sections/Projects/Sistent/components/chip/index.js diff --git a/src/sections/Projects/Sistent/components/chip/index.js b/src/sections/Projects/Sistent/components/chip/index.js new file mode 100644 index 0000000000000..7ab572f10459f --- /dev/null +++ b/src/sections/Projects/Sistent/components/chip/index.js @@ -0,0 +1,199 @@ +import React from "react"; +import { navigate } from "gatsby"; +import { useLocation } from "@reach/router"; + +import { SistentThemeProvider, Chip, DesignIcon, MesheryFilterIcon } from "@sistent/sistent"; +import TabButton from "../../../../../reusecore/Button"; +import { SistentLayout } from "../../sistent-layout"; +import { Row } from "../../../../../reusecore/Layout"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +const SistentChip = () => { + const location = useLocation(); + const { isDark } = useStyledDarkMode(); + + return ( + +
    + +

    Chip

    +
    +

    + Chips are compact elements that represent an input, attribute, or action. + They allow users to enter information, make selections, filter content, or trigger actions. +

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

    + Chips are helpful elements that can be used to display selected options, + filter content, or trigger actions. They provide a clear visual representation + of discrete pieces of information and can be interactive or static depending + on the use case. +

    + +

    Types

    +
    +

    + Different types of chips serve various purposes in the user interface, + from displaying information to enabling user interaction. +

    +

    Basic Chip

    +

    + Basic chips display simple information and are typically non-interactive. + They're useful for showing tags, categories, or labels. +

    + + + + + +

    Clickable Chip

    +

    + Clickable chips respond to user interaction and can trigger actions + when clicked. They're useful for navigation or performing specific operations. +

    + + + + + +

    Deletable Chip

    +

    + Deletable chips include a delete icon that allows users to remove them. + They're commonly used for selected filters, tags, or form inputs. +

    + + + {}} /> + + + +

    Variants

    +
    +

    + Chips come in different visual styles to match various design needs + and levels of emphasis. +

    +

    Filled

    +

    + Filled chips have a solid background color and are the default variant. + They provide good contrast and visibility. +

    + + + + + +

    Outlined

    +

    + Outlined chips have a transparent background with a border. + They're useful when you need a lighter visual treatment. +

    + + + + + + +

    Sizes

    +
    +

    + Chips are available in different sizes to accommodate various use cases + and design requirements. +

    +

    Small

    +

    + Small chips are compact and work well in dense layouts or when space is limited. +

    + + + + + +

    Medium

    +

    + Medium chips are the default size and work well in most situations. +

    + + + + + + +

    + Logo chips combine icons with text labels to provide visual context + and improve user recognition of different categories or actions. +

    + + + } + style={{ paddingLeft: '4px', margin: '0 8px' }} + /> + } + style={{ paddingLeft: '4px', margin: '0 8px' }} + /> + + + +

    Colors

    +
    +

    + Chips can use different colors to convey meaning, status, or to match + your brand's color scheme. +

    + + + + + + + + + + +
    +
    +
    + ); +}; + +export default SistentChip; From da6de7b9e9ef8b87a31777875d9fb6b9c72daae6 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sat, 4 Oct 2025 23:16:07 +0530 Subject: [PATCH 05/23] eslint ifx Signed-off-by: Rajesh-Nagarajan-11 Signed-off-by: jason2000-cpu --- .../Projects/Sistent/components/chip/index.js | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/sections/Projects/Sistent/components/chip/index.js b/src/sections/Projects/Sistent/components/chip/index.js index 7ab572f10459f..bf7ba746f6ef5 100644 --- a/src/sections/Projects/Sistent/components/chip/index.js +++ b/src/sections/Projects/Sistent/components/chip/index.js @@ -159,17 +159,17 @@ const SistentChip = () => {

    - } - style={{ paddingLeft: '4px', margin: '0 8px' }} + } + style={{ paddingLeft: "4px", margin: "0 8px" }} /> - } - style={{ paddingLeft: '4px', margin: '0 8px' }} + } + style={{ paddingLeft: "4px", margin: "0 8px" }} /> @@ -182,12 +182,12 @@ const SistentChip = () => {

    - - - - - - + + + + + +
    From 5856c80e6afcc17b5b73e8a4cba737aee98c9aa1 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sat, 4 Oct 2025 23:17:17 +0530 Subject: [PATCH 06/23] code.js Signed-off-by: Rajesh-Nagarajan-11 Signed-off-by: jason2000-cpu --- .../Projects/Sistent/components/chip/code.js | 206 ++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 src/sections/Projects/Sistent/components/chip/code.js diff --git a/src/sections/Projects/Sistent/components/chip/code.js b/src/sections/Projects/Sistent/components/chip/code.js new file mode 100644 index 0000000000000..8eb4e318120b5 --- /dev/null +++ b/src/sections/Projects/Sistent/components/chip/code.js @@ -0,0 +1,206 @@ +import React from "react"; +import { navigate } from "gatsby"; +import { useLocation } from "@reach/router"; + +import { Chip, SistentThemeProvider, DesignIcon } from "@sistent/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 = [ + ` + + `, + ` + + `, + ` + {}} /> + `, + ` + + + `, + ` + + + `, + ` + } /> + `, + ` + + + + + `, +]; + +const ChipCode = () => { + const location = useLocation(); + const { isDark } = useStyledDarkMode(); + + return ( + +
    + +

    Chip

    +
    +

    + Chips are compact elements that represent an input, attribute, or action. + They allow users to enter information, make selections, filter content, or trigger actions. +

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

    + Chips can be used to display information, enable user interaction, + and provide a way to input or filter data. +

    + +

    Basic Chip

    +
    +

    The chip comes in different types: Basic, Clickable, and Deletable.

    +

    Basic Chip

    +

    + Basic chips display simple information and are typically non-interactive. + They're useful for showing tags, categories, or labels. +

    +
    +
    + + + +
    + +
    +

    Clickable Chip

    +

    + Clickable chips respond to user interaction and can trigger actions + when clicked. +

    +
    +
    + + + +
    + +
    +

    Deletable Chip

    +

    + Deletable chips include a delete icon that allows users to remove them. +

    +
    +
    + + {}} /> + +
    + +
    + +

    Variants

    +
    +

    + Chips come in different visual styles: filled and outlined. +

    +
    +
    + + + + +
    + +
    + +

    Sizes

    +
    +

    + Chips are available in different sizes: small and medium. +

    +
    +
    + + + + +
    + +
    + +

    + Chips can display icons alongside text labels for enhanced visual identification. +

    +
    +
    + + } + style={{ paddingLeft: "4px", margin: "0 8px" }} + /> + +
    + +
    + +

    Colors

    +
    +

    + Chips can use different colors to convey meaning or status. +

    +
    +
    + + + + + + +
    + +
    +
    +
    +
    + ); +}; + +export default ChipCode; From f4edb16a3451e5e2755bd7b500acca1b0a156a5c Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sat, 4 Oct 2025 23:18:29 +0530 Subject: [PATCH 07/23] guidance.js Signed-off-by: Rajesh-Nagarajan-11 Signed-off-by: jason2000-cpu --- .../Sistent/components/chip/guidance.js | 144 ++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 src/sections/Projects/Sistent/components/chip/guidance.js diff --git a/src/sections/Projects/Sistent/components/chip/guidance.js b/src/sections/Projects/Sistent/components/chip/guidance.js new file mode 100644 index 0000000000000..fae0b0515482d --- /dev/null +++ b/src/sections/Projects/Sistent/components/chip/guidance.js @@ -0,0 +1,144 @@ +import React from "react"; +import { navigate } from "gatsby"; +import { useLocation } from "@reach/router"; +import { Row } from "../../../../../reusecore/Layout"; +import { Chip, SistentThemeProvider,DesignIcon ,MesheryFilterIcon } from "@sistent/sistent"; +import { SistentLayout } from "../../sistent-layout"; + +import TabButton from "../../../../../reusecore/Button"; +import { useStyledDarkMode } from "../../../../../theme/app/useStyledDarkMode"; + +const ChipGuidance = () => { + const location = useLocation(); + const { isDark } = useStyledDarkMode(); + + return ( + +
    + +

    Chip

    +
    +

    + Chips are compact elements that represent an input, attribute, or action. + They allow users to enter information, make selections, filter content, or trigger actions. +

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

    + Chips provide a compact way to display information and enable user + interaction. They should be used thoughtfully to enhance the user + experience without overwhelming the interface. +

    + +

    Usage

    +
    +

    + Chips serve various purposes in user interfaces and can be applied + in different contexts to improve usability and information display. +

    +

    Filters

    +

    + Chips are excellent for displaying active filters in search results, + data tables, or content lists. They provide a clear visual indication + of what filters are applied and allow easy removal. +

    + + + {}} color="primary" style={{ margin: "0 8px" }} /> + + +

    Tags and Categories

    +

    + Use chips to display tags, categories, or labels associated with content. + They help users quickly understand the nature or classification of items. +

    + + + + + + + +

    Logo Chip

    +

    + Chips can display icons alongside text labels for enhanced visual identification. +

    + + + } + style={{ paddingLeft: "4px", margin: "0 8px" }} + /> + } + style={{ paddingLeft: "4px" ,margin: "0 8px" }} + /> + + +

    Status Indicators

    +

    + Use colored chips to indicate status, priority, or state of items. + The color should be meaningful and consistent with your design system. +

    + + + + + + + + +

    Best Practices

    +
    +
      +
    • Keep chips simple and easy to understand.
    • +
    • Use short, clear labels for each chip.
    • +
    • Only add icons or colors when they add real value or meaning.
    • +
    • Group related chips together for better organization.
    • +
    • Maintain consistent spacing and alignment between chips.
    • +
    • Avoid cluttering the interface with too many chips or styles.
    • +
    • Ensure interactive chips have clear hover, focus, and active states.
    • +
    • Use colors meaningfully and consistently (e.g., green for success, red for errors).
    • +
    +
    +
    +
    + ); +}; + +export default ChipGuidance; From 50c9c8798096e58cc3882390fa9ed6c4f5a4253e Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sat, 4 Oct 2025 23:19:23 +0530 Subject: [PATCH 08/23] content.js Signed-off-by: Rajesh-Nagarajan-11 Signed-off-by: jason2000-cpu --- src/sections/Projects/Sistent/components/content.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/sections/Projects/Sistent/components/content.js b/src/sections/Projects/Sistent/components/content.js index bc0e31b254ddf..a52424948f582 100644 --- a/src/sections/Projects/Sistent/components/content.js +++ b/src/sections/Projects/Sistent/components/content.js @@ -209,6 +209,13 @@ const componentsData = [ "url": "/projects/sistent/components/list", "src": "/list", }, + { + "id": 28, + "name": "Chip", + "description": "Chips are compact elements that represent an input, attribute, or action. They are often used for tags, contacts, or filters.", + "url": "/projects/sistent/components/chip", + "src": "/chip", + }, ]; module.exports = { componentsData }; From e20d31ee18ac0d706173e74c3f0c6319b81aca98 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sat, 4 Oct 2025 23:20:15 +0530 Subject: [PATCH 09/23] SistentNavigation Signed-off-by: Rajesh-Nagarajan-11 Signed-off-by: jason2000-cpu --- src/components/SistentNavigation/content.js | 98 ++++++++++++--------- 1 file changed, 55 insertions(+), 43 deletions(-) diff --git a/src/components/SistentNavigation/content.js b/src/components/SistentNavigation/content.js index bfbdb3a385faa..8d8b9ccd0b0b9 100644 --- a/src/components/SistentNavigation/content.js +++ b/src/components/SistentNavigation/content.js @@ -37,10 +37,17 @@ export const content = [ { id: 26, link: "/projects/sistent/components/button-group/guidance", text: "Button Group" }, { id: 27, link: "/projects/sistent/components/button-group/code", text: "Button Group" }, + { id: 25, link: "/projects/sistent/components/chip", text: "Chip" }, + { id: 26, link: "/projects/sistent/components/chip/guidance", text: "Chip" }, + { id: 27, link: "/projects/sistent/components/chip/code", text: "Chip" }, + { id: 28, link: "/projects/sistent/components/circularprogress", text: "Circular Progress" }, { id: 29, link: "/projects/sistent/components/circularprogress/guidance", text: "Circular Progress" }, { id: 30, link: "/projects/sistent/components/circularprogress/code", text: "Circular Progress" }, + { id: 31, link: "/projects/sistent/components/container", text: "Container" }, + { id: 32, link: "/projects/sistent/components/container/guidance", text: "Container" }, + { id: 33, link: "/projects/sistent/components/container/code", text: "Container" }, { id: 31, link: "/projects/sistent/components/container", text: "Container" }, { id: 32, link: "/projects/sistent/components/container/guidance", text: "Container" }, { id: 33, link: "/projects/sistent/components/container/code", text: "Container" }, @@ -49,60 +56,65 @@ export const content = [ { id: 35, link: "/projects/sistent/components/dialog/guidance", text: "Dialog" }, { id: 36, link: "/projects/sistent/components/dialog/code", text: "Dialog" }, - { id: 37, link: "/projects/sistent/components/icons", text: "Icons" }, + { id: 37, link: "/projects/sistent/components/grid", text: "Grid" }, + { id: 38, link: "/projects/sistent/components/grid/guidance", text: "Grid" }, + { id: 39, link: "/projects/sistent/components/grid/code", text: "Grid" }, + + { id: 40, link: "/projects/sistent/components/icons", text: "Icons" }, + + { id: 41, link: "/projects/sistent/components/link", text: "Link" }, + { id: 42, link: "/projects/sistent/components/link/guidance", text: "Link" }, + { id: 43, link: "/projects/sistent/components/link/code", text: "Link" }, - { id: 38, link: "/projects/sistent/components/link", text: "Link" }, - { id: 39, link: "/projects/sistent/components/link/guidance", text: "Link" }, - { id: 40, link: "/projects/sistent/components/link/code", text: "Link" }, - { id: 38, link: "/projects/sistent/components/link", text: "Link" }, - { id: 39, link: "/projects/sistent/components/link/guidance", text: "Link" }, - { id: 40, link: "/projects/sistent/components/link/code", text: "Link" }, + { id: 44, link: "/projects/sistent/components/list", text: "List" }, + { id: 45, link: "/projects/sistent/components/list/guidance", text: "List" }, + { id: 46, link: "/projects/sistent/components/list/code", text: "List" }, - { id: 41, link: "/projects/sistent/components/modal", text: "Modal" }, - { id: 42, link: "/projects/sistent/components/modal/guidance", text: "Modal" }, - { id: 43, link: "/projects/sistent/components/modal/code", text: "Modal" }, + { id: 47, link: "/projects/sistent/components/modal", text: "Modal" }, + { id: 48, link: "/projects/sistent/components/modal/guidance", text: "Modal" }, + { id: 49, link: "/projects/sistent/components/modal/code", text: "Modal" }, - { id: 44, link: "/projects/sistent/components/pagination", text: "Pagination" }, - { id: 45, link: "/projects/sistent/components/pagination/guidance", text: "Pagination" }, - { id: 46, link: "/projects/sistent/components/pagination/code", text: "Pagination" }, + { id: 50, link: "/projects/sistent/components/pagination", text: "Pagination" }, + { id: 51, link: "/projects/sistent/components/pagination/guidance", text: "Pagination" }, + { id: 52, link: "/projects/sistent/components/pagination/code", text: "Pagination" }, - { id: 47, link: "/projects/sistent/components/paper", text: "Paper" }, - { id: 48, link: "/projects/sistent/components/paper/guidance", text: "Paper" }, - { id: 49, link: "/projects/sistent/components/paper/code", text: "Paper" }, + { id: 53, link: "/projects/sistent/components/paper", text: "Paper" }, + { id: 54, link: "/projects/sistent/components/paper/guidance", text: "Paper" }, + { id: 55, link: "/projects/sistent/components/paper/code", text: "Paper" }, - { id: 50, link: "/projects/sistent/components/popper", text: "Popper" }, - { id: 51, link: "/projects/sistent/components/popper/guidance", text: "Popper" }, - { id: 52, link: "/projects/sistent/components/popper/code", text: "Popper" }, + { id: 56, link: "/projects/sistent/components/popper", text: "Popper" }, + { id: 57, link: "/projects/sistent/components/popper/guidance", text: "Popper" }, + { id: 58, link: "/projects/sistent/components/popper/code", text: "Popper" }, - { id: 53, link: "/projects/sistent/components/radiogroup", text: "RadioGroup" }, - { id: 54, link: "/projects/sistent/components/radiogroup/guidance", text: "RadioGroup" }, - { id: 55, link: "/projects/sistent/components/radiogroup/code", text: "RadioGroup" }, + { id: 59, link: "/projects/sistent/components/radiogroup", text: "RadioGroup" }, + { id: 60, link: "/projects/sistent/components/radiogroup/guidance", text: "RadioGroup" }, + { id: 61, link: "/projects/sistent/components/radiogroup/code", text: "RadioGroup" }, - { id: 56, link: "/projects/sistent/components/select", text: "Select" }, - { id: 57, link: "/projects/sistent/components/select/guidance", text: "Select" }, - { id: 58, link: "/projects/sistent/components/select/code", text: "Select" }, + { id: 62, link: "/projects/sistent/components/select", text: "Select" }, + { id: 63, link: "/projects/sistent/components/select/guidance", text: "Select" }, + { id: 64, link: "/projects/sistent/components/select/code", text: "Select" }, - { id: 59, link: "/projects/sistent/components/switch", text: "Switch" }, - { id: 60, link: "/projects/sistent/components/switch/guidance", text: "Switch" }, - { id: 61, link: "/projects/sistent/components/switch/code", text: "Switch" }, + { id: 65, link: "/projects/sistent/components/switch", text: "Switch" }, + { id: 66, link: "/projects/sistent/components/switch/guidance", text: "Switch" }, + { id: 67, link: "/projects/sistent/components/switch/code", text: "Switch" }, - { id: 62, link: "/projects/sistent/components/tabs", text: "Tabs" }, - { id: 63, link: "/projects/sistent/components/tabs/guidance", text: "Tabs" }, - { id: 64, link: "/projects/sistent/components/tabs/code", text: "Tabs" }, + { id: 68, link: "/projects/sistent/components/tabs", text: "Tabs" }, + { id: 69, link: "/projects/sistent/components/tabs/guidance", text: "Tabs" }, + { id: 70, link: "/projects/sistent/components/tabs/code", text: "Tabs" }, - { id: 65, link: "/projects/sistent/components/text-field", text: "Text Field" }, - { id: 66, link: "/projects/sistent/components/text-field/guidance", text: "Text Field" }, - { id: 67, link: "/projects/sistent/components/text-field/code", text: "Text Field" }, + { id: 71, link: "/projects/sistent/components/text-field", text: "Text Field" }, + { id: 72, link: "/projects/sistent/components/text-field/guidance", text: "Text Field" }, + { id: 73, link: "/projects/sistent/components/text-field/code", text: "Text Field" }, - { id: 68, link: "/projects/sistent/components/text-input", text: "Text Input" }, - { id: 69, link: "/projects/sistent/components/text-input/guidance", text: "Text Input" }, - { id: 70, link: "/projects/sistent/components/text-input/code", text: "Text Input" }, + { id: 74, link: "/projects/sistent/components/text-input", text: "Text Input" }, + { id: 75, link: "/projects/sistent/components/text-input/guidance", text: "Text Input" }, + { id: 76, link: "/projects/sistent/components/text-input/code", text: "Text Input" }, - { id: 71, link: "/projects/sistent/components/toolbar", text: "Toolbar" }, - { id: 72, link: "/projects/sistent/components/toolbar/guidance", text: "Toolbar" }, - { id: 73, link: "/projects/sistent/components/toolbar/code", text: "Toolbar" }, + { id: 77, link: "/projects/sistent/components/toolbar", text: "Toolbar" }, + { id: 78, link: "/projects/sistent/components/toolbar/guidance", text: "Toolbar" }, + { id: 79, link: "/projects/sistent/components/toolbar/code", text: "Toolbar" }, - { id: 74, link: "/projects/sistent/components/tooltip", text: "Tooltip" }, - { id: 75, link: "/projects/sistent/components/tooltip/guidance", text: "Tooltip" }, - { id: 76, link: "/projects/sistent/components/tooltip/code", text: "Tooltip" }, + { id: 80, link: "/projects/sistent/components/tooltip", text: "Tooltip" }, + { id: 81, link: "/projects/sistent/components/tooltip/guidance", text: "Tooltip" }, + { id: 82, link: "/projects/sistent/components/tooltip/code", text: "Tooltip" }, ]; \ No newline at end of file From 1d29b1eedd5b9f36a09018932dad4e064729843f Mon Sep 17 00:00:00 2001 From: marblom007 <158522975+marblom007@users.noreply.github.com> Date: Tue, 7 Oct 2025 07:43:55 -0500 Subject: [PATCH 10/23] Delete src/collections/members/Aryan-Shah directory Signed-off-by: marblom007 <158522975+marblom007@users.noreply.github.com> Signed-off-by: jason2000-cpu --- .../members/Aryan-Shah/aryan-shah.webp | Bin 108043 -> 0 bytes src/collections/members/Aryan-Shah/index.mdx | 12 ------------ 2 files changed, 12 deletions(-) delete mode 100644 src/collections/members/Aryan-Shah/aryan-shah.webp delete mode 100644 src/collections/members/Aryan-Shah/index.mdx diff --git a/src/collections/members/Aryan-Shah/aryan-shah.webp b/src/collections/members/Aryan-Shah/aryan-shah.webp deleted file mode 100644 index ec8834e4402383422387800d7bf697842df9d40b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108043 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%0D6YGh4eAg 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 A Date: Wed, 8 Oct 2025 01:28:20 +0530 Subject: [PATCH 11/23] Update Lifecycle Management Docs Update Lifecycle Management Docs in Plan Comparison Signed-off-by: Divyanshi Pathak Signed-off-by: jason2000-cpu --- src/sections/Pricing/feature_data.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/sections/Pricing/feature_data.json b/src/sections/Pricing/feature_data.json index b03aa6e4db34b..6b2f8cfa2af1e 100644 --- a/src/sections/Pricing/feature_data.json +++ b/src/sections/Pricing/feature_data.json @@ -189,7 +189,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "" + "docs": "https://docs.meshery.io/guides/infrastructure-management/registering-a-connection#infrastructure-discovery" }, { "theme": "", @@ -221,7 +221,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "" + "docs": "https://docs.layer5.io/cloud/spaces/environments/" }, { "theme": "", @@ -253,7 +253,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "https://docs.layer5.io/kanvas/operator/operator-views/" + "docs": "https://docs.layer5.io/cloud/catalog/metrics/" }, { "theme": "", @@ -269,7 +269,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "" + "docs": "https://docs.layer5.io/kanvas/operator/views/#managing-views" }, { "theme": "", @@ -285,7 +285,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "https://docs.layer5.io/kanvas/operator/operator-views/#5-export-a-view" + "docs": "https://docs.layer5.io/kanvas/operator/views/#5-export-a-view" }, { "theme": "", @@ -301,7 +301,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "https://docs.layer5.io/kanvas/operator/operator-views/#3-share-a-view" + "docs": "https://docs.layer5.io/kanvas/operator/views/#3-share-a-view" }, { "theme": "", @@ -317,7 +317,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "" + "docs": "https://docs.layer5.io/kanvas/operator/#understanding-log-streamer" }, { "theme": "", @@ -333,7 +333,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "" + "docs": "https://docs.meshery.io/installation/kubernetes" }, { "theme": "", @@ -349,7 +349,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "" + "docs": "https://docs.meshery.io/concepts/architecture/meshsync#meshsync-1" }, { "theme": "", @@ -1183,4 +1183,4 @@ }, "docs": "" } -] \ No newline at end of file +] From 8c4c98b2c0bf4249bf9b88a612ed19c3b8e647b9 Mon Sep 17 00:00:00 2001 From: Varad Gupta <114755221+vr-varad@users.noreply.github.com> Date: Tue, 2 Sep 2025 05:39:00 +0000 Subject: [PATCH 12/23] Fix: Broken Links on Members and Handbook Signed-off-by: Varad Gupta <114755221+vr-varad@users.noreply.github.com> Signed-off-by: jason2000-cpu --- src/sections/General/Footer/index.js | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/sections/General/Footer/index.js b/src/sections/General/Footer/index.js index 6aabda0c3a0db..32a0786adcc7e 100644 --- a/src/sections/General/Footer/index.js +++ b/src/sections/General/Footer/index.js @@ -11,7 +11,7 @@ const Footer = ({ location }) => { var currentYear = new Date().getFullYear(); const getUrl = (pathname) => { - //remove ".html" that results in live production build + // remove ".html" that results in live production build if (pathname.endsWith(".html")) { pathname = pathname.replace(".html", ""); } @@ -28,6 +28,7 @@ const Footer = ({ location }) => { "/resources", "/learn", ]; + const test = { mdx: function (path) { let returnPath = ""; @@ -50,22 +51,36 @@ const Footer = ({ location }) => { }) && `src/collections${returnPath}` ); }, + learningPath: function (path) { return ( path.startsWith("/learn/learning-paths/") && `content-learn${pathname.replace("learn/learning-paths/", "")}` ); }, + + communityMember: function (path) { + if (path.startsWith("/community/members/")) { + const memberId = path.replace("/community/members/", ""); + return `src/collections/members/${memberId}/index.mdx`; + } + return null; + }, }; + if (pathname.startsWith("/community/handbook/")) { + const page = pathname.replace("/community/handbook/", ""); + return `https://github.com/layer5io/layer5/blob/master/src/pages/community/handbook/${page}.js`; + } + return test.mdx(pathname) ? `https://github.com/layer5io/layer5/tree/master/${test.mdx(pathname)}` : test.learningPath(pathname) - ? `https://github.com/layer5io/layer5/tree/master/${test.learningPath( - pathname - )}` - : `https://github.com/layer5io/layer5/blob/master/src/pages${pathname == "/" ? "" : pathname - }${indexUrl.some((str) => pathname.endsWith(str)) ? "/index" : ""}.js`; + ? `https://github.com/layer5io/layer5/tree/master/${test.learningPath(pathname)}` + : test.communityMember(pathname) + ? `https://github.com/layer5io/layer5/blob/master/${test.communityMember(pathname)}` + : `https://github.com/layer5io/layer5/blob/master/src/pages${pathname == "/" ? "" : pathname + }${indexUrl.some((str) => pathname.endsWith(str)) ? "/index" : ""}.js`; }; return ( From c9763acfadebb70a2448caafa715091b04620e54 Mon Sep 17 00:00:00 2001 From: B_Kishore <85435355+kishore08-07@users.noreply.github.com> Date: Mon, 29 Sep 2025 15:58:39 +0000 Subject: [PATCH 13/23] fix: improve homepage banner-1 responsiveness for mobile by resizing/repositioning SVG and reducing dead space Signed-off-by: B_Kishore <85435355+kishore08-07@users.noreply.github.com> Signed-off-by: jason2000-cpu --- src/sections/Home/Banner-1/banner1.style.js | 25 ++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/sections/Home/Banner-1/banner1.style.js b/src/sections/Home/Banner-1/banner1.style.js index 6c89964224446..11faf7ca642a2 100644 --- a/src/sections/Home/Banner-1/banner1.style.js +++ b/src/sections/Home/Banner-1/banner1.style.js @@ -16,7 +16,30 @@ const Banner1SectionWrapper = styled.section` top: -10%; width: 25%; min-height: 150%; - height: auto; /* Ensure proper scaling */ + height: auto; + z-index: 1; + } + @media only screen and (max-width: 760px) { + min-height: 320px; + padding: 1.2rem 0 1.5rem 0; + .background-svg { + width: 45vw; + min-height: 60vw; + top: 10px; + right: -10vw; + opacity: 0.7; + } + } + @media only screen and (max-width: 480px) { + min-height: 220px; + padding: 0.7rem 0 1rem 0; + .background-svg { + width: 60vw; + min-height: 40vw; + top: 30px; + right: -18vw; + opacity: 0.5; + } } p { font-size: 21px; From 6ea3d113ba55c9dd3c04f320b074a238e3655f52 Mon Sep 17 00:00:00 2001 From: B_Kishore <85435355+kishore08-07@users.noreply.github.com> Date: Mon, 29 Sep 2025 17:50:12 +0000 Subject: [PATCH 14/23] fix:improve homepage banner-4 responsiveness for mobile by reducing dead space Signed-off-by: B_Kishore <85435355+kishore08-07@users.noreply.github.com> Signed-off-by: jason2000-cpu --- src/sections/Home/Banner-4/banner4.style.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/sections/Home/Banner-4/banner4.style.js b/src/sections/Home/Banner-4/banner4.style.js index 14eb5351c9518..116d05b9d0f4c 100644 --- a/src/sections/Home/Banner-4/banner4.style.js +++ b/src/sections/Home/Banner-4/banner4.style.js @@ -6,6 +6,22 @@ const Banner1SectionWrapper = styled.section` position: relative; /* Add position for better layout control */ width: 100%; /* Add explicit width */ padding: 7rem 0; /* Add explicit padding to maintain consistent spacing */ + @media only screen and (max-width: 767px) { + min-height: 320px; + padding: 1.2rem 0 1.5rem 0; + .video-wrapper { + width: 100%; + padding-bottom: 56.25%; /* Maintain 16:9 aspect ratio */ + } + } + @media only screen and (max-width: 480px) { + min-height: 180px; + padding: 0.7rem 0 1rem 0; + .video-wrapper { + width: 100%; + padding-bottom: 60%; + } + } p { font-size: 21px; From 1dabe92798593b88127af41aeb203dc6efba998a Mon Sep 17 00:00:00 2001 From: B_Kishore <85435355+kishore08-07@users.noreply.github.com> Date: Mon, 29 Sep 2025 17:59:53 +0000 Subject: [PATCH 15/23] fix:improve homepage banner-2 responsiveness for mobile by repositioning svg and reducing dead space Signed-off-by: B_Kishore <85435355+kishore08-07@users.noreply.github.com> Signed-off-by: jason2000-cpu --- src/sections/Home/Banner-2/banner2.style.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/sections/Home/Banner-2/banner2.style.js b/src/sections/Home/Banner-2/banner2.style.js index a0f072640a86f..04739f9b9cadf 100644 --- a/src/sections/Home/Banner-2/banner2.style.js +++ b/src/sections/Home/Banner-2/banner2.style.js @@ -12,6 +12,18 @@ const Banner2SectionWrapper = styled.section` background-color: ${props => props.theme.body}; transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); min-height: 600px; /* Add explicit min-height */ + @media only screen and (max-width: 760px) { + min-height: 320px; + padding: 1.2rem 0 1.5rem 0; + background-position: bottom 60px right 5px, bottom right; + background-size: 18%, 15%; + } + @media only screen and (max-width: 480px) { + min-height: 180px; + padding: 0.7rem 0 1rem 0; + background-position: bottom 30px right 2px, bottom 10px right; + background-size: 13%, 10%; + } position: relative; /* Add position for better layout control */ width: 100%; /* Add explicit width */ From f8bd90e2497956fe2b052fbfcb0f717cb74987d0 Mon Sep 17 00:00:00 2001 From: B_Kishore <85435355+kishore08-07@users.noreply.github.com> Date: Tue, 30 Sep 2025 18:10:34 +0000 Subject: [PATCH 16/23] fix issue:#6888 eliminated home page dead space in mobile view Signed-off-by: B_Kishore <85435355+kishore08-07@users.noreply.github.com> Signed-off-by: jason2000-cpu --- src/sections/Home/Banner-1/banner1.style.js | 25 +-------------------- src/sections/Home/Banner-2/banner2.style.js | 12 ---------- src/sections/Home/Banner-4/banner4.style.js | 16 ------------- 3 files changed, 1 insertion(+), 52 deletions(-) diff --git a/src/sections/Home/Banner-1/banner1.style.js b/src/sections/Home/Banner-1/banner1.style.js index 11faf7ca642a2..6c89964224446 100644 --- a/src/sections/Home/Banner-1/banner1.style.js +++ b/src/sections/Home/Banner-1/banner1.style.js @@ -16,30 +16,7 @@ const Banner1SectionWrapper = styled.section` top: -10%; width: 25%; min-height: 150%; - height: auto; - z-index: 1; - } - @media only screen and (max-width: 760px) { - min-height: 320px; - padding: 1.2rem 0 1.5rem 0; - .background-svg { - width: 45vw; - min-height: 60vw; - top: 10px; - right: -10vw; - opacity: 0.7; - } - } - @media only screen and (max-width: 480px) { - min-height: 220px; - padding: 0.7rem 0 1rem 0; - .background-svg { - width: 60vw; - min-height: 40vw; - top: 30px; - right: -18vw; - opacity: 0.5; - } + height: auto; /* Ensure proper scaling */ } p { font-size: 21px; diff --git a/src/sections/Home/Banner-2/banner2.style.js b/src/sections/Home/Banner-2/banner2.style.js index 04739f9b9cadf..a0f072640a86f 100644 --- a/src/sections/Home/Banner-2/banner2.style.js +++ b/src/sections/Home/Banner-2/banner2.style.js @@ -12,18 +12,6 @@ const Banner2SectionWrapper = styled.section` background-color: ${props => props.theme.body}; transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); min-height: 600px; /* Add explicit min-height */ - @media only screen and (max-width: 760px) { - min-height: 320px; - padding: 1.2rem 0 1.5rem 0; - background-position: bottom 60px right 5px, bottom right; - background-size: 18%, 15%; - } - @media only screen and (max-width: 480px) { - min-height: 180px; - padding: 0.7rem 0 1rem 0; - background-position: bottom 30px right 2px, bottom 10px right; - background-size: 13%, 10%; - } position: relative; /* Add position for better layout control */ width: 100%; /* Add explicit width */ diff --git a/src/sections/Home/Banner-4/banner4.style.js b/src/sections/Home/Banner-4/banner4.style.js index 116d05b9d0f4c..14eb5351c9518 100644 --- a/src/sections/Home/Banner-4/banner4.style.js +++ b/src/sections/Home/Banner-4/banner4.style.js @@ -6,22 +6,6 @@ const Banner1SectionWrapper = styled.section` position: relative; /* Add position for better layout control */ width: 100%; /* Add explicit width */ padding: 7rem 0; /* Add explicit padding to maintain consistent spacing */ - @media only screen and (max-width: 767px) { - min-height: 320px; - padding: 1.2rem 0 1.5rem 0; - .video-wrapper { - width: 100%; - padding-bottom: 56.25%; /* Maintain 16:9 aspect ratio */ - } - } - @media only screen and (max-width: 480px) { - min-height: 180px; - padding: 0.7rem 0 1rem 0; - .video-wrapper { - width: 100%; - padding-bottom: 60%; - } - } p { font-size: 21px; From d575e1890270a30a282a943e4d5efef67e3c2e01 Mon Sep 17 00:00:00 2001 From: B_Kishore <85435355+kishore08-07@users.noreply.github.com> Date: Tue, 30 Sep 2025 18:18:03 +0000 Subject: [PATCH 17/23] fix issue:#6888 eliminated home page dead space in mobile view Signed-off-by: B_Kishore <85435355+kishore08-07@users.noreply.github.com> Signed-off-by: jason2000-cpu --- src/sections/Home/Banner-1/banner1.style.js | 20 ++++++++++++++++++-- src/sections/Home/Banner-2/banner2.style.js | 18 +++++++++--------- src/sections/Home/Banner-4/banner4.style.js | 12 ++++++++++++ 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/sections/Home/Banner-1/banner1.style.js b/src/sections/Home/Banner-1/banner1.style.js index 6c89964224446..7cd0d095366c1 100644 --- a/src/sections/Home/Banner-1/banner1.style.js +++ b/src/sections/Home/Banner-1/banner1.style.js @@ -142,7 +142,15 @@ const Banner1SectionWrapper = styled.section` } } @media only screen and (max-width: 760px) { - padding: 2rem 0; + min-height: 320px; + padding: 1.2rem 0 1.5rem 0; + .background-svg { + width: 7.2rem; + min-height: 9.6rem; + top: 10px; + right: -1.6rem; + opacity: 0.7; + } .section-title-wrapper { min-width: 100%; } @@ -167,7 +175,15 @@ const Banner1SectionWrapper = styled.section` } } @media only screen and (max-width: 480px) { - padding: 2rem 0; + min-height: 220px; + padding: 0.7rem 0 1rem 0; + .background-svg { + width: 9.6rem; + min-height: 6.4rem; + top: 30px; + right: -2.88rem; + opacity: 0.5; + } .vintage-box{ &:before{ content: none; diff --git a/src/sections/Home/Banner-2/banner2.style.js b/src/sections/Home/Banner-2/banner2.style.js index a0f072640a86f..64ab0df4f0dab 100644 --- a/src/sections/Home/Banner-2/banner2.style.js +++ b/src/sections/Home/Banner-2/banner2.style.js @@ -107,10 +107,10 @@ const Banner2SectionWrapper = styled.section` } } @media only screen and (max-width: 760px) { - padding: 2rem 0; - background-position: bottom 100px right 10px, bottom right; - background-size: 25%; - + min-height: 320px; + padding: 1.2rem 0 1.5rem 0; + background-position: bottom 60px right 5px, bottom right; + background-size: 2.88rem, 2.4rem; .section-title { h1 { margin: 0rem; } } @@ -127,10 +127,10 @@ const Banner2SectionWrapper = styled.section` } @media only screen and (max-width: 480px) { - padding: 2rem 0; - background-position: bottom 230px right 20px, bottom 180px right; - background-size: 20%; - + min-height: 180px; + padding: 0.7rem 0 1rem 0; + background-position: bottom 30px right 2px, bottom 10px right; + background-size: 2.08rem, 1.6rem; .section-title{ h1 { font-size: 35px; @@ -143,7 +143,7 @@ const Banner2SectionWrapper = styled.section` content: none; } } - } + } @media screen and (max-width: 402px) { .banner-btn.one, .banner-btn.two { diff --git a/src/sections/Home/Banner-4/banner4.style.js b/src/sections/Home/Banner-4/banner4.style.js index 14eb5351c9518..42cf1bdfb78b9 100644 --- a/src/sections/Home/Banner-4/banner4.style.js +++ b/src/sections/Home/Banner-4/banner4.style.js @@ -221,6 +221,12 @@ const Banner1SectionWrapper = styled.section` } } @media only screen and (max-width: 767px) { + min-height: 320px; + padding: 1.2rem 0 1.5rem 0; + .video-wrapper { + width: 100%; + padding-bottom: 56.25%; /* Maintain 16:9 aspect ratio */ + } .section-title-wrapper { min-width: 100%; } @@ -251,6 +257,12 @@ const Banner1SectionWrapper = styled.section` } } @media only screen and (max-width: 480px) { + min-height: 180px; + padding: 0.7rem 0 1rem 0; + .video-wrapper { + width: 100%; + padding-bottom: 60%; + } padding: 2rem 0; .vintage-box{ &:before{ From b8165780bf0c69c06f5d9be4d0d3992c136a354d Mon Sep 17 00:00:00 2001 From: Radha Sharma Date: Mon, 15 Sep 2025 13:53:39 +0530 Subject: [PATCH 18/23] fixed alignment of duration and currency switcher Signed-off-by: Radha Sharma Signed-off-by: jason2000-cpu --- src/sections/Pricing/index.js | 2 +- src/sections/Pricing/pricing.style.js | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/sections/Pricing/index.js b/src/sections/Pricing/index.js index ed24b0b2be364..dd28ea12e7317 100644 --- a/src/sections/Pricing/index.js +++ b/src/sections/Pricing/index.js @@ -107,7 +107,7 @@ const Pricing = () => {

    Plans For Every Team Size

    -
    +
    diff --git a/src/sections/Pricing/pricing.style.js b/src/sections/Pricing/pricing.style.js index e28db19fa4189..f3cf5c97cba5c 100644 --- a/src/sections/Pricing/pricing.style.js +++ b/src/sections/Pricing/pricing.style.js @@ -20,10 +20,12 @@ const PricingWrapper = styled.section` @media (min-width: 2048px) { height: 30rem; } + h1{ margin-top: -2rem; } + .header-svg { position: absolute; bottom: 0; @@ -35,7 +37,21 @@ const PricingWrapper = styled.section` color: white; text-align: center; } -} + + @media (max-width: 383px){ + height:27rem; + + .header-controls{ + flex-direction: column; + gap: 0rem; + } + + h1 { + margin-bottom: 1rem; + } + } + +} .toggle-container { display: flex; @@ -45,6 +61,11 @@ const PricingWrapper = styled.section` font-size: .9rem; gap: 10px; width: auto; + + @media (max-width: 383px){ + margin-top: 0rem; + } + } .toggle { From 265e115efee8f218cd4712f4a3a53aca49735f60 Mon Sep 17 00:00:00 2001 From: bobbysharma05 Date: Wed, 24 Sep 2025 22:15:57 +0530 Subject: [PATCH 19/23] added the meshmate feild Signed-off-by: bobbysharma05 Signed-off-by: jason2000-cpu --- src/collections/members/kelechi-nwachukwu/index.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/collections/members/kelechi-nwachukwu/index.mdx b/src/collections/members/kelechi-nwachukwu/index.mdx index 6ef9276bad477..0dea409cec986 100644 --- a/src/collections/members/kelechi-nwachukwu/index.mdx +++ b/src/collections/members/kelechi-nwachukwu/index.mdx @@ -11,6 +11,7 @@ badges: - community emeritus: yes blurb: Mesh Head +meshmate: yes status: Inactive published: true --- From aae646e37bcb4b66c5a86c82502ed01535977a7e Mon Sep 17 00:00:00 2001 From: helper-uttam Date: Mon, 6 Oct 2025 21:09:40 +0530 Subject: [PATCH 20/23] fix(image): resolve childImageSharp warnings for SVGs by spreading {...rest} on Signed-off-by: helper-uttam Signed-off-by: jason2000-cpu --- src/sections/General/Navigation/utility/image.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sections/General/Navigation/utility/image.js b/src/sections/General/Navigation/utility/image.js index bbdeea6356b65..e9491d2f41b36 100644 --- a/src/sections/General/Navigation/utility/image.js +++ b/src/sections/General/Navigation/utility/image.js @@ -6,7 +6,7 @@ const Image = ({ childImageSharp, extension, publicURL, alt, ...rest }) => { if (!childImageSharp && extension === "svg") { return (
    - {alt} + {alt}
    ); } else { From c3d7525bed0db55bfa75ac285d2e2a1490a998c3 Mon Sep 17 00:00:00 2001 From: meshery-ci Date: Wed, 8 Oct 2025 00:17:34 +0000 Subject: [PATCH 21/23] [Docs] Generated documentation for Integration Signed-off-by: l5io Signed-off-by: jason2000-cpu --- .../iam-deny-policy/icons/color/iam-deny-policy-color.svg | 5 +++++ .../iam-deny-policy/icons/white/iam-deny-policy-white.svg | 3 +++ src/collections/integrations/k8s-config-connector/index.mdx | 6 ++++++ 3 files changed, 14 insertions(+) create mode 100644 src/collections/integrations/k8s-config-connector/icons/components/iam-deny-policy/icons/color/iam-deny-policy-color.svg create mode 100644 src/collections/integrations/k8s-config-connector/icons/components/iam-deny-policy/icons/white/iam-deny-policy-white.svg diff --git a/src/collections/integrations/k8s-config-connector/icons/components/iam-deny-policy/icons/color/iam-deny-policy-color.svg b/src/collections/integrations/k8s-config-connector/icons/components/iam-deny-policy/icons/color/iam-deny-policy-color.svg new file mode 100644 index 0000000000000..913040511c88d --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/iam-deny-policy/icons/color/iam-deny-policy-color.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/collections/integrations/k8s-config-connector/icons/components/iam-deny-policy/icons/white/iam-deny-policy-white.svg b/src/collections/integrations/k8s-config-connector/icons/components/iam-deny-policy/icons/white/iam-deny-policy-white.svg new file mode 100644 index 0000000000000..d2a4a09d44fae --- /dev/null +++ b/src/collections/integrations/k8s-config-connector/icons/components/iam-deny-policy/icons/white/iam-deny-policy-white.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/collections/integrations/k8s-config-connector/index.mdx b/src/collections/integrations/k8s-config-connector/index.mdx index 6d84ef1b952d9..20b781f0a04d5 100644 --- a/src/collections/integrations/k8s-config-connector/index.mdx +++ b/src/collections/integrations/k8s-config-connector/index.mdx @@ -2678,6 +2678,12 @@ components: [ "colorIcon": "icons/components/billing-account/icons/color/billing-account-color.svg", "whiteIcon": "icons/components/billing-account/icons/white/billing-account-white.svg", "description": "", +}, +{ +"name": "iam-deny-policy", +"colorIcon": "icons/components/iam-deny-policy/icons/color/iam-deny-policy-color.svg", +"whiteIcon": "icons/components/iam-deny-policy/icons/white/iam-deny-policy-white.svg", +"description": "", }] featureList: [ "Provides a wide range of cloud services", From bb4058841d0e474521ed711ba7ee593b4e660ee8 Mon Sep 17 00:00:00 2001 From: l5io Date: Wed, 8 Oct 2025 01:40:55 +0000 Subject: [PATCH 22/23] Updated feature data from spreadsheet Signed-off-by: l5io Signed-off-by: jason2000-cpu --- src/sections/Pricing/feature_data.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/sections/Pricing/feature_data.json b/src/sections/Pricing/feature_data.json index 6b2f8cfa2af1e..b03aa6e4db34b 100644 --- a/src/sections/Pricing/feature_data.json +++ b/src/sections/Pricing/feature_data.json @@ -189,7 +189,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "https://docs.meshery.io/guides/infrastructure-management/registering-a-connection#infrastructure-discovery" + "docs": "" }, { "theme": "", @@ -221,7 +221,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "https://docs.layer5.io/cloud/spaces/environments/" + "docs": "" }, { "theme": "", @@ -253,7 +253,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "https://docs.layer5.io/cloud/catalog/metrics/" + "docs": "https://docs.layer5.io/kanvas/operator/operator-views/" }, { "theme": "", @@ -269,7 +269,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "https://docs.layer5.io/kanvas/operator/views/#managing-views" + "docs": "" }, { "theme": "", @@ -285,7 +285,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "https://docs.layer5.io/kanvas/operator/views/#5-export-a-view" + "docs": "https://docs.layer5.io/kanvas/operator/operator-views/#5-export-a-view" }, { "theme": "", @@ -301,7 +301,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "https://docs.layer5.io/kanvas/operator/views/#3-share-a-view" + "docs": "https://docs.layer5.io/kanvas/operator/operator-views/#3-share-a-view" }, { "theme": "", @@ -317,7 +317,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "https://docs.layer5.io/kanvas/operator/#understanding-log-streamer" + "docs": "" }, { "theme": "", @@ -333,7 +333,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "https://docs.meshery.io/installation/kubernetes" + "docs": "" }, { "theme": "", @@ -349,7 +349,7 @@ "teamOperator": "x", "enterprise": "x" }, - "docs": "https://docs.meshery.io/concepts/architecture/meshsync#meshsync-1" + "docs": "" }, { "theme": "", @@ -1183,4 +1183,4 @@ }, "docs": "" } -] +] \ No newline at end of file From c2070c2d5bf17111c649d55779b992e368e68e95 Mon Sep 17 00:00:00 2001 From: jason2000-cpu Date: Wed, 8 Oct 2025 21:19:42 +0300 Subject: [PATCH 23/23] added the missing badges and diaplayed badges and their information on a table w/signoff Signed-off-by: jason2000-cpu --- .env.development | 3 +- .gitconfig | 4 + .../BadgesComponent/BadgesStyledComponents.js | 34 ++ .../Handbook/BadgesComponent/BadgesTable.js | 414 ++++++++++++++---- .../Community/Handbook/recognition.js | 161 +------ 5 files changed, 362 insertions(+), 254 deletions(-) create mode 100644 .gitconfig create mode 100644 src/sections/Community/Handbook/BadgesComponent/BadgesStyledComponents.js diff --git a/.env.development b/.env.development index 232bb6de90686..404cefb45c9f2 100644 --- a/.env.development +++ b/.env.development @@ -1,2 +1 @@ -GATSBY_GRAPHQL_IDE=playground -CLOUD_API_TOKEN="your-token-here" \ No newline at end of file +GATSBY_GRAPHQL_IDE=playground \ No newline at end of file diff --git a/.gitconfig b/.gitconfig new file mode 100644 index 0000000000000..f8db4832fb783 --- /dev/null +++ b/.gitconfig @@ -0,0 +1,4 @@ +[alias] + amend = commit -s --amend + cm = commit -s -m + commit = commit -s \ No newline at end of file diff --git a/src/sections/Community/Handbook/BadgesComponent/BadgesStyledComponents.js b/src/sections/Community/Handbook/BadgesComponent/BadgesStyledComponents.js new file mode 100644 index 0000000000000..387d9b9d8c9f9 --- /dev/null +++ b/src/sections/Community/Handbook/BadgesComponent/BadgesStyledComponents.js @@ -0,0 +1,34 @@ +/* eslint-disable linebreak-style */ +import React from "react"; +import styled from "styled-components"; + + +export const StyledTable = styled.table` + width: 100%; + font-size: 0.9rem; +`; + +export const TableHeader = styled.th` + border: 1px solid #ccc; + font-weight: bold; + text-align: left; +`; + +export const TableCell = styled.td` + border: 1px solid #ccc; + padding: 8px; + width: 1rem; + vertical-align: top; +`; + +export const DescriptionCell = styled.td` + white-space: normal; + word-wrap: break-word; +`; + +export const Image = styled.img` + horizontal-align: 'center' + width: 100px; + height: 100px; + object-fit: contain; +`; diff --git a/src/sections/Community/Handbook/BadgesComponent/BadgesTable.js b/src/sections/Community/Handbook/BadgesComponent/BadgesTable.js index 3cc8233137868..93ee70a980ef1 100644 --- a/src/sections/Community/Handbook/BadgesComponent/BadgesTable.js +++ b/src/sections/Community/Handbook/BadgesComponent/BadgesTable.js @@ -1,105 +1,333 @@ /* eslint-disable linebreak-style */ -import React, { useEffect, useState } from "react"; -import MUIDataTable from "mui-datatables"; -import axios from "axios"; +import React from "react"; +import { DescriptionCell, Image, StyledTable, TableCell, TableHeader } from "./BadgesStyledComponents"; +import ApplicationPioneerLogo from "../../../../assets/images/application-pioneer/application-pioneer.svg"; +import SistentContributorLogo from "../../../../assets/images/sistent/badges/sistent-contributor.svg"; +import ImageHubLogo from "../../../../assets/images/image-hub/layer5-image-hub.svg"; +import AcademyLogo from "../../../../assets/images/academy/academy.svg"; +import MesheryOperator from "../../../../assets/images/meshery-operator/meshery-operator-dark.svg"; +import writersLogo from "../../../../assets/images/writer-program/writer-program-badge.svg"; +import ServiceMeshPerformance from "../../../../assets/images/service-mesh-performance/stacked/smp-dark-text.svg"; -function BadgesTable() { - const [badges, setBadges] = useState(); - - useEffect(() => { - async function getBadges() { - const response = await axios.get("/data.json"); - if (response.data) { - const data = response.data; - const fetchedBadges = Object.values(data.badges); - console.log("FETCHED BADGES", fetchedBadges); - setBadges(fetchedBadges); - } +const badges = [ + { + id: 1, + description: "awarded to the Layer5 cloud users when they create their first design", + imageUrl: "/images/badges/first-design.png", + label: "designpioneer", + name: "Design Pioneer" + }, + { + id: 2, + description: " awarded to the Layer5 cloud users when they create their first application.", + imageUrl: ApplicationPioneerLogo, + label: "applicationpioneer", + name: "Application Pioneer" + }, + { + id: 3, + description: "This badge is awarded upon first-time sharing one of your designs.", + imageUrl: "/images/badges/first-share.png", + label: "sharingiscaring", + name: "Sharing is Caring" + }, + { + id: 4, + description: " This badge is awarded upon the success of your first design deployment.", + imageUrl: "/images/badges/first-deployment.png", + label: "shipped", + name: "Shipped" + }, + { + id: 5, + description: "This badge is awarded upon successful execution of your first performance test.", + imageUrl: "/images/badges/need-for-speed.png", + label: "needforspeed", + name: "Need for Speed" + }, + { + id: 6, + description: "First Interactive Terminal Session - awarded the first time that you establish an interactive terminal session with a Kubernetes Pod.", + imageUrl: "/images/badges/hip-hacker.png", + label: "hiphacker", + name: "Hip Hacker" + }, + { + id: 7, + description: " First Log Streaming Session - awarded the first time that you stream logs from a Kubernetes Pod.", + imageUrl: "/images/badges/streamer.png", + label: "streamer", + name: "Streamer" + }, + { + id: 8, + description: "First Collaborator - awarded the first time a collaborator saves changes to one of your designs.", + imageUrl: "/images/badges/git-ops-with-friends.png", + label: "gitopswithfriends", + name: "GitOps with Friends" + }, + { + id: 9, + description: "awarded to the users who invite someone to Layer5 cloud.", + imageUrl: "/images/badges/bring-a-buddy.png", + label: "bringabuddy", + name: "Bring a Buddy" + }, + { + id: 10, + description: "awarded to contributors who help maintain code quality and cleanliness.", + imageUrl: "/images/badges/code-cleanup-crew.png", + label: "codecleanupcrew", + name: "Code Cleanup Crew" + }, + { + id: 11, + description: "awarded to individuals who contribute to identifying and fixing security vulnerabilities.", + imageUrl: "/images/badges/security-sentinel.png", + label: "securitysentinel", + name: "Security Sentinel" + }, + { + id: 12, + description: "awarded for long-term, sustained contributions to the project over the years.", + imageUrl: "/images/badges/longevity-legend.png", + label: "longevityledgend", + name: "Longevity Ledgend" + }, + { + id: 13, + description: "awarded to individuals who provide thorough and valuable code reviews.", + imageUrl: "/images/badges/review-rockstar.png", + label: "reviewrockstar", + name: "Review Rockstar" + }, + { + id: 14, + description: "awarded to users upon creation of their first infrastructure screenshot directly in their pull request.", + imageUrl: "/images/badges/meshmap-snapshot.png", + label: "meshmapsnapshot", + name: "Mesh Map Snapshot" + }, + { + id: 15, + description: "awarded to the community members who make consistent and impactful contributions for a long period of time in Layer5 projects in recognition and appreciation of their efforts.", + imageUrl: "/images/badges/continuous-contributor.png", + label: "continouscontributor", + name: "Continous Contributor" + }, + { + id: 16, + description: " awarded to the community members who make consistent and impactful contributions to the Sistent project as a recognition and appreciation of their efforts.", + imageUrl: SistentContributorLogo, + label: "sistentcontributor", + name: "Sistent Contributor" + }, + { + id: 17, + description: "awarded to the community members who make consistent and impactful contributions to the Image Hub project in recognition and appreciation of their efforts.", + imageUrl: ImageHubLogo, + label: "imagehub", + name: "Image Hub" + }, + { + id: 18, + description: "awarded to the community members who make consistent and impactful contributions to the Kanvas project in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer.", + imageUrl: "/images/badges/kanvas.png", + label: "kanvas", + name: "Kanvas" + }, + { + id: 19, + description: "awarded to the community members who make consistent and impactful contributions to the Cloud Native Performance project. Community members who earn this badge occasionally become a project maintainer.", + imageUrl: ServiceMeshPerformance, + label: "cloudnativeperformance", + name: "Cloud Native Performance" + }, + { + id: 20, + description: "awarded to the community members who make consistent and impactful contributions to the Layer5 Academy project in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer.", + imageUrl: AcademyLogo, + label: "academy", + name: "Academy" + }, + { + id: 21, + description: " awarded to the community members who repeatedly engage in welcoming, encouraging, and supporting other Layer5 community members. Community members who earn this badge occasionally graduate to undertaking the Community Manager role.", + imageUrl: "/images/badges/community.png", + label: "community", + name: "Community" + }, + { + id: 22, + description: "awarded to the community members who make consistent and impactful contributions to the Meshery project. Community members who earn this badge occasionally become a project maintainer.", + imageUrl: "/images/badges/meshery.png", + label: "meshery", + name: "Meshery" + }, + { + id: 23, + description: "awarded to the community members who make consistent and impactful contributions to Meshery Operator of the Meshery project in recognition and appreciation of their efforts.", + imageUrl: MesheryOperator, + label: "mesheryoperator", + name: "Meshery Operator" + }, + { + id: 24, + description: "awarded to the community members who make consistent and impactful contributions to the Cloud Native Patterns project in recognition and appreciation of their efforts.", + imageUrl: "/images/badges/patterns.png", + label: "patterns", + name: "Patterns" + }, + { + id: 25, + description: "awarded to the community members who make consistent and impactful contributions to the layer5.io website.", + imageUrl: "/images/badges/landscape.png", + label: "landscape", + name: "Landscape" + }, + { + id: 26, + description: "awarded to the community members who make with two or more published writings whether in article, blog post, project documentation or other form in recognition and appreciation of their efforts.", + imageUrl: writersLogo, + label: "writersprogram", + name: "Writer's Program" + }, + { + id: 27, + description: "awarded to the community members who make consistent and impactful contributions to the NightHawk project in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer.", + imageUrl: "/images/badges/nighthawk.png", + label: "nighthawk", + name: "Nighthawk" + }, + { + id: 28, + description: "awarded to the community members who create or improve designs for visual aspects or user flow for any of the websites, flyers, promotions, Meshery UI, and so on in recognition and appreciation of their efforts.", + imageUrl: "/images/badges/ui-ux.png", + label: "uiux", + name: "UI/UX" + }, + { + id: 29, + description: "awarded to the community members who make consistent and impactful contributions to the Meshery Catalog of Meshery project in recognition and appreciation of their efforts.", + imageUrl: "/images/badges/meshery-catalog.png", + label: "mesherycatalog", + name: "Meshery Catalog" + }, + { + id: 30, + description: "awarded to the community members who make consistent and impactful contributions to the Docker Extension of meshery project in recognition and appreciation of their efforts.", + imageUrl: "/images/badges/docker-extension.png", + label: "dockerextension", + name: "Docker Extension" + }, + { + id: 31, + description: "awarded to the community members who make consistent and impactful contributions to the Meshery docs in recognition and appreciation of their efforts.", + imageUrl: "/images/badges/meshery-docs.png", + label: "docs", + name: "Docs" + }, + { + id: 32, + description: "This badge is awarded to the contributors who contribute to any Layer5 project during Hacktoberfest 2025.", + imageUrl: "/images/badges/hacktoberfest-contributor.png", + label: "hacktoberfest25", + name: "Hacktoberfext'25 Contributor" + }, + { + id: 33, + description: "This badge is awarded to community members who actively support and guide others, embodying the spirit of collaboration and knowledge sharing in the Layer5 community.", + imageUrl: "/images/badges/meshmate.png", + label: "meshmate", + name: "MeshMate" + }, + { + id: 34, + description: "This badge is awarded to the contributors who contribute to any Layer5 project during Hacktoberfest 2024.", + imageUrl: "/images/badges/hacktoberfest24.png", + label: "hacktoberfest24", + name: "hacktoberfest'24 Contributor" + }, + { + id: 35, + description: "This is a special edition badge and it is awarded to Docker Captains.", + imageUrl: "/images/badges/docker-captain.png", + label: "dockercaptain", + name: "Docker Captain" + }, + { + id: 36, + description: "This is a special edition badge and it is awarded to CNCF Ambassadors.", + imageUrl: "/images/badges/cncf-ambassador.png", + label: "cncfambassador", + name: "CNCF Ambassador" + }, + { + id: 37, + description: "This badge is awarded to users upon establishment of a connection with Meshery GitHub App.", + imageUrl: "/images/badges/gitops-connected.png", + label: "gitopsconnected", + name: "GitOps Connected" + }, + { + id: 38, + description: "This badge is awarded to the contributors who contribute to any Layer5 project during Hacktoberfest 2023.", + imageUrl: "/images/badges/hacktoberfest24.png", + label: "hacktoberfest23", + name: "Hacktoberfest'23 Contributor" + }, + { + id: 39, + description: "This badge is awarded to the community members who make consistent and impactful contributions to the Service Mesh Performance project. Community members who earn this badge occasionally become a project maintainer.", + imageUrl: "/images/badges/smp.png", + label: "servicemeshperformance", + name: "Service Mesh Performance", + }, + { + id: 40, + description: "This badge is awarded to the community members who make consistent and impactful contributions to MeshSync in recognition and appreciation of their efforts.", + imageUrl: "/images/badges/meshsync.png", + label: "meshsync", + } - } +]; - getBadges(); - }, []); - const columns = [ - { - name: "image_url", - label: "Badge/icon", - options: { - filter: false, - sort: false, - customBodyRender: (value) => ( -
    - {typeof value === "string" ? ( - value.startsWith("http") ? ( - badge - ) : ( - {value} - ) - ) : ( - value - )} -
    - ) - } - }, - { - name: "name", - label: "Badge Name", - options: { - filter: true, - sort: true - } - }, - { - name: "org_id", - label: "Badge Key", - option: { - filter: true, - sort: true - } - }, - { - name: "description", - label: "Description", - option: { - filer: false, - sort: false, - customBodyRender: (value) => ( -
    {value}
    - ) - } - } - ]; - const options = { - filterType: "dropdown", - responsive: "standard", - selectableRows: "none", - download: false, - print: false, - viewColumns: false, - elevation: 0, - rowsPerPage: 10, - rowsPerPageOptions: [5, 10, 20, 50], - }; +function BadgesTable() { return ( -
    - -
    + + + + Badge/Icon + Badge Name + Badge Key + Description + + + <> + { + badges.map(badge => ( + ( + + + {badge.label} + + {badge.name} + + {badge.label} + + + {badge.description} + + + ) + )) + } + + ); } diff --git a/src/sections/Community/Handbook/recognition.js b/src/sections/Community/Handbook/recognition.js index ba59aac9affff..1fdb8047fd17a 100644 --- a/src/sections/Community/Handbook/recognition.js +++ b/src/sections/Community/Handbook/recognition.js @@ -3,39 +3,8 @@ import { Container } from "../../../reusecore/Layout"; import { HandbookWrapper } from "./Handbook.style"; import TOC from "../../../components/handbook-navigation/index"; import { Link } from "gatsby"; -// import CommunityLogo from "../../../assets/images/community/community-green.svg"; -// import PatternsLogo from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; -// import LandscapeGreen from "../../../assets/images/landscape/layer5_landscape_green.svg"; -// import ImageHubLogo from "../../../assets/images/image-hub/layer5-image-hub.svg"; -// import DockerExtension from "../../../assets/images/docker-extension/docker-extension-meshery-logo.svg"; -// import MesheryLogo from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; -// import MesheryOperator from "../../../assets/images/meshery-operator/meshery-operator-dark.svg"; -// import ServiceMeshPerformance from "../../../assets/images/service-mesh-performance/stacked/smp-dark-text.svg"; -// import NightHawkLogo from "../../../assets/images/nighthawk/icon-only/SVG/nighthawk-logo.svg"; import TocPagination from "../../../components/handbook-navigation/TocPagination"; import IntraPage from "../../../components/handbook-navigation/intra-page"; -// import uiuxrLogo from "../../../assets/images/uiuxr/uiuxr.svg"; -// import writersLogo from "../../../assets/images/writer-program/writer-program-badge.svg"; -// import kanvasLogo from "../../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; -// import MesheryCatalogLogo from "../../../assets/images/meshery/meshery-catalog.svg"; -// import DocsLogo from "../../../assets/images/docs/docs.svg"; -// import ApplicationPioneerLogo from "../../../assets/images/application-pioneer/application-pioneer.svg"; -// import BringABuddyLogo from "../../../assets/images/bring-a-buddy/bring-a-buddy.svg"; -// import DesignPioneerLogo from "../../../assets/images/design-pioneer/design-pioneer.svg"; -// import GitOPsWithFriendsLogo from "../../../assets/images/gitops-with-friends/gitops-with-friends.svg"; -// import HipHackerLogo from "../../../assets/images/hip-hacker/hip-hacker.svg"; -// import NeedForSpeedLogo from "../../../assets/images/need-for-speed/need-for-speed.svg"; -// import SharingIsCaringLogo from "../../../assets/images/sharing-is-caring/sharing-is-caring.svg"; -// import ShippedLogo from "../../../assets/images/shipped/shipped.svg"; -// import StreamerLogo from "../../../assets/images/streamer/streamer.svg"; -// import CodeCleanupCrewLogo from "../../../assets/images/code-cleanup-crew/code-cleanup-crew.svg"; -// import SecuritySentinelLogo from "../../../assets/images/security-sentinel/security-sentinel.png"; -// import LogevityLegendLogo from "../../../assets/images/longevity-legend/longevity-legend.svg"; -// import ReviewRockstarLogo from "../../../assets/images/review-rockstar/review-rockstar.svg"; -// import KanvasSnapshotLogo from "../../../assets/images/kanvas-snapshot/kanvas-snapshot.svg"; -// import SistentContributorLogo from "../../../assets/images/sistent/badges/sistent-contributor.svg"; -// import ContinuousContributorLogo from "../../../assets/images/continuous-contributor/continuous-contributor.svg"; -// import AcademyLogo from "../../../assets/images/academy/academy.svg"; import BadgesTable from "./BadgesComponent/BadgesTable"; @@ -112,135 +81,9 @@ const RecognitionPage = () => {

    Badges are awarded to community members who have been consistently engaged and impactful within a given area of the community or on a specific project. Every community member, whether contributing with code or not, has the opportunity to obtain any number of badges of recognition of their efforts. Community members are encouraged to collect the whole set!

    + {/* Badges Table */} - {/*
      -

      Activity badges:

      -
    • - - Design Pioneer - awarded to the Layer5 cloud users when they create their first design. -
    • -
    • - - Application Pioneer - awarded to the Layer5 cloud users when they create their first application. -
    • -
    • - - Sharing is Caring - This badge is awarded upon first-time sharing one of your designs. -
    • -
    • - - Shipped - This badge is awarded upon the success of your first design deployment. -
    • -
    • - - Need for Speed - This badge is awarded upon successful execution of your first performance test. -
    • -
    • - - Hip Hacker - First Interactive Terminal Session - awarded the first time that you establish an interactive terminal session with a Kubernetes Pod. -
    • -
    • - - Streamer - First Log Streaming Session - awarded the first time that you stream logs from a Kubernetes Pod. -
    • -
    • - - GitOps with Friends - First Collaborator - awarded the first time a collaborator saves changes to one of your designs. -
    • -
    • - - Bring a Buddy - awarded to the users who invite someone to Layer5 cloud. -
    • -
    • - - Code Cleanup Crew - awarded to contributors who help maintain code quality and cleanliness. -
    • -
    • - - Security Sentinel - awarded to individuals who contribute to identifying and fixing security vulnerabilities. -
    • -
    • - - Longevity Legend - awarded for long-term, sustained contributions to the project over the years. -
    • -
    • - - Review Rockstar - awarded to individuals who provide thorough and valuable code reviews. -
    • -
    • - - Kanvas Snapshot - awarded to users upon creation of their first infrastructure screenshot directly in their pull request. -
    • -
    • - - Continuous Contributor - awarded to the community members who make consistent and impactful contributions for a long period of time in Layer5 projects in recognition and appreciation of their efforts. -
    • -
    • - - Sistent Contributor - awarded to the community members who make consistent and impactful contributions to the Sistent project as a recognition and appreciation of their efforts. -
    • -

      Projects:

      -
    • - - Image Hub - awarded to the community members who make consistent and impactful contributions to the Image Hub project in recognition and appreciation of their efforts. -
    • -
    • - - Kanvas - awarded to the community members who make consistent and impactful contributions to the Kanvas project in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer. -
    • -
    • - - Cloud Native Performance - awarded to the community members who make consistent and impactful contributions to the Cloud Native Performance project. Community members who earn this badge occasionally become a project maintainer. -
    • -
    • - - Academy - awarded to the community members who make consistent and impactful contributions to the Layer5 Academy project in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer. -
    • -
    • - - Community - awarded to the community members who repeatedly engage in welcoming, encouraging, and supporting other Layer5 community members. Community members who earn this badge occasionally graduate to undertaking the Community Manager role. -
    • -
    • - - Meshery - awarded to the community members who make consistent and impactful contributions to the Meshery project. Community members who earn this badge occasionally become a project maintainer. -
    • -
    • - - Meshery Operator - awarded to the community members who make consistent and impactful contributions to Meshery Operator of the Meshery project in recognition and appreciation of their efforts. -
    • -
    • - - Patterns - awarded to the community members who make consistent and impactful contributions to the Cloud Native Patterns project in recognition and appreciation of their efforts. -
    • -
    • - - Landscape - awarded to the community members who make consistent and impactful contributions to the layer5.io website. -
    • -
    • - - Writer's Program - awarded to the community members who make with two or more published writings whether in article, blog post, project documentation or other form in recognition and appreciation of their efforts. -
    • -
    • - - Nighthawk - awarded to the community members who make consistent and impactful contributions to the NightHawk project in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer. -
    • -
    • - - UI/UX - awarded to the community members who create or improve designs for visual aspects or user flow for any of the websites, flyers, promotions, Meshery UI, and so on in recognition and appreciation of their efforts. -
    • -
    • - - Meshery Catalog - awarded to the community members who make consistent and impactful contributions to the Meshery Catalog of Meshery project in recognition and appreciation of their efforts. -
    • -
    • - - Docker Extension - awarded to the community members who make consistent and impactful contributions to the Docker Extension of meshery project in recognition and appreciation of their efforts. -
    • -
    • - - Docs - awarded to the community members who make consistent and impactful contributions to the Meshery docs in recognition and appreciation of their efforts. -
    • -
    */} +

    How can I Earn Badges?