fix-seo done for all pages

pull/1/head
Abhijeet Bagade 2025-06-10 15:04:33 +05:30
parent b528567844
commit 7153397800
16 changed files with 837 additions and 499 deletions

View File

@ -1,2 +1,2 @@
PUBLIC_API_KEY=1234567890abcdef PUBLIC_BUZZ_ONE_BASE_URL=https://beanstalkedu.in/api/one/v1/
PUBLIC_SECRET_KEY=my-secret-key PUBLIC_BUZZ_BASE_URL=https://beanstalkedu.in/api/

2
package-lock.json generated
View File

@ -9864,8 +9864,6 @@
}, },
"node_modules/npm/node_modules/cross-spawn/node_modules/which": { "node_modules/npm/node_modules/cross-spawn/node_modules/which": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"inBundle": true, "inBundle": true,
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {

44
public/blogs-sitemap.xml Normal file
View File

@ -0,0 +1,44 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://akadmyapp.com/blogs/guide-to-preschool-assessment-tools</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/summer-camp-activities-for-preschool</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/first-day-preschool-activities-ideas</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/lesson-plan-for-preschool-a-complete-guide</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/benefits-of-preschool-learning-games-for-early-education</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/preschool-online-learning-games-kits-apps-worksheets</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/seamless-scalability-akadmy-empowering-early-education</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/ai-tools-for-teachers</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/what-should-be-included-in-a-preschool-report-card</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/ideas-of-worksheets-for-preschool</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/power-of-early-learning-why-preschool-education-is-important</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/how-do-classroom-management-tools-help-educators</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/anecdotal-record-a-guide-for-early-childhood-educators</loc>
</url>
<url>
<loc>https://akadmyapp.com/blogs/preschool-activity-plans-that-make-learning-fun</loc>
</url>
</urlset>

View File

@ -0,0 +1,32 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://akadmyapp.com/</loc>
</url>
<url>
<loc>https://akadmyapp.com/learning-solutions-for-preschools</loc>
</url>
<url>
<loc>https://akadmyapp.com/preschool-management-solutions</loc>
</url>
<url>
<loc>https://akadmyapp.com/pricing/akadmy-platform-pricing</loc>
</url>
<url>
<loc>https://akadmyapp.com/pricing/akadmy-product-pricing</loc>
</url>
<url>
<loc>https://akadmyapp.com/interakto-coding-worksheets</loc>
</url>
<url>
<loc>https://akadmyapp.com/term-and-conditions</loc>
</url>
<url>
<loc>https://akadmyapp.com/contact-us</loc>
</url>
<url>
<loc>https://akadmyapp.com/purchase/cart</loc>
</url>
<url>
<loc>https://akadmyapp.com/about-us</loc>
</url>
</urlset>

197
public/images-sitemap.xml Normal file
View File

@ -0,0 +1,197 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://akadmyapp.com/assets/home_banner.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Home_TB.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Home_Interakto.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Home_Toddler.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/home_platform.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/home_platform2.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/interakto-coding-section3-3.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Next-Gen-Tech.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Home_parent.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Home_educator.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Home_learner.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/contact.svg</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/akademy_Logo.png</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/prime.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/specific.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/augmented.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/worksheet_4.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/worksheet_1.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/worksheet_2.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/worksheet_3.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/ReportCard.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Resources_CurriculumFocus.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Co_Curriculum.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/contact.svg</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Interakto_Understanding_world.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/interakto_literacy.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Interakto_math.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Interakto_Celebrations.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Interakto_Thinking.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Interakto_coding.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Problem_Solving.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Interakto_Perseverance.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/earth.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Fruits.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/shaps.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Letter_B.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/InteraktoCodingWithoutBG.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/InteraktoRobotics.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Family.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/babies_child.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/food.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/home.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/outside.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/animal.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Friends.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Class.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/AI-Attendance.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Buzzboard.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/observation.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Games.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/family-comunications.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Academic-Report.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/family-comunications.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Magic-Workshetets.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Academic-Report.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/home_platform.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Interakto_Coding_img.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Data-driven_Decision-making.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/developmental_Insights.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/connecting_with_Parents.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/ai_powered.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Captivating_Worksheets.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Interakto.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/TeenyBeans.webp</loc>
</url>
<url>
<loc>https://akadmyapp.com/assets/Toddlers.webp</loc>
</url>
</urlset>

View File

@ -0,0 +1,11 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://akadmyapp.com/digital-preschool-curriculum/</loc>
</url>
<url>
<loc>https://akadmyapp.com/interactive-learning-resources-for-preschool</loc>
</url>
<url>
<loc>https://akadmyapp.com/mother-toddler-program</loc>
</url>
</urlset>

4
public/robots.txt Normal file
View File

@ -0,0 +1,4 @@
User-agent: *
Allow: /
Disallow: /_DIZ_ADMIN/
Sitemap: https://akadmyapp.com/sitemap.xml

14
public/sitemap.xml Normal file
View File

@ -0,0 +1,14 @@
<sitemapindex xmlns="http://www.google.com/schemas/sitemap/0.84">
<sitemap>
<loc>https://akadmyapp.com/products-sitemap.xml</loc>
</sitemap>
<sitemap>
<loc>https://akadmyapp.com/general-sitemap.xml</loc>
</sitemap>
<sitemap>
<loc>https://akadmyapp.com/images-sitemap.xml</loc>
</sitemap>
<sitemap>
<loc>https://akadmyapp.com/blogs-sitemap.xml</loc>
</sitemap>
</sitemapindex>

View File

@ -30,9 +30,16 @@ const Blog = (props) => {
// }, [slug]); // }, [slug]);
// blog // blog
const newSchema = props.blog && props.blog.schema && props.blog?.schema.replaceAll("\n", ""); const newSchema =
const newSchema2 = props.blog && props.blog.schema2 && props.blog?.schema2.replaceAll("\n", ""); props.blog && props.blog.schema && props.blog?.schema.replaceAll("\n", "");
const newSchema3 = props.blog && props.blog.schema3 && props.blog?.schema3.replaceAll("\n", ""); const newSchema2 =
props.blog &&
props.blog.schema2 &&
props.blog?.schema2.replaceAll("\n", "");
const newSchema3 =
props.blog &&
props.blog.schema3 &&
props.blog?.schema3.replaceAll("\n", "");
// console.log("blogUrl", `https://akadmyapp.com${pathname}`); // console.log("blogUrl", `https://akadmyapp.com${pathname}`);

View File

@ -1,10 +1,10 @@
import { TOKEN_NAME } from "../utils/constants"; import { TOKEN_NAME } from "../utils/constants";
export const API_BASE_BUZZONE = import.meta.env.VITE_BUZZ_ONE_BASE_URL; export const API_BASE_BUZZONE = import.meta.env.PUBLIC_BUZZ_ONE_BASE_URL;
export const API_BASE_BUZZ = import.meta.env.VITE_BUZZ_BASE_URL; export const API_BASE_BUZZ = import.meta.env.PUBLIC_BUZZ_BASE_URL;
export const AUTH_TOKEN = () => localStorage.getItem(TOKEN_NAME); export const AUTH_TOKEN = () => localStorage.getItem(TOKEN_NAME);
export const SCHOOL_ID = () => localStorage.getItem("SCHOOL_ID"); export const SCHOOL_ID = () => localStorage.getItem("SCHOOL_ID");
console.log('TestENV', import.meta.env.PUBLIC_API_KEY); console.log("TestENV", import.meta.env.PUBLIC_BUZZ_ONE_BASE_URL);
console.log('TestENV', import.meta.env.PUBLIC_SECRET_KEY); console.log("TestENV", import.meta.env.PUBLIC_BUZZ_BASE_URL);

View File

@ -1,4 +1,4 @@
import React, { useMemo, useState } from "react"; import React, { useEffect, useMemo, useState } from "react";
import ArrowForwardOutlinedIcon from "@mui/icons-material/ArrowForwardOutlined"; import ArrowForwardOutlinedIcon from "@mui/icons-material/ArrowForwardOutlined";
import ClearIcon from "@mui/icons-material/Clear"; import ClearIcon from "@mui/icons-material/Clear";
@ -11,240 +11,259 @@ import ProductCard from "../components/ProductCard/ProductCard";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { toast } from "react-toastify"; import { toast } from "react-toastify";
import { removeItemFromCart, updatePurchase, validateCoupon } from "../../redux/purchaseSlice"; import {
getPurchaseDetails,
removeItemFromCart,
updatePurchase,
validateCoupon,
} from "../../redux/purchaseSlice";
import { getFormattedCurrency } from "../../utils"; import { getFormattedCurrency } from "../../utils";
import style from "./Cart.module.css"; import style from "./Cart.module.css";
function CartPage() { function CartPage() {
const dispatch = useDispatch(); const dispatch = useDispatch();
// const navigate = useNavigate(); // const navigate = useNavigate();
const { purchaseDetails } = useSelector(({ purchase }) => { const { purchaseDetails } = useSelector(({ purchase }) => {
return { return {
purchaseDetails: purchase.purchaseDetails, purchaseDetails: purchase.purchaseDetails,
}; };
}); });
const removeFromCart = (cartItemId) => { console.log("purchaseDetails", purchaseDetails);
if (window.confirm("Do you really want to remove this Item?")) {
dispatch(removeItemFromCart({ cartItemId }));
}
};
const changeLicenseCount = (cartItemId, licenseCount) => { const removeFromCart = (cartItemId) => {
let cartItem = purchaseDetails.cartItems.find( if (window.confirm("Do you really want to remove this Item?")) {
({ _id }) => _id === cartItemId dispatch(removeItemFromCart({ cartItemId }));
); }
cartItem = JSON.parse(JSON.stringify(cartItem)); };
if (!cartItem.additionalLicenses || cartItem.additionalLicenses.length <= 0)
return;
cartItem.additionalLicenses[0].count = licenseCount;
dispatch( const changeLicenseCount = (cartItemId, licenseCount) => {
updatePurchase({ let cartItem = purchaseDetails.cartItems.find(
cartItem, ({ _id }) => _id === cartItemId
}) );
); cartItem = JSON.parse(JSON.stringify(cartItem));
}; if (!cartItem.additionalLicenses || cartItem.additionalLicenses.length <= 0)
return;
cartItem.additionalLicenses[0].count = licenseCount;
const changeBuyOnlyLicenseFlag = (cartItemId, value) => { dispatch(
let cartItem = purchaseDetails.cartItems.find( updatePurchase({
({ _id }) => _id === cartItemId cartItem,
); })
);
};
const payload = { const changeBuyOnlyLicenseFlag = (cartItemId, value) => {
_id: cartItem._id, let cartItem = purchaseDetails.cartItems.find(
planId: cartItem.planId, ({ _id }) => _id === cartItemId
buyingOnlyLicenses: value, );
};
dispatch( const payload = {
updatePurchase({ _id: cartItem._id,
cartItem: payload, planId: cartItem.planId,
}) buyingOnlyLicenses: value,
); };
};
const changeTerm = (cartItemId, newIdx) => { dispatch(
let cartItem = purchaseDetails.cartItems.find( updatePurchase({
({ _id }) => _id === cartItemId cartItem: payload,
); })
cartItem = JSON.parse(JSON.stringify(cartItem)); );
};
cartItem.planVariantIdx = newIdx; const changeTerm = (cartItemId, newIdx) => {
let cartItem = purchaseDetails.cartItems.find(
({ _id }) => _id === cartItemId
);
cartItem = JSON.parse(JSON.stringify(cartItem));
dispatch( cartItem.planVariantIdx = newIdx;
updatePurchase({
cartItem,
})
);
};
const redirectToCheckout = () => { dispatch(
// navigate("/purchase/user_details"); updatePurchase({
window.location.href = "/purchase/user_details"; cartItem,
}; })
);
};
const [couponCode, setCouponCode] = useState(""); const redirectToCheckout = () => {
// navigate("/purchase/user_details");
window.location.href = "/purchase/user_details";
};
const applyDiscount = () => { const [couponCode, setCouponCode] = useState("");
dispatch(validateCoupon({ couponCode }))
.unwrap()
.then((res) => {
const { getOffer } = res;
let discount = { code: couponCode };
if (getOffer.type === "PERCENTAGE") discount.percentage = getOffer.amount;
else if (getOffer.type === "FLAT") discount.amount = getOffer.amount;
dispatch( const applyDiscount = () => {
updatePurchase({ dispatch(validateCoupon({ couponCode }))
discount, .unwrap()
}) .then((res) => {
); const { getOffer } = res;
setCouponCode(""); let discount = { code: couponCode };
}) if (getOffer.type === "PERCENTAGE")
.catch((err) => { discount.percentage = getOffer.amount;
toast.error(err.message); else if (getOffer.type === "FLAT") discount.amount = getOffer.amount;
});
};
const removeDiscount = () => { dispatch(
dispatch( updatePurchase({
updatePurchase({ discount,
discount: null, })
}) );
); setCouponCode("");
}; })
.catch((err) => {
toast.error(err.message);
});
};
const isCartEmpty = useMemo(() => { const removeDiscount = () => {
return purchaseDetails && purchaseDetails.currency ? false : true; dispatch(
}, [purchaseDetails]); updatePurchase({
discount: null,
})
);
};
return ( const isCartEmpty = useMemo(() => {
<div className={style.main_container}> return purchaseDetails && purchaseDetails.currency ? false : true;
<ContentWrapper> }, [purchaseDetails]);
<Header theme="DARK2" />
<div className={style.section1}>
{" "}
<p>
{!isCartEmpty
? `Your cart total is ${getFormattedCurrency(
purchaseDetails.currency,
purchaseDetails.totalCost
)}`
: "Your cart is Empty"}
</p>
<Button
variant="contained"
onClick={redirectToCheckout}
disabled={isCartEmpty}
>
Check Out{" "}
<ArrowForwardOutlinedIcon sx={{ marginLeft: "0.5rem", fontSize: 20 }} />
</Button>
</div>
<div className={style.section2}> useEffect(() => {
{purchaseDetails && dispatch(getPurchaseDetails());
purchaseDetails.cartItems && }, []);
purchaseDetails.cartItems.map((data) => (
<ProductCard
currency={purchaseDetails.currency}
data={data}
removeFromCart={removeFromCart}
changeBuyOnlyLicenseFlag={changeBuyOnlyLicenseFlag}
changeLicenseCount={changeLicenseCount}
changeTerm={changeTerm}
/>
))}
</div>
<div className={style.section3}> return (
<div> <div className={style.main_container}>
<p>Sub-total</p> <ContentWrapper>
<p className={style.price}> <Header theme="DARK2" />
{purchaseDetails <div className={style.section1}>
? getFormattedCurrency( {" "}
purchaseDetails.currency, <p>
purchaseDetails.subTotalCost {!isCartEmpty
) ? `Your cart total is ${getFormattedCurrency(
: "Nil"} purchaseDetails.currency,
</p> purchaseDetails.totalCost
</div> )}`
<div> : "Your cart is Empty"}
<p>Other taxes</p> </p>
<p className={style.price}> <Button
{purchaseDetails variant="contained"
? getFormattedCurrency( onClick={redirectToCheckout}
purchaseDetails.currency, disabled={isCartEmpty}
purchaseDetails.otherTaxesCost >
) Check Out{" "}
: "Nil"} <ArrowForwardOutlinedIcon
</p> sx={{ marginLeft: "0.5rem", fontSize: 20 }}
</div> />
<div className={style.coupon_row}> </Button>
<p>Have a discount code?</p> </div>
{purchaseDetails && purchaseDetails.discount ? (
<>
<div className={style.coupon_code}>
<span>{purchaseDetails.discount.code} </span>{" "}
<ClearIcon style={{ cursor: "pointer" }} onClick={removeDiscount} />
</div>
<p className={style.price}> <div className={style.section2}>
{getFormattedCurrency( {purchaseDetails &&
purchaseDetails.currency, purchaseDetails.cartItems &&
-purchaseDetails.discount.amount purchaseDetails.cartItems.map((data) => (
)} <ProductCard
</p> currency={purchaseDetails.currency}
</> data={data}
) : ( removeFromCart={removeFromCart}
<div className={style.coupon}> changeBuyOnlyLicenseFlag={changeBuyOnlyLicenseFlag}
<TextField changeLicenseCount={changeLicenseCount}
fullWidth changeTerm={changeTerm}
id="discount_code" />
placeholder="Discount Code" ))}
value={couponCode} </div>
onChange={(e) => {
setCouponCode(e.target.value);
}}
/>
<Button
fullWidth
variant="outlined"
disabled={!couponCode}
onClick={applyDiscount}
>
Apply
</Button>
</div>
)}
</div>
<div> <div className={style.section3}>
<p>Total</p> <div>
<p className={style.price}> <p>Sub-total</p>
{purchaseDetails <p className={style.price}>
? getFormattedCurrency( {purchaseDetails
purchaseDetails.currency, ? getFormattedCurrency(
purchaseDetails.totalCost purchaseDetails.currency,
) purchaseDetails.subTotalCost
: "Nil"} )
</p> : "Nil"}
</div> </p>
<Button </div>
variant="contained" <div>
onClick={redirectToCheckout} <p>Other taxes</p>
disabled={isCartEmpty} <p className={style.price}>
className={style.checkout} {purchaseDetails
> ? getFormattedCurrency(
Check Out{" "} purchaseDetails.currency,
<ArrowForwardOutlinedIcon sx={{ marginLeft: "0.5rem", fontSize: 20 }} /> purchaseDetails.otherTaxesCost
</Button> )
</div> : "Nil"}
</ContentWrapper> </p>
</div> </div>
); <div className={style.coupon_row}>
<p>Have a discount code?</p>
{purchaseDetails && purchaseDetails.discount ? (
<>
<div className={style.coupon_code}>
<span>{purchaseDetails.discount.code} </span>{" "}
<ClearIcon
style={{ cursor: "pointer" }}
onClick={removeDiscount}
/>
</div>
<p className={style.price}>
{getFormattedCurrency(
purchaseDetails.currency,
-purchaseDetails.discount.amount
)}
</p>
</>
) : (
<div className={style.coupon}>
<TextField
fullWidth
id="discount_code"
placeholder="Discount Code"
value={couponCode}
onChange={(e) => {
setCouponCode(e.target.value);
}}
/>
<Button
fullWidth
variant="outlined"
disabled={!couponCode}
onClick={applyDiscount}
>
Apply
</Button>
</div>
)}
</div>
<div>
<p>Total</p>
<p className={style.price}>
{purchaseDetails
? getFormattedCurrency(
purchaseDetails.currency,
purchaseDetails.totalCost
)
: "Nil"}
</p>
</div>
<Button
variant="contained"
onClick={redirectToCheckout}
disabled={isCartEmpty}
className={style.checkout}
>
Check Out{" "}
<ArrowForwardOutlinedIcon
sx={{ marginLeft: "0.5rem", fontSize: 20 }}
/>
</Button>
</div>
</ContentWrapper>
</div>
);
} }
export default CartPage; export default CartPage;

View File

@ -3,283 +3,284 @@ import { isAxiosError } from "axios";
import { axiosBuzz, axiosBuzzOne } from "../utils/axios"; import { axiosBuzz, axiosBuzzOne } from "../utils/axios";
export const getAkademyPlans = createAsyncThunk( export const getAkademyPlans = createAsyncThunk(
`COMMON/akademy/plans`, `COMMON/akademy/plans`,
async (payload) => { async (payload) => {
try { try {
const response = await axiosBuzzOne({ const response = await axiosBuzzOne({
method: "GET", method: "GET",
url: "/akademy/subscriptions/plans", url: "/akademy/subscriptions/plans",
}); });
return response.data; return response.data;
} catch (err) { } catch (err) {
console.log(err); console.log(err);
if (isAxiosError(err)) if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong"); throw new Error(err.response.data.message || "Something went wrong");
throw err; throw err;
} }
} }
); );
export const getAkademyClasses = createAsyncThunk( export const getAkademyClasses = createAsyncThunk(
`COMMON/akademy/classes`, `COMMON/akademy/classes`,
async (payload) => { async (payload) => {
try { try {
const response = await axiosBuzzOne({ const response = await axiosBuzzOne({
method: "GET", method: "GET",
url: "/akademy/bcc/school/classes", url: "/akademy/bcc/school/classes",
}); });
return response.data; return response.data;
} catch (err) { } catch (err) {
console.log(err); console.log(err);
if (isAxiosError(err)) if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong"); throw new Error(err.response.data.message || "Something went wrong");
throw err; throw err;
} }
} }
); );
export const createPurchase = createAsyncThunk( export const createPurchase = createAsyncThunk(
`PURCHASE:POST/akademy/purchase`, `PURCHASE:POST/akademy/purchase`,
async (payload) => { async (payload) => {
try { try {
const response = await axiosBuzzOne({ const response = await axiosBuzzOne({
method: "POST", method: "POST",
url: "/akademy/subscriptions/purchase", url: "/akademy/subscriptions/purchase",
}); });
return response.data; return response.data;
} catch (err) { } catch (err) {
console.log(err); console.log(err);
if (isAxiosError(err)) if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong"); throw new Error(err.response.data.message || "Something went wrong");
throw err; throw err;
} }
} }
); );
export const updatePurchase = createAsyncThunk( export const updatePurchase = createAsyncThunk(
`PURCHASE:PUT/akademy/purchase`, `PURCHASE:PUT/akademy/purchase`,
async (payload, { getState, dispatch }) => { async (payload, { getState, dispatch }) => {
const { purchase } = getState(); const { purchase } = getState();
try { try {
const response = await axiosBuzzOne({ const response = await axiosBuzzOne({
method: "PUT", method: "PUT",
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart`, url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart`,
data: payload, data: payload,
}); });
dispatch(getPurchaseDetails()); dispatch(getPurchaseDetails());
return response.data; return response.data;
} catch (err) { } catch (err) {
console.log(err); console.log(err);
if (isAxiosError(err)) if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong"); throw new Error(err.response.data.message || "Something went wrong");
throw err; throw err;
} }
} }
); );
export const removeItemFromCart = createAsyncThunk( export const removeItemFromCart = createAsyncThunk(
`PURCHASE:DELETE/akademy/purchase`, `PURCHASE:DELETE/akademy/purchase`,
async (payload, { getState, dispatch }) => { async (payload, { getState, dispatch }) => {
const { cartItemId } = payload; const { cartItemId } = payload;
const { purchase } = getState(); const { purchase } = getState();
try { try {
const response = await axiosBuzzOne({ const response = await axiosBuzzOne({
method: "DELETE", method: "DELETE",
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart/${cartItemId}`, url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart/${cartItemId}`,
data: payload, data: payload,
}); });
dispatch(getPurchaseDetails()); dispatch(getPurchaseDetails());
return response.data; return response.data;
} catch (err) { } catch (err) {
console.log(err); console.log(err);
if (isAxiosError(err)) if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong"); throw new Error(err.response.data.message || "Something went wrong");
throw err; throw err;
} }
} }
); );
export const getPurchaseDetails = createAsyncThunk( export const getPurchaseDetails = createAsyncThunk(
`PURCHASE:GET/akademy/purchase`, `PURCHASE:GET/akademy/purchase`,
async (payload, { getState }) => { async (payload, { getState }) => {
const { purchase } = getState(); const { purchase } = getState();
try { try {
const response = await axiosBuzzOne({ const response = await axiosBuzzOne({
method: "GET", method: "GET",
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart`, url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart`,
}); });
return response.data; return response.data;
} catch (err) { } catch (err) {
console.log(err); console.log(err);
if (isAxiosError(err)) if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong"); throw new Error(err.response.data.message || "Something went wrong");
throw err; throw err;
} }
} }
); );
export const initiatePayment = createAsyncThunk( export const initiatePayment = createAsyncThunk(
`PURCHASE:POST/akademy/purchase/initiatePayment`, `PURCHASE:POST/akademy/purchase/initiatePayment`,
async (payload, { getState }) => { async (payload, { getState }) => {
const { purchase } = getState(); const { purchase } = getState();
try { try {
const response = await axiosBuzzOne({ const response = await axiosBuzzOne({
method: "POST", method: "POST",
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart/checkout`, url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart/checkout`,
}); });
return response.data; return response.data;
} catch (err) { } catch (err) {
console.log(err); console.log(err);
if (isAxiosError(err)) if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong"); throw new Error(err.response.data.message || "Something went wrong");
throw err; throw err;
} }
} }
); );
export const verifyPayment = createAsyncThunk( export const verifyPayment = createAsyncThunk(
`PURCHASE:POST/akademy/purchase/verifyPayment`, `PURCHASE:POST/akademy/purchase/verifyPayment`,
async (payload) => { async (payload) => {
try { try {
const response = await axiosBuzz({ const response = await axiosBuzz({
method: "POST", method: "POST",
url: "/payments/verify", url: "/payments/verify",
data: { data: {
txnId: payload.txnId, txnId: payload.txnId,
provider: "airpay", provider: "airpay",
}, },
}); });
return response.data; return response.data;
} catch (err) { } catch (err) {
console.log(err); console.log(err);
if (isAxiosError(err)) if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong"); throw new Error(err.response.data.message || "Something went wrong");
throw err; throw err;
} }
} }
); );
export const validateCoupon = createAsyncThunk( export const validateCoupon = createAsyncThunk(
`COUPON:POST/validate`, `COUPON:POST/validate`,
async (payload) => { async (payload) => {
try { try {
const response = await axiosBuzzOne({ const response = await axiosBuzzOne({
method: "POST", method: "POST",
url: "/offer/validate-coupon", url: "/offer/validate-coupon",
data: { data: {
code: payload.couponCode, code: payload.couponCode,
}, },
}); });
return response.data; return response.data;
} catch (err) { } catch (err) {
console.log(err); console.log(err);
if (isAxiosError(err)) if (isAxiosError(err))
throw new Error(err.response.data.message || "Something went wrong"); throw new Error(err.response.data.message || "Something went wrong");
throw err; throw err;
} }
} }
); );
export const getAllTeenybeansLanguages = createAsyncThunk( export const getAllTeenybeansLanguages = createAsyncThunk(
`PURCHASE:getAllTeenybeansLanguages`, `PURCHASE:getAllTeenybeansLanguages`,
async (paylaod, { rejectWithValue }) => { async (paylaod, { rejectWithValue }) => {
try { try {
const response = await axiosBuzzOne({ const response = await axiosBuzzOne({
method: "GET", method: "GET",
url: "/akademy/bcc/user/languages", url: "/akademy/bcc/user/languages",
}); });
return response.data; return response.data;
} catch (error) { } catch (error) {
return rejectWithValue(error.response.data); return rejectWithValue(error.response.data);
} }
} }
); );
export const purchaseSlice = createSlice({ export const purchaseSlice = createSlice({
name: "purchase", name: "purchase",
initialState: { initialState: {
currency: localStorage.getItem("currency") || "INR", currency: localStorage.getItem("currency") || "INR",
planDetails: {}, planDetails: {},
planPriceDetails: { planPriceDetails: {
RETAIL_PARENT: {}, RETAIL_PARENT: {},
TUTION_EDUCATOR: {}, TUTION_EDUCATOR: {},
ENTERPRISE_SCHOOL: {}, ENTERPRISE_SCHOOL: {},
}, },
classes: [], classes: [],
purchaseId: localStorage.getItem("PURCHASE_ID"), purchaseId: localStorage.getItem("PURCHASE_ID"),
purchaseDetails: {}, purchaseDetails: {},
userDetails: userDetails:
(localStorage.getItem("USER_DETAILS") && (localStorage.getItem("USER_DETAILS") &&
JSON.parse(localStorage.getItem("USER_DETAILS"))) || JSON.parse(localStorage.getItem("USER_DETAILS"))) ||
{}, {},
statusByName: {}, statusByName: {},
teenybeansLanguages: [], teenybeansLanguages: [],
}, },
reducers: { reducers: {
clearPurchaseCart: (state, action) => { clearPurchaseCart: (state, action) => {
state.purchaseId = undefined; state.purchaseId = undefined;
localStorage.removeItem("PURCHASE_ID"); localStorage.removeItem("PURCHASE_ID");
state.purchaseDetails = {}; state.purchaseDetails = {};
state.userDetails = {}; state.userDetails = {};
localStorage.removeItem("USER_DETAILS"); localStorage.removeItem("USER_DETAILS");
///////////////////////////////////////////// /////////////////////////////////////////////
localStorage.removeItem("IS_USER_VERIFIED"); localStorage.removeItem("IS_USER_VERIFIED");
localStorage.removeItem("IS_EMAIL_OTP_SENT"); localStorage.removeItem("IS_EMAIL_OTP_SENT");
}, },
saveUserDetails: (state, action) => { saveUserDetails: (state, action) => {
state.userDetails = action.payload; state.userDetails = action.payload;
localStorage.setItem("USER_DETAILS", JSON.stringify(action.payload)); localStorage.setItem("USER_DETAILS", JSON.stringify(action.payload));
}, },
}, },
extraReducers: (builder) => { extraReducers: (builder) => {
builder.addCase(getAkademyPlans.pending, (state, action) => { builder.addCase(getAkademyPlans.pending, (state, action) => {
state.statusByName["plans"] = "pending"; state.statusByName["plans"] = "pending";
}); });
builder.addCase(getAkademyPlans.fulfilled, (state, action) => { builder.addCase(getAkademyPlans.fulfilled, (state, action) => {
state.statusByName["plans"] = "fulfilled"; state.statusByName["plans"] = "fulfilled";
action.payload.data.map((plan) => { action.payload.data.map((plan) => {
const { _id, products, productCategory } = plan; const { _id, products, productCategory } = plan;
state.planDetails[_id] = plan; state.planDetails[_id] = plan;
if (products && Array.isArray(products) && products.length == 1) { if (products && Array.isArray(products) && products.length == 1) {
state.planPriceDetails[productCategory][products[0]] = plan; state.planPriceDetails[productCategory][products[0]] = plan;
} }
}); });
}); });
builder.addCase(getAkademyPlans.rejected, (state, action) => { builder.addCase(getAkademyPlans.rejected, (state, action) => {
state.statusByName["plans"] = "rejected"; state.statusByName["plans"] = "rejected";
}); });
builder.addCase(getAkademyClasses.pending, (state, action) => { builder.addCase(getAkademyClasses.pending, (state, action) => {
state.statusByName["classes"] = "pending"; state.statusByName["classes"] = "pending";
}); });
builder.addCase(getAkademyClasses.fulfilled, (state, action) => { builder.addCase(getAkademyClasses.fulfilled, (state, action) => {
state.statusByName["classes"] = "fulfilled"; state.statusByName["classes"] = "fulfilled";
state.classes = ["IK3", "IK2", "IK1", "PG"]?.map((item) => state.classes = ["IK3", "IK2", "IK1", "PG"]?.map((item) =>
action.payload.data?.find((el) => el.name === item) action.payload.data?.find((el) => el.name === item)
); );
}); });
builder.addCase(getAkademyClasses.rejected, (state, action) => { builder.addCase(getAkademyClasses.rejected, (state, action) => {
state.statusByName["classes"] = "rejected"; state.statusByName["classes"] = "rejected";
}); });
builder.addCase(createPurchase.fulfilled, (state, action) => { builder.addCase(createPurchase.fulfilled, (state, action) => {
const purchaseId = action.payload.data._id; const purchaseId = action.payload.data._id;
state.purchaseId = purchaseId; state.purchaseId = purchaseId;
localStorage.setItem("PURCHASE_ID", purchaseId); localStorage.setItem("PURCHASE_ID", purchaseId);
}); });
builder.addCase(getPurchaseDetails.fulfilled, (state, action) => { builder.addCase(getPurchaseDetails.fulfilled, (state, action) => {
state.purchaseDetails = action.payload.data.data[0]; state.purchaseDetails = action.payload.data.data[0];
}); console.log("lookData", action.payload);
builder.addCase(getAllTeenybeansLanguages.fulfilled, (state, action) => { });
state.teenybeansLanguages = action.payload.data; builder.addCase(getAllTeenybeansLanguages.fulfilled, (state, action) => {
}); state.teenybeansLanguages = action.payload.data;
}, });
},
}); });
// Action creators are generated for each case reducer function // Action creators are generated for each case reducer function

View File

@ -6,14 +6,26 @@ export interface Props {
ogImage: string; ogImage: string;
ogUrl: string; ogUrl: string;
canonicalUrl: string; canonicalUrl: string;
newSchema1:string;
newSchema2:string;
newSchema3:string;
} }
const { title, description, keywords, ogImage, ogUrl, canonicalUrl } = Astro.props; const { title, description, keywords, ogImage, ogUrl, canonicalUrl, newSchema1, newSchema2, newSchema3 } = Astro.props;
--- ---
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-M4948JYT6C"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-M4948JYT6C');
</script>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
@ -30,6 +42,29 @@ const { title, description, keywords, ogImage, ogUrl, canonicalUrl } = Astro.pro
<meta property="og:image" content={ogImage}> <meta property="og:image" content={ogImage}>
<meta property="og:url" content={ogUrl}> <meta property="og:url" content={ogUrl}>
<meta property="og:type" content="website"> <meta property="og:type" content="website">
{newSchema1 && (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: newSchema1,
}}
/>
)}
{newSchema2 && (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: newSchema2,
}}
/>
)}{newSchema3 && (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: newSchema3,
}}
/>
)}
</head> </head>
<body> <body>
<slot /> <slot />

View File

@ -36,6 +36,6 @@ export async function getStaticPaths() {
} }
} }
--- ---
<Layout title={blogData?.title ?? 'Blog | Akademy'}> <Layout title={blogData?.title ?? 'Blog | Akademy'} description={blogData?.meta_description} canonicalUrl={`https://akadmyapp.com/blogs/${id}`} ogImage={`https://management.beanstalkedu.com/assets/${blogData?.og_img}`} ogUrl={'https://akadmyapp.com'} newSchema1={blogData?.schema1?.replaceAll("\n", "")} newSchema2={blogData?.schema2?.replaceAll("\n", "")} newSchema3={blogData?.schema3?.replaceAll("\n", "")}>
<SingleBlog client:only="react" blog={blogData} /> <SingleBlog client:only="react" blog={blogData} />
</Layout> </Layout>

View File

@ -15,6 +15,6 @@ try {
blogs = []; blogs = [];
} }
--- ---
<Layout title="Akademy Landing - Blogs"> <Layout title="aKadmy Blogs | Insights, Tips, and Trends for Early Childhood" description={'Stay updated with the latest trends, insights, and tips on early childhood education. Explore aKadmys blog for valuable resources and expert advice.'} canonicalUrl={'https://akadmyapp.com/blogs'}>
<AllBlogs client:only="react" /> <AllBlogs client:only="react" />
</Layout> </Layout>

View File

@ -991,15 +991,15 @@
resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz" resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz"
integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==
"@esbuild/linux-x64@0.21.5": "@esbuild/win32-x64@0.21.5":
version "0.21.5" version "0.21.5"
resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz" resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz"
integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
"@esbuild/linux-x64@0.25.5": "@esbuild/win32-x64@0.25.5":
version "0.25.5" version "0.25.5"
resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz" resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz"
integrity sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw== integrity sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==
"@eslint-community/eslint-utils@^4.2.0": "@eslint-community/eslint-utils@^4.2.0":
version "4.7.0" version "4.7.0"
@ -1052,29 +1052,10 @@
resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz"
integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
"@img/sharp-libvips-linux-x64@1.0.4": "@img/sharp-win32-x64@0.33.5":
version "1.0.4"
resolved "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz"
integrity sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==
"@img/sharp-libvips-linuxmusl-x64@1.0.4":
version "1.0.4"
resolved "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz"
integrity sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==
"@img/sharp-linux-x64@0.33.5":
version "0.33.5" version "0.33.5"
resolved "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz" resolved "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz"
integrity sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA== integrity sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==
optionalDependencies:
"@img/sharp-libvips-linux-x64" "1.0.4"
"@img/sharp-linuxmusl-x64@0.33.5":
version "0.33.5"
resolved "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz"
integrity sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==
optionalDependencies:
"@img/sharp-libvips-linuxmusl-x64" "1.0.4"
"@isaacs/cliui@^8.0.2": "@isaacs/cliui@^8.0.2":
version "8.0.2" version "8.0.2"
@ -1526,15 +1507,10 @@
estree-walker "^2.0.2" estree-walker "^2.0.2"
picomatch "^4.0.2" picomatch "^4.0.2"
"@rollup/rollup-linux-x64-gnu@4.42.0": "@rollup/rollup-win32-x64-msvc@4.42.0":
version "4.42.0" version "4.42.0"
resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.42.0.tgz" resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.42.0.tgz"
integrity sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw== integrity sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==
"@rollup/rollup-linux-x64-musl@4.42.0":
version "4.42.0"
resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.42.0.tgz"
integrity sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==
"@shikijs/core@3.6.0": "@shikijs/core@3.6.0":
version "3.6.0" version "3.6.0"