docs: 100 students milestone (#449)

* write blog post

* add link to dblocked

* improve blog SEO

* fix build error

* fix overide metatags issue
This commit is contained in:
Rotimi Best
2024-08-25 21:35:59 +01:00
committed by GitHub
parent a702fdd4e2
commit 1b84d98398
15 changed files with 301 additions and 142 deletions
+3 -1
View File
@@ -26,11 +26,13 @@
},
"type": "module",
"dependencies": {
"just-extend": "^6.2.0",
"posthog-node": "^3.1.3",
"rehype-slug": "^6.0.0",
"remark-toc": "^9.0.0",
"remark-unwrap-images": "^4.0.0",
"shared": "workspace:*",
"shiki": "^0.14.7"
"shiki": "^0.14.7",
"svelte-meta-tags": "^3.1.2"
}
}
+4 -4
View File
@@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<meta name="theme-color" content="#333333" />
<title>ClassroomIO –&nbsp;Launch Your Online Bootcamp In Minutes</title>
<!-- <title>ClassroomIO –&nbsp;Launch Your Online Bootcamp In Minutes</title>
<meta name="description" content="ClassroomIO" />
<meta name="application-name" content="ClassroomIO" />
<meta name="apple-mobile-web-app-title" content="ClassroomIO" />
<meta name="theme-color" content="#ffffff" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> -->
<!-- Facebook Meta Tags -->
<meta property="og:url" content="https://www.classroomio.com/" />
<!-- <meta property="og:url" content="https://www.classroomio.com/" />
<meta property="og:image" itemprop="image" content="https://classroomio.com/classroomio-opengraph-image.png" />
<meta property="og:title" content="ClassroomIO –&nbsp;Launch Your Online Bootcamp In Minutes" />
<meta property="og:description"
@@ -33,7 +33,7 @@
<meta name="twitter:title" content="ClassroomIO –&nbsp;Launch Your Online Bootcamp In Minutes" />
<meta name="twitter:description"
content="Launch your bootcamp quickly and affordably with ClassroomIO, the customizable online teaching platform." />
<meta name="twitter:image" content="https://classroomio.com/classroomio-opengraph-image.png" />
<meta name="twitter:image" content="https://classroomio.com/classroomio-opengraph-image.png" /> -->
<!-- <link rel="stylesheet" href="global.css"> -->
<link rel="manifest" href="/manifest.json" crossorigin="use-credentials" />
@@ -1,6 +1,7 @@
---
title: 'Google Open Source Peer Bonus'
description: 'I am happy to announce that we were selected for the 2024 Google Peer Open Source Bonus'
imageUrl: 'https://assets.cdn.clsrio.com/blog/google-os-peer-bonus-classroomio.png'
date: '2024-05-25'
author: Rotimi Best
avatar: /blog/best.jpg
@@ -0,0 +1,41 @@
---
title: 'Our first customer to hit 100 students'
description: 'Paranv Singhal, a Web3 instructor, is the first customer to hit 100 students on ClassroomIO.'
imageUrl: 'https://assets.cdn.clsrio.com/blog/pranav-web3-bootcamp-hit-100students.png'
date: '2024-08-25'
author: Rotimi Best
avatar: /blog/best.jpg
role: Founder
tags: ['Customers', 'Testimonials']
published: true
---
![pranav-web3-bootcamp-hit-100students](https://assets.cdn.clsrio.com/blog/pranav-web3-bootcamp-hit-100students.png)
_Paranv Singhal, a ClassroomIO customer hits 100 students in his Web3 bootcamp._
Today is an exciting day for both Pranav and me.
A few months ago, Pranav reached out to share his idea for a Web3 course he's been working on. He wanted to share it with as many Web3 enthusiasts as possible.
He started building the course site using Framer, but he told me it was becoming quite expensive. He had to create a template, install plugins, and each of these had its own monthly cost.
He then asked me how much it would cost to launch his course on ClassroomIO.I replied that we only have one paid plan, which costs a flat fee of $35 per month or $350 per year. This plan includes many features, such as 10,000 students, unlimited collaborators, Slack support, and much more.
It was a no-brainer for him, and long story short, Pranav is a happy customer with over 100 students.
Here is what he has to say:
![pranav-experience-using-classroomio](https://assets.cdn.clsrio.com/blog/review-by-pranav.jpeg)
_Pranav's experience using ClassroomIO_
> ClassroomIO really helped me [bootstrap my program](https://dblocked.io/).
>
> The dashboard is extremely intuitive. I could navigate most of it without any help / support. Coming from framer, I can honestly say that I am extremely greatful that I found ClassroomIO.
>
> PS- Rotimi is also extremely supportive in new feature requests. I love how responsive he is towards all feedback
Are you looking to launch your course or bootcamp? Register for a free account today and start building.
<div class="flex justify-center">
<a href="https://app.classroomio.com/login" target="_blank" nofollow="nofollow" class="bg-black text-white px-4 py-2 rounded-md">Register for free</a>
</div>
@@ -1,15 +1,21 @@
<script>
import { page } from '$app/stores';
import { MetaTags } from 'svelte-meta-tags';
import Navigation from '$lib/Navigation/Navigation.svelte';
import Footer from '$lib/Footer/Footer.svelte';
import PageTransition from './transition.svelte';
import NotFound from '$lib/NotFound/NotFound.svelte';
import extend from 'just-extend';
import '../app.css';
export let data;
$: metaTags = extend(true, {}, data.baseMetaTags, $page.data.pageMetaTags);
</script>
<MetaTags {...metaTags} />
<div class="overflow-hidden">
<Navigation />
@@ -1,7 +1,50 @@
import type { MetaTagsProps } from 'svelte-meta-tags';
export const prerender = true;
export function load({ url }) {
return {
baseMetaTags: getBaseMetaTags(url),
url: url.pathname
};
}
function getBaseMetaTags(url: URL) {
const metatags = Object.freeze({
title: 'ClassroomIO – Launch Your Online Bootcamp In Minutes',
description:
'Launch your bootcamp quickly and affordably with ClassroomIO, the customizable online teaching platform.',
canonical: new URL(url.pathname, url.origin).href,
openGraph: {
type: 'website',
url: new URL(url.pathname, url.origin).href,
locale: 'en_IE',
title: 'ClassroomIO – Launch Your Online Bootcamp In Minutes',
description:
'Launch your bootcamp quickly and affordably with ClassroomIO, the customizable online teaching platform.',
siteName: 'ClassroomIO',
images: [
{
url: 'https://classroomio.com/classroomio-opengraph-image.png',
alt: 'ClassroomIO OG Image',
width: 1920,
height: 1080,
secureUrl: 'https://classroomio.com/classroomio-opengraph-image.png',
type: 'image/jpeg'
}
]
},
twitter: {
handle: '@classroomio',
site: '@classroomio',
cardType: 'summary_large_image' as const,
title: 'ClassroomIO – Launch Your Online Bootcamp In Minutes',
description:
'Launch your bootcamp quickly and affordably with ClassroomIO, the customizable online teaching platform.',
image: 'https://classroomio.com/classroomio-opengraph-image.png',
imageAlt: 'ClassroomIO OG Image'
}
}) satisfies MetaTagsProps;
return metatags;
}
@@ -43,7 +43,7 @@
<a href={`/blog/${post.slug}`} class="group">
<p class="font-bold text-lg py-2 group-hover:text-slate-500">{post.title}</p>
<p class="text-slate-500 py-4">{post.description}</p>
<p class="text-slate-500 pt-2 pb-4">{post.description}</p>
</a>
<div class="flex items-center justify-start gap-4 my-2">
@@ -6,26 +6,6 @@
export let data;
</script>
<!-- SEO -->
<svelte:head>
<title>{data.meta.title} | ClassroomIO Blog</title>
<meta property="og:type" content="article" />
<meta property="og:title" content={data.meta.title} />
<meta property="og:type" content="website" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="1920" />
<meta property="og:image:height" content="1080" />
<meta property="og:image:secure_url" itemprop="image" content={data.meta.imageUrl} />
<meta name="twitter:card" content="summary_large_image" />
<meta property="twitter:domain" content="classroomio.com" />
<meta property="twitter:url" content="https://www.classroomio.com/blog/" />
<meta name="twitter:title" content={data.meta.title} />
<meta name="twitter:description" content={data.meta.description} />
<meta name="twitter:image" content={data.meta.imageUrl} />
</svelte:head>
<div class=" mt-[10%] md:mt-16">
{#if data}
<article class="py-16">
@@ -1,13 +1,43 @@
import { error } from '@sveltejs/kit';
import type { MetaTagsProps } from 'svelte-meta-tags';
export async function load({ params }) {
try {
const blog = await import(`../../../blog/${params.slug}.md`);
const pageMetaTags = Object.freeze({
title: blog.metadata.title,
description: blog.metadata.description,
openGraph: {
title: blog.metadata.title,
description: blog.metadata.description,
images: [
{
url: blog.metadata.imageUrl,
alt: blog.metadata.title,
width: 280,
height: 200,
secureUrl: blog.metadata.imageUrl,
type: 'image/jpeg'
}
]
},
twitter: {
handle: '@classroomio',
site: '@classroomio',
cardType: 'summary_large_image' as const,
title: blog.metadata.title,
description: blog.metadata.description,
image: blog.metadata.imageUrl,
imageAlt: `${blog.metadata.title} OG`
}
}) satisfies MetaTagsProps;
return {
content: blog.default,
meta: blog.metadata,
slug: params.slug
slug: params.slug,
pageMetaTags
};
} catch (e) {
throw error(404, `Could not find ${params.slug}`);
+1 -1
View File
@@ -53,7 +53,7 @@
"openai-edge": "^1.2.2",
"papaparse": "^5.4.1",
"pluralize": "^8.0.0",
"posthog-js": "^1.155.0",
"posthog-js": "^1.157.2",
"shared": "workspace:*",
"sirv": "^2.0.3",
"stripe": "^14.22.0",
@@ -25,7 +25,7 @@ export const NAV_ITEMS = [
},
{
key: SECTION_KEYS.LESSONS,
label: 'course.navItems.nav_lessons'
label: 'course.navItems.nav_content'
},
{
key: SECTION_KEYS.REVIEWS,
+1 -1
View File
@@ -129,7 +129,7 @@ function getBaseMetaTags(url: URL) {
twitter: {
handle: '@classroomio',
site: '@classroomio',
cardType: 'summary_large_image',
cardType: 'summary_large_image' as const,
title: 'ClassroomIO – Launch Your Online Bootcamp In Minutes',
description:
'Launch your bootcamp quickly and affordably with ClassroomIO, the customizable online teaching platform.',
@@ -1,6 +1,6 @@
import type { MetaTagsProps } from 'svelte-meta-tags';
import { fetchCourse } from '$lib/utils/services/courses';
import { supabase, getSupabase } from '$lib/utils/functions/supabase';
import type { MetaTagsProps } from 'svelte-meta-tags';
if (!supabase) {
getSupabase();
@@ -17,7 +17,7 @@ export const load = async ({ params = { slug: '' } }) => {
description: data?.description,
images: [
{
url: data?.logo,
url: data?.logo || '',
alt: data?.title,
width: 280,
height: 200,
@@ -29,7 +29,7 @@ export const load = async ({ params = { slug: '' } }) => {
twitter: {
handle: '@classroomio',
site: '@classroomio',
cardType: 'summary_large_image',
cardType: 'summary_large_image' as const,
title: data?.title,
description: data?.description,
image: data?.logo,
+165 -109
View File
@@ -22,7 +22,7 @@ importers:
version: 3.1.0
prettier-plugin-svelte:
specifier: ^3.1.2
version: 3.1.2([email protected])([email protected]8)
version: 3.1.2([email protected])([email protected]9)
prettier-plugin-tailwindcss:
specifier: ^0.5.7
version: 0.5.7([email protected])([email protected])
@@ -107,6 +107,9 @@ importers:
apps/classroomio-com:
dependencies:
just-extend:
specifier: ^6.2.0
version: 6.2.0
posthog-node:
specifier: ^3.1.3
version: 3.1.3
@@ -125,6 +128,9 @@ importers:
shiki:
specifier: ^0.14.7
version: 0.14.7
svelte-meta-tags:
specifier: ^3.1.2
version: 3.1.2([email protected])([email protected])
devDependencies:
'@sveltejs/adapter-auto':
specifier: ^2.0.0
@@ -161,7 +167,7 @@ importers:
version: 5.1.6
vite:
specifier: ^4.4.2
version: 4.4.8(@types/[email protected])([email protected])
version: 4.4.8
apps/dashboard:
dependencies:
@@ -206,7 +212,7 @@ importers:
version: 1.0.1
ai:
specifier: ^2.1.31
version: 2.1.31([email protected])([email protected]0)([email protected])([email protected]7)
version: 2.1.31([email protected])([email protected]1)([email protected])([email protected]8)
axios:
specifier: ^1.5.1
version: 1.5.1
@@ -265,8 +271,8 @@ importers:
specifier: ^8.0.0
version: 8.0.0
posthog-js:
specifier: ^1.155.0
version: 1.155.0
specifier: ^1.157.2
version: 1.157.2
shared:
specifier: workspace:*
version: link:../../packages/shared
@@ -463,7 +469,7 @@ importers:
version: 1.10.16([email protected])
eslint-plugin-svelte:
specifier: ^2.35.1
version: 2.35.1([email protected])([email protected]8)
version: 2.35.1([email protected])([email protected]9)
typescript:
specifier: ^5.1.6
version: 5.3.2
@@ -1643,7 +1649,7 @@ packages:
'@babel/traverse': 7.23.4
'@babel/types': 7.23.4
convert-source-map: 1.9.0
debug: 4.3.4
debug: 4.3.4([email protected])
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -1666,7 +1672,7 @@ packages:
'@babel/traverse': 7.23.4
'@babel/types': 7.23.4
convert-source-map: 2.0.0
debug: 4.3.4
debug: 4.3.4([email protected])
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -1823,7 +1829,7 @@ packages:
'@babel/core': 7.22.9
'@babel/helper-compilation-targets': 7.22.15
'@babel/helper-plugin-utils': 7.22.5
debug: 4.3.4
debug: 4.3.4([email protected])
lodash.debounce: 4.0.8
resolve: 1.22.8
transitivePeerDependencies:
@@ -2039,12 +2045,12 @@ packages:
'@babel/types': 7.23.9
dev: false
/@babel/[email protected].3:
resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==}
/@babel/[email protected].4:
resolution: {integrity: sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.25.2
'@babel/types': 7.25.4
dev: false
/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/[email protected]):
@@ -3143,7 +3149,7 @@ packages:
'@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.23.4
'@babel/types': 7.23.4
debug: 4.3.4
debug: 4.3.4([email protected])
globals: 11.12.0
transitivePeerDependencies:
- supports-color
@@ -3184,8 +3190,8 @@ packages:
to-fast-properties: 2.0.0
dev: false
/@babel/[email protected].2:
resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==}
/@babel/[email protected].4:
resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.24.8
@@ -3540,7 +3546,7 @@ packages:
debug: 4.3.6
espree: 9.6.1
globals: 13.24.0
ignore: 5.3.1
ignore: 5.3.2
import-fresh: 3.3.0
js-yaml: 4.1.0
minimatch: 3.1.2
@@ -5825,7 +5831,7 @@ packages:
sirv: 2.0.3
svelte: 4.1.2
undici: 5.22.1
vite: 4.4.8(@types/[email protected])([email protected])
vite: 4.4.8
transitivePeerDependencies:
- supports-color
dev: true
@@ -5868,7 +5874,7 @@ packages:
'@sveltejs/vite-plugin-svelte': 2.5.3([email protected])([email protected])
debug: 4.3.4
svelte: 4.1.2
vite: 4.4.8(@types/[email protected])([email protected])
vite: 4.4.8
transitivePeerDependencies:
- supports-color
@@ -5886,7 +5892,7 @@ packages:
magic-string: 0.30.5
svelte: 4.1.2
svelte-hmr: 0.15.3([email protected])
vite: 4.4.8(@types/[email protected])([email protected])
vite: 4.4.8
vitefu: 0.2.5([email protected])
transitivePeerDependencies:
- supports-color
@@ -6551,78 +6557,78 @@ packages:
- supports-color
dev: true
/@vue/[email protected]7:
resolution: {integrity: sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==}
/@vue/[email protected]8:
resolution: {integrity: sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==}
dependencies:
'@babel/parser': 7.25.3
'@vue/shared': 3.4.37
entities: 5.0.0
'@babel/parser': 7.25.4
'@vue/shared': 3.4.38
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.0
dev: false
/@vue/[email protected]7:
resolution: {integrity: sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==}
/@vue/[email protected]8:
resolution: {integrity: sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==}
dependencies:
'@vue/compiler-core': 3.4.37
'@vue/shared': 3.4.37
'@vue/compiler-core': 3.4.38
'@vue/shared': 3.4.38
dev: false
/@vue/[email protected]7:
resolution: {integrity: sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==}
/@vue/[email protected]8:
resolution: {integrity: sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==}
dependencies:
'@babel/parser': 7.25.3
'@vue/compiler-core': 3.4.37
'@vue/compiler-dom': 3.4.37
'@vue/compiler-ssr': 3.4.37
'@vue/shared': 3.4.37
'@babel/parser': 7.25.4
'@vue/compiler-core': 3.4.38
'@vue/compiler-dom': 3.4.38
'@vue/compiler-ssr': 3.4.38
'@vue/shared': 3.4.38
estree-walker: 2.0.2
magic-string: 0.30.11
postcss: 8.4.41
source-map-js: 1.2.0
dev: false
/@vue/[email protected]7:
resolution: {integrity: sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==}
/@vue/[email protected]8:
resolution: {integrity: sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==}
dependencies:
'@vue/compiler-dom': 3.4.37
'@vue/shared': 3.4.37
'@vue/compiler-dom': 3.4.38
'@vue/shared': 3.4.38
dev: false
/@vue/[email protected]7:
resolution: {integrity: sha512-UmdKXGx0BZ5kkxPqQr3PK3tElz6adTey4307NzZ3whZu19i5VavYal7u2FfOmAzlcDVgE8+X0HZ2LxLb/jgbYw==}
/@vue/[email protected]8:
resolution: {integrity: sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==}
dependencies:
'@vue/shared': 3.4.37
'@vue/shared': 3.4.38
dev: false
/@vue/[email protected]7:
resolution: {integrity: sha512-MNjrVoLV/sirHZoD7QAilU1Ifs7m/KJv4/84QVbE6nyAZGQNVOa1HGxaOzp9YqCG+GpLt1hNDC4RbH+KtanV7w==}
/@vue/[email protected]8:
resolution: {integrity: sha512-21z3wA99EABtuf+O3IhdxP0iHgkBs1vuoCAsCKLVJPEjpVqvblwBnTj42vzHRlWDCyxu9ptDm7sI2ZMcWrQqlA==}
dependencies:
'@vue/reactivity': 3.4.37
'@vue/shared': 3.4.37
'@vue/reactivity': 3.4.38
'@vue/shared': 3.4.38
dev: false
/@vue/[email protected]7:
resolution: {integrity: sha512-Mg2EwgGZqtwKrqdL/FKMF2NEaOHuH+Ks9TQn3DHKyX//hQTYOun+7Tqp1eo0P4Ds+SjltZshOSRq6VsU0baaNg==}
/@vue/[email protected]8:
resolution: {integrity: sha512-afZzmUreU7vKwKsV17H1NDThEEmdYI+GCAK/KY1U957Ig2NATPVjCROv61R19fjZNzMmiU03n79OMnXyJVN0UA==}
dependencies:
'@vue/reactivity': 3.4.37
'@vue/runtime-core': 3.4.37
'@vue/shared': 3.4.37
'@vue/reactivity': 3.4.38
'@vue/runtime-core': 3.4.38
'@vue/shared': 3.4.38
csstype: 3.1.3
dev: false
/@vue/[email protected]7([email protected]7):
resolution: {integrity: sha512-jZ5FAHDR2KBq2FsRUJW6GKDOAG9lUTX8aBEGq4Vf6B/35I9fPce66BornuwmqmKgfiSlecwuOb6oeoamYMohkg==}
/@vue/[email protected]8([email protected]8):
resolution: {integrity: sha512-NggOTr82FbPEkkUvBm4fTGcwUY8UuTsnWC/L2YZBmvaQ4C4Jl/Ao4HHTB+l7WnFCt5M/dN3l0XLuyjzswGYVCA==}
peerDependencies:
vue: 3.4.37
vue: 3.4.38
dependencies:
'@vue/compiler-ssr': 3.4.37
'@vue/shared': 3.4.37
vue: 3.4.37([email protected])
'@vue/compiler-ssr': 3.4.38
'@vue/shared': 3.4.38
vue: 3.4.38([email protected])
dev: false
/@vue/[email protected]7:
resolution: {integrity: sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==}
/@vue/[email protected]8:
resolution: {integrity: sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==}
dev: false
/[email protected]:
@@ -6685,7 +6691,7 @@ packages:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'}
dependencies:
debug: 4.3.4
debug: 4.3.4([email protected])
transitivePeerDependencies:
- supports-color
dev: false
@@ -6706,7 +6712,7 @@ packages:
indent-string: 4.0.0
dev: true
/[email protected]([email protected])([email protected]0)([email protected])([email protected]7):
/[email protected]([email protected])([email protected]1)([email protected])([email protected]8):
resolution: {integrity: sha512-ihkimg9iP/C/OaxjYj9KgA4gPC9Rzw60Xv3+AWYrQ807L/NEF8sgZBmA1hv8/DC8KzMv/7N+a5HCQPDZXNUs+g==}
engines: {node: '>=14.6'}
peerDependencies:
@@ -6727,14 +6733,14 @@ packages:
eventsource-parser: 1.0.0
nanoid: 3.3.6
react: 18.3.1
solid-js: 1.8.20
solid-swr-store: 0.10.7([email protected]0)([email protected])
solid-js: 1.8.21
solid-swr-store: 0.10.7([email protected]1)([email protected])
sswr: 2.0.0([email protected])
svelte: 4.1.2
swr: 2.2.0([email protected])
swr-store: 0.10.6
swrv: 1.0.4([email protected]7)
vue: 3.4.37([email protected])
swrv: 1.0.4([email protected]8)
vue: 3.4.38([email protected])
dev: false
/[email protected]:
@@ -7582,7 +7588,7 @@ packages:
dependencies:
'@babel/runtime': 7.23.4
'@types/raf': 3.4.3
core-js: 3.38.0
core-js: 3.38.1
raf: 3.4.1
regenerator-runtime: 0.13.11
rgbcolor: 1.0.1
@@ -8179,8 +8185,8 @@ packages:
browserslist: 4.22.1
dev: true
/[email protected].0:
resolution: {integrity: sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug==}
/[email protected].1:
resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==}
requiresBuild: true
dev: false
optional: true
@@ -9190,11 +9196,6 @@ packages:
engines: {node: '>=0.12'}
dev: false
/[email protected]:
resolution: {integrity: sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==}
engines: {node: '>=0.12'}
dev: false
/[email protected]:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
dependencies:
@@ -9637,7 +9638,7 @@ packages:
string.prototype.matchall: 4.0.10
dev: true
/[email protected]([email protected])([email protected]8):
/[email protected]([email protected])([email protected]9):
resolution: {integrity: sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -9659,8 +9660,8 @@ packages:
postcss-safe-parser: 6.0.0([email protected])
postcss-selector-parser: 6.0.13
semver: 7.5.4
svelte: 4.2.18
svelte-eslint-parser: 0.33.1([email protected]8)
svelte: 4.2.19
svelte-eslint-parser: 0.33.1([email protected]9)
transitivePeerDependencies:
- supports-color
- ts-node
@@ -9822,7 +9823,7 @@ packages:
glob-parent: 6.0.2
globals: 13.24.0
graphemer: 1.4.0
ignore: 5.3.1
ignore: 5.3.2
imurmurhash: 0.1.4
is-glob: 4.0.3
is-path-inside: 3.0.3
@@ -10727,7 +10728,7 @@ packages:
source-map: 0.6.1
wordwrap: 1.0.0
optionalDependencies:
uglify-js: 3.19.1
uglify-js: 3.19.2
dev: true
/[email protected]:
@@ -11034,7 +11035,7 @@ packages:
engines: {node: '>= 6'}
dependencies:
agent-base: 6.0.2
debug: 4.3.4
debug: 4.3.4([email protected])
transitivePeerDependencies:
- supports-color
dev: false
@@ -11089,8 +11090,8 @@ packages:
engines: {node: '>= 4'}
dev: true
/[email protected].1:
resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
/[email protected].2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
dev: true
@@ -11593,7 +11594,7 @@ packages:
resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
engines: {node: '>=10'}
dependencies:
debug: 4.3.4
debug: 4.3.4([email protected])
istanbul-lib-coverage: 3.2.2
source-map: 0.6.1
transitivePeerDependencies:
@@ -12184,7 +12185,7 @@ packages:
fflate: 0.4.8
optionalDependencies:
canvg: 3.0.10
core-js: 3.38.0
core-js: 3.38.1
dompurify: 2.5.6
html2canvas: 1.4.1
dev: false
@@ -12209,6 +12210,10 @@ packages:
object.values: 1.1.7
dev: true
/[email protected]:
resolution: {integrity: sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==}
dev: false
/[email protected]:
resolution: {integrity: sha512-0H4miIAWZYpnpg7oD/Y/PBb77ISSHAETif5xK9EnwIgYCO6oC8ErkJxDumMUTR44shSOwptRIArRuvNuvN/hOw==}
dev: true
@@ -14299,6 +14304,23 @@ packages:
yaml: 2.3.4
dev: true
/[email protected]([email protected]):
resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
engines: {node: '>= 14'}
peerDependencies:
postcss: '>=8.0.9'
ts-node: '>=9.0.0'
peerDependenciesMeta:
postcss:
optional: true
ts-node:
optional: true
dependencies:
lilconfig: 2.1.0
postcss: 8.4.32
yaml: 2.3.4
dev: true
/[email protected]([email protected])([email protected]):
resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
engines: {node: '>= 14'}
@@ -14405,8 +14427,8 @@ packages:
source-map-js: 1.2.0
dev: false
/[email protected]5.0:
resolution: {integrity: sha512-gxi72Qcp7Vnq6efe5gNxsq84zyEFd33NUmoLSgcbMPhxU30qgc89Aw/N2mRB4mGrD3Mq0rCnDJUzGFdN59nR0g==}
/[email protected]7.2:
resolution: {integrity: sha512-ATYKGs+Q51u26nHHhrhWNh1whqFm7j/rwQQYw+y6/YzNmRlo+YsqrGZji9nqXb9/4fo0ModDr+ZmuOI3hKkUXA==}
dependencies:
fflate: 0.4.8
preact: 10.19.3
@@ -14445,14 +14467,14 @@ packages:
synckit: 0.8.5
dev: true
/[email protected]([email protected])([email protected]8):
/[email protected]([email protected])([email protected]9):
resolution: {integrity: sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==}
peerDependencies:
prettier: ^3.0.0
svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
dependencies:
prettier: 3.1.0
svelte: 4.2.18
svelte: 4.2.19
dev: true
/[email protected]([email protected])([email protected]):
@@ -14508,7 +14530,7 @@ packages:
optional: true
dependencies:
prettier: 3.1.0
prettier-plugin-svelte: 3.1.2([email protected])([email protected]8)
prettier-plugin-svelte: 3.1.2([email protected])([email protected]9)
dev: true
/[email protected]:
@@ -15552,22 +15574,22 @@ packages:
smart-buffer: 4.2.0
dev: false
/[email protected]0:
resolution: {integrity: sha512-SsgaExCJ97mPm9WpAusjZ484Z8zTp8ggiueQOsrm81iAP7UaxaN+wiOgnPcJ9u6B2SQpoQ4FiDPAZBqVWi1V4g==}
/[email protected]1:
resolution: {integrity: sha512-FHUGdoo7GVa1BTpGh/4UtwIISde0vSXoqNB6KFpHiTgkIY959tmCJ7NYQAWDfScBfnpoMGZR8lFz0DiwW/gFlw==}
dependencies:
csstype: 3.1.3
seroval: 1.1.1
seroval-plugins: 1.1.1([email protected])
dev: false
/[email protected]([email protected]0)([email protected]):
/[email protected]([email protected]1)([email protected]):
resolution: {integrity: sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g==}
engines: {node: '>=10'}
peerDependencies:
solid-js: ^1.2
swr-store: ^0.10
dependencies:
solid-js: 1.8.20
solid-js: 1.8.21
swr-store: 0.10.6
dev: false
@@ -16074,7 +16096,7 @@ packages:
svelte: 3.59.2
dev: false
/[email protected]([email protected]8):
/[email protected]([email protected]9):
resolution: {integrity: sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -16088,7 +16110,7 @@ packages:
espree: 9.6.1
postcss: 8.4.32
postcss-scss: 4.0.9([email protected])
svelte: 4.2.18
svelte: 4.2.19
dev: true
/[email protected]([email protected]):
@@ -16254,8 +16276,8 @@ packages:
magic-string: 0.30.5
periscopic: 3.1.0
/[email protected]8:
resolution: {integrity: sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==}
/[email protected]9:
resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==}
engines: {node: '>=16'}
dependencies:
'@ampproject/remapping': 2.3.0
@@ -16311,12 +16333,12 @@ packages:
resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==}
dev: false
/[email protected]([email protected]7):
/[email protected]([email protected]8):
resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==}
peerDependencies:
vue: '>=3.2.26 < 4'
dependencies:
vue: 3.4.37([email protected])
vue: 3.4.38([email protected])
dev: false
/[email protected]:
@@ -16380,7 +16402,7 @@ packages:
postcss: 8.4.32
postcss-import: 15.1.0([email protected])
postcss-js: 4.0.1([email protected])
postcss-load-config: 4.0.1([email protected])([email protected])
postcss-load-config: 4.0.1([email protected])
postcss-nested: 6.0.1([email protected])
postcss-selector-parser: 6.0.13
resolve: 1.22.8
@@ -16920,8 +16942,8 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
/[email protected].1:
resolution: {integrity: sha512-y/2wiW+ceTYR2TSSptAhfnEtpLaQ4Ups5zrjB2d3kuVxHj16j/QJwPl5PvuGy9uARb39J0+iKxcRPvtpsx4A4A==}
/[email protected].2:
resolution: {integrity: sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ==}
engines: {node: '>=0.8.0'}
hasBin: true
requiresBuild: true
@@ -17347,6 +17369,40 @@ packages:
vfile-message: 4.0.2
dev: false
/[email protected]:
resolution: {integrity: sha512-LONawOUUjxQridNWGQlNizfKH89qPigK36XhMI7COMGztz8KNY0JHim7/xDd71CZwGT4HtSRgI7Hy+RlhG0Gvg==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
'@types/node': '>= 14'
less: '*'
lightningcss: ^1.21.0
sass: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
lightningcss:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
dependencies:
esbuild: 0.18.20
postcss: 8.4.32
rollup: 3.29.4
optionalDependencies:
fsevents: 2.3.3
/[email protected](@types/[email protected])([email protected]):
resolution: {integrity: sha512-LONawOUUjxQridNWGQlNizfKH89qPigK36XhMI7COMGztz8KNY0JHim7/xDd71CZwGT4HtSRgI7Hy+RlhG0Gvg==}
engines: {node: ^14.18.0 || >=16.0.0}
@@ -17391,7 +17447,7 @@ packages:
vite:
optional: true
dependencies:
vite: 4.4.8(@types/[email protected])([email protected])
vite: 4.4.8
/[email protected]:
resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==}
@@ -17401,19 +17457,19 @@ packages:
resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==}
dev: false
/[email protected]7([email protected]):
resolution: {integrity: sha512-3vXvNfkKTBsSJ7JP+LyR7GBuwQuckbWvuwAid3xbqK9ppsKt/DUvfqgZ48fgOLEfpy1IacL5f8QhUVl77RaI7A==}
/[email protected]8([email protected]):
resolution: {integrity: sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@vue/compiler-dom': 3.4.37
'@vue/compiler-sfc': 3.4.37
'@vue/runtime-dom': 3.4.37
'@vue/server-renderer': 3.4.37([email protected]7)
'@vue/shared': 3.4.37
'@vue/compiler-dom': 3.4.38
'@vue/compiler-sfc': 3.4.38
'@vue/runtime-dom': 3.4.38
'@vue/server-renderer': 3.4.38([email protected]8)
'@vue/shared': 3.4.38
typescript: 5.1.6
dev: false