diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6976e4..7bde3f0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -312,13 +312,16 @@ importers: version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0) '@t3-oss/env-nextjs': specifier: ^0.9.2 - version: 0.9.2(typescript@5.4.5)(zod@3.23.4) + version: 0.9.2(typescript@5.4.5)(zod@3.23.8) '@tanstack/react-query': specifier: ^5.29.2 version: 5.32.0(react@18.2.0) '@tanstack/react-table': specifier: ^8.16.0 version: 8.16.0(react-dom@18.2.0)(react@18.2.0) + '@types/mdx': + specifier: ^2.0.13 + version: 2.0.13 '@uploadthing/react': specifier: ^6.4.4 version: 6.5.0(fast-check@3.18.0)(next@14.2.3)(react@18.2.0)(uploadthing@6.10.0) @@ -339,31 +342,31 @@ importers: version: 0.29.5(@types/react@18.3.1)(pg@8.11.5)(postgres@3.4.4)(react@18.2.0) drizzle-zod: specifier: ^0.5.1 - version: 0.5.1(drizzle-orm@0.29.5)(zod@3.23.4) + version: 0.5.1(drizzle-orm@0.29.5)(zod@3.23.8) + fumadocs-core: + specifier: ^11.1.1 + version: 11.1.1(@types/react@18.3.1)(next@14.2.3)(react-dom@18.2.0)(react@18.2.0) + fumadocs-mdx: + specifier: ^8.2.19 + version: 8.2.19(@types/react@18.3.1)(next@14.2.3)(react-dom@18.2.0)(react@18.2.0) + fumadocs-ui: + specifier: ^11.1.1 + version: 11.1.1(@types/react-dom@18.3.0)(@types/react@18.3.1)(next@14.2.3)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.3) geist: specifier: ^1.3.0 version: 1.3.0(next@14.2.3) - github-slugger: - specifier: ^2.0.0 - version: 2.0.0 json2csv: specifier: 6.0.0-alpha.2 version: 6.0.0-alpha.2 lucide-react: specifier: ^0.368.0 version: 0.368.0(react@18.2.0) - mdast-util-toc: - specifier: ^7.0.0 - version: 7.0.0 next: specifier: ^14.2.1 version: 14.2.3(react-dom@18.2.0)(react@18.2.0) next-auth: specifier: ^4.24.6 version: 4.24.7(next@14.2.3)(nodemailer@6.9.13)(react-dom@18.2.0)(react@18.2.0) - next-mdx-remote: - specifier: ^4.4.1 - version: 4.4.1(react-dom@18.2.0)(react@18.2.0) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.2.0)(react@18.2.0) @@ -391,12 +394,6 @@ importers: recharts: specifier: ^2.12.6 version: 2.12.6(react-dom@18.2.0)(react@18.2.0) - rehype-prism-plus: - specifier: ^2.0.0 - version: 2.0.0 - remark: - specifier: ^15.0.1 - version: 15.0.1 resend: specifier: ^3.2.0 version: 3.2.0 @@ -415,9 +412,6 @@ importers: tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.3) - unist-util-visit: - specifier: ^5.0.0 - version: 5.0.0 uploadthing: specifier: ^6.9.0 version: 6.10.0(fast-check@3.18.0)(next@14.2.3)(tailwindcss@3.4.3) @@ -428,8 +422,8 @@ importers: specifier: ^0.9.0 version: 0.9.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0) zod: - specifier: ^3.22.4 - version: 3.23.4 + specifier: ^3.23.8 + version: 3.23.8 zustand: specifier: ^4.5.2 version: 4.5.2(@types/react@18.3.1)(react@18.2.0) @@ -1286,19 +1280,25 @@ packages: resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} dev: false + /@formatjs/intl-localematcher@0.5.4: + resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==} + dependencies: + tslib: 2.6.2 + dev: false + /@hono/node-server@1.11.1: resolution: {integrity: sha512-GW1Iomhmm1o4Z+X57xGby8A35Cu9UZLL7pSMdqDBkD99U5cywff8F+8hLk5aBTzNubnsFAvWQ/fZjNwPsEn9lA==} engines: {node: '>=18.14.1'} dev: true - /@hono/zod-validator@0.2.1(hono@4.2.9)(zod@3.23.4): + /@hono/zod-validator@0.2.1(hono@4.2.9)(zod@3.23.8): resolution: {integrity: sha512-HFoxln7Q6JsE64qz2WBS28SD33UB2alp3aRKmcWnNLDzEL1BLsWfbdX6e1HIiUprHYTIXf5y7ax8eYidKUwyaA==} peerDependencies: hono: '>=3.9.0' zod: ^3.19.1 dependencies: hono: 4.2.9 - zod: 3.23.4 + zod: 3.23.8 dev: true /@hookform/resolvers@3.3.4(react-hook-form@7.51.3): @@ -1574,40 +1574,36 @@ packages: engines: {node: '>=18'} dev: false - /@mdx-js/mdx@2.3.0: - resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} + /@mdx-js/mdx@3.0.1: + resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==} dependencies: + '@types/estree': 1.0.5 '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 '@types/mdx': 2.0.13 - estree-util-build-jsx: 2.2.2 - estree-util-is-identifier-name: 2.1.0 - estree-util-to-js: 1.2.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-build-jsx: 3.0.1 + estree-util-is-identifier-name: 3.0.0 + estree-util-to-js: 2.0.0 estree-walker: 3.0.3 - hast-util-to-estree: 2.3.3 - markdown-extensions: 1.1.1 + hast-util-to-estree: 3.1.0 + hast-util-to-jsx-runtime: 2.3.0 + markdown-extensions: 2.0.0 periscopic: 3.1.0 - remark-mdx: 2.3.0 - remark-parse: 10.0.2 - remark-rehype: 10.1.0 - unified: 10.1.2 - unist-util-position-from-estree: 1.1.2 - unist-util-stringify-position: 3.0.3 - unist-util-visit: 4.1.2 - vfile: 5.3.7 + remark-mdx: 3.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.0 + source-map: 0.7.4 + unified: 11.0.4 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 transitivePeerDependencies: - supports-color dev: false - /@mdx-js/react@2.3.0(react@18.2.0): - resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} - peerDependencies: - react: '>=16' - dependencies: - '@types/mdx': 2.0.13 - '@types/react': 18.3.1 - react: 18.2.0 - dev: false - /@mdx-js/react@3.0.1(@types/react@18.3.1)(react@18.2.0): resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} peerDependencies: @@ -2894,6 +2890,27 @@ packages: selderee: 0.11.0 dev: false + /@shikijs/core@1.5.2: + resolution: {integrity: sha512-wSAOgaz48GmhILFElMCeQypSZmj6Ru6DttOOtl3KNkdJ17ApQuGNCfzpk4cClasVrnIu45++2DBwG4LNMQAfaA==} + dev: false + + /@shikijs/rehype@1.5.2: + resolution: {integrity: sha512-MlpLBEyLcV399AgV5ai7wD0F7E/5qTlfF3487bx5MkGZb+DMAvpF279OI0UYKXVrqKrTS1zJfZXyIJlFQ3JeTA==} + dependencies: + '@shikijs/transformers': 1.5.2 + '@types/hast': 3.0.4 + hast-util-to-string: 3.0.0 + shiki: 1.5.2 + unified: 11.0.4 + unist-util-visit: 5.0.0 + dev: false + + /@shikijs/transformers@1.5.2: + resolution: {integrity: sha512-/Sh64rKOFGMQLCvtHeL1Y7EExdq8LLxcdVkvoGx2aMHsYMOn8DckYl2gYKMHRBu/YUt1C38/Amd1Jdh48tWHgw==} + dependencies: + shiki: 1.5.2 + dev: false + /@streamparser/json@0.0.6: resolution: {integrity: sha512-vL9EVn/v+OhZ+Wcs6O4iKE9EUpwHUqHmCtNUMWjqp+6dr85+XPOSGTEsqYNq1Vn04uk9SWlOVmx9J48ggJVT2Q==} dev: false @@ -2922,6 +2939,19 @@ packages: zod: 3.23.4 dev: false + /@t3-oss/env-core@0.9.2(typescript@5.4.5)(zod@3.23.8): + resolution: {integrity: sha512-KgWXljUTHgO3o7GMZQPAD5+P+HqpauMNNHowlm7V2b9IeMitSUpNKwG6xQrup/xARWHTdxRVIl0mSI4wCevQhQ==} + peerDependencies: + typescript: '>=5.0.0' + zod: ^3.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.4.5 + zod: 3.23.8 + dev: false + /@t3-oss/env-nextjs@0.9.2(typescript@5.4.5)(zod@3.23.4): resolution: {integrity: sha512-dklHrgKLESStNVB67Jdbu6osxDYA+xNKaPBRerlnkEvzbCccSKMvZENx6EZebJuR4snqB3/yRykNMn/bdIAyiQ==} peerDependencies: @@ -2936,6 +2966,20 @@ packages: zod: 3.23.4 dev: false + /@t3-oss/env-nextjs@0.9.2(typescript@5.4.5)(zod@3.23.8): + resolution: {integrity: sha512-dklHrgKLESStNVB67Jdbu6osxDYA+xNKaPBRerlnkEvzbCccSKMvZENx6EZebJuR4snqB3/yRykNMn/bdIAyiQ==} + peerDependencies: + typescript: '>=5.0.0' + zod: ^3.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@t3-oss/env-core': 0.9.2(typescript@5.4.5)(zod@3.23.8) + typescript: 5.4.5 + zod: 3.23.8 + dev: false + /@tailwindcss/typography@0.5.13(tailwindcss@3.4.3): resolution: {integrity: sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==} peerDependencies: @@ -2946,7 +2990,6 @@ packages: lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 tailwindcss: 3.4.3 - dev: true /@tanstack/query-core@5.32.0: resolution: {integrity: sha512-Z3flEgCat55DRXU5UMwYU1U+DgFZKA3iufyOKs+II7iRAo0uXkeU7PH5e6sOH1CGEag0IpKmZxlUFpCg6roSKw==} @@ -3052,22 +3095,12 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - /@types/hast@2.3.10: - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} - dependencies: - '@types/unist': 2.0.10 - dev: false - /@types/hast@3.0.4: resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} dependencies: '@types/unist': 3.0.2 dev: false - /@types/js-yaml@4.0.9: - resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} - dev: false - /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true @@ -3082,12 +3115,6 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/mdast@3.0.15: - resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - dependencies: - '@types/unist': 2.0.10 - dev: false - /@types/mdast@4.0.3: resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} dependencies: @@ -3118,10 +3145,6 @@ packages: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true - /@types/prismjs@1.26.3: - resolution: {integrity: sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw==} - dev: false - /@types/prop-types@15.7.12: resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -3140,10 +3163,6 @@ packages: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true - /@types/ungap__structured-clone@0.3.3: - resolution: {integrity: sha512-RNmhIPwoip6K/zZOv3ypksTAqaqLEXvlNSXKyrC93xMSOAHZCR7PifW6xKZCwkbbnbM9dwB9X56PPoNTlNwEqw==} - dev: false - /@types/unist@2.0.10: resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} dev: false @@ -3612,8 +3631,15 @@ packages: /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: false + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true /aria-hidden@1.2.4: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} @@ -3969,6 +3995,25 @@ packages: - '@types/react' dev: false + /cmdk@1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + dev: false + + /collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + dev: false + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -4026,6 +4071,10 @@ packages: engines: {node: ^12.20.0 || >=14} dev: true + /compute-scroll-into-view@3.1.0: + resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} + dev: false + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true @@ -4289,11 +4338,6 @@ packages: /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - /diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} - dev: false - /difflib@0.2.4: resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} dependencies: @@ -4406,7 +4450,7 @@ packages: dependencies: '@esbuild-kit/esm-loader': 2.6.5 '@hono/node-server': 1.11.1 - '@hono/zod-validator': 0.2.1(hono@4.2.9)(zod@3.23.4) + '@hono/zod-validator': 0.2.1(hono@4.2.9)(zod@3.23.8) camelcase: 7.0.1 chalk: 5.3.0 commander: 9.5.0 @@ -4420,7 +4464,7 @@ packages: minimatch: 7.4.6 semver: 7.6.0 superjson: 2.2.1 - zod: 3.23.4 + zod: 3.23.8 transitivePeerDependencies: - supports-color dev: true @@ -4437,7 +4481,7 @@ packages: glob: 8.1.0 hanji: 0.0.5 json-diff: 0.9.0 - zod: 3.23.4 + zod: 3.23.8 transitivePeerDependencies: - supports-color dev: true @@ -4603,14 +4647,14 @@ packages: postgres: 3.4.4 dev: false - /drizzle-zod@0.5.1(drizzle-orm@0.29.5)(zod@3.23.4): + /drizzle-zod@0.5.1(drizzle-orm@0.29.5)(zod@3.23.8): resolution: {integrity: sha512-C/8bvzUH/zSnVfwdSibOgFjLhtDtbKYmkbPbUCq46QZyZCH6kODIMSOgZ8R7rVjoI+tCj3k06MRJMDqsIeoS4A==} peerDependencies: drizzle-orm: '>=0.23.13' zod: '*' dependencies: drizzle-orm: 0.29.5(@types/react@18.3.1)(pg@8.11.5)(postgres@3.4.4)(react@18.2.0) - zod: 3.23.4 + zod: 3.23.8 dev: false /eastasianwidth@0.2.0: @@ -4903,6 +4947,11 @@ packages: engines: {node: '>=10'} dev: true + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: false + /eslint-config-next@14.2.3(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==} peerDependencies: @@ -4918,7 +4967,7 @@ packages: eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) @@ -4976,7 +5025,7 @@ packages: enhanced-resolve: 5.16.0 eslint: 8.57.0 eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.3 is-core-module: 2.13.1 @@ -5071,6 +5120,35 @@ packages: - supports-color dev: true + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} @@ -5117,6 +5195,41 @@ packages: - supports-color dev: true + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.8.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5453,6 +5566,12 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: false + /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} @@ -5477,37 +5596,45 @@ packages: engines: {node: '>=4.0'} dev: true - /estree-util-attach-comments@2.1.1: - resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} + /estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} dependencies: '@types/estree': 1.0.5 dev: false - /estree-util-build-jsx@2.2.2: - resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} + /estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} dependencies: '@types/estree-jsx': 1.0.5 - estree-util-is-identifier-name: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 estree-walker: 3.0.3 dev: false - /estree-util-is-identifier-name@2.1.0: - resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + /estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} dev: false - /estree-util-to-js@1.2.0: - resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} + /estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} dependencies: '@types/estree-jsx': 1.0.5 astring: 1.8.6 source-map: 0.7.4 dev: false - /estree-util-visit@1.2.1: - resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + /estree-util-value-to-estree@3.1.1: + resolution: {integrity: sha512-5mvUrF2suuv5f5cGDnDphIy4/gW86z82kl5qG6mM9z04SEQI4FB5Apmaw/TGEf3l55nLtMs5s51dmhUzvAHQCA==} + dependencies: + '@types/estree': 1.0.5 + is-plain-obj: 4.1.0 + dev: false + + /estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} dependencies: '@types/estree-jsx': 1.0.5 - '@types/unist': 2.0.10 + '@types/unist': 3.0.2 dev: false /estree-walker@3.0.3: @@ -5538,6 +5665,13 @@ packages: type: 2.7.2 dev: true + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: false + /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: false @@ -5649,6 +5783,10 @@ packages: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true + /flexsearch@0.7.21: + resolution: {integrity: sha512-W7cHV7Hrwjid6lWmy0IhsWDFQboWSng25U3VVywpHOTJnnAZNPScog67G+cVpeX9f7yDD21ih0WDrMMT+JoaYg==} + dev: false + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -5677,6 +5815,90 @@ packages: requiresBuild: true optional: true + /fumadocs-core@11.1.1(@types/react@18.3.1)(next@14.2.3)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-zHDLgFNzKndIoAa1FQVoNe+avIxL0HBHMcjoBZFP0I05naYemCx2+ErkPEOutu+pBwdtSqjMYbm4N5Jmvm5arg==} + peerDependencies: + next: '>= 14.1.0' + react: '>= 18' + react-dom: '>= 18' + dependencies: + '@formatjs/intl-localematcher': 0.5.4 + '@shikijs/rehype': 1.5.2 + '@shikijs/transformers': 1.5.2 + flexsearch: 0.7.21 + github-slugger: 2.0.0 + hast-util-to-estree: 3.1.0 + negotiator: 0.6.3 + next: 14.2.3(react-dom@18.2.0)(react@18.2.0) + npm-to-yarn: 2.2.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.10(@types/react@18.3.1)(react@18.2.0) + remark: 15.0.1 + remark-gfm: 4.0.0 + remark-mdx: 3.0.1 + scroll-into-view-if-needed: 3.1.0 + shiki: 1.5.2 + swr: 2.2.5(react@18.2.0) + unist-util-visit: 5.0.0 + transitivePeerDependencies: + - '@types/react' + - supports-color + dev: false + + /fumadocs-mdx@8.2.19(@types/react@18.3.1)(next@14.2.3)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3EGGZPSe0l8GRa76ZF/2bCSIrFOUqgiBXCTf4dOwronHX3HZjQZwCqJT+mste2sfSuQD8kTCw2IZDeU22wS6Eg==} + peerDependencies: + next: '>= 14.1.0' + dependencies: + '@mdx-js/mdx': 3.0.1 + cross-spawn: 7.0.3 + estree-util-value-to-estree: 3.1.1 + fast-glob: 3.3.2 + fumadocs-core: 11.1.1(@types/react@18.3.1)(next@14.2.3)(react-dom@18.2.0)(react@18.2.0) + gray-matter: 4.0.3 + next: 14.2.3(react-dom@18.2.0)(react@18.2.0) + zod: 3.23.8 + transitivePeerDependencies: + - '@types/react' + - react + - react-dom + - supports-color + dev: false + + /fumadocs-ui@11.1.1(@types/react-dom@18.3.0)(@types/react@18.3.1)(next@14.2.3)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.4.3): + resolution: {integrity: sha512-AWRcDAJV76hXnXlEWl0yNeHVjOrI9aQwuRKxWDlNV/Ov18tjC4iOQd6mHSQoVrNWp6itnZcW65Lk/Q1Y90LmdA==} + peerDependencies: + next: '>= 14.1.0' + react: '>= 18' + react-dom: '>= 18' + dependencies: + '@radix-ui/react-accordion': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.1)(react@18.2.0) + '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-scroll-area': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-select': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-tabs': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0) + '@tailwindcss/typography': 0.5.13(tailwindcss@3.4.3) + class-variance-authority: 0.7.0 + cmdk: 1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.2.0)(react@18.2.0) + fumadocs-core: 11.1.1(@types/react@18.3.1)(next@14.2.3)(react-dom@18.2.0)(react@18.2.0) + lucide-react: 0.378.0(react@18.2.0) + next: 14.2.3(react-dom@18.2.0)(react@18.2.0) + next-themes: 0.3.0(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-medium-image-zoom: 5.2.4(react-dom@18.2.0)(react@18.2.0) + tailwind-merge: 2.3.0 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - supports-color + - tailwindcss + dev: false + /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -5868,6 +6090,16 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true + /gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + dependencies: + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + dev: false + /hanji@0.0.5: resolution: {integrity: sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==} dependencies: @@ -5918,94 +6150,63 @@ packages: dependencies: function-bind: 1.1.2 - /hast-util-from-html@2.0.1: - resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} + /hast-util-to-estree@3.1.0: + resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} dependencies: + '@types/estree': 1.0.5 + '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 devlop: 1.1.0 - hast-util-from-parse5: 8.0.1 - parse5: 7.1.2 - vfile: 6.0.1 - vfile-message: 4.0.2 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.1.2 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.4.4 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color dev: false - /hast-util-from-parse5@8.0.1: - resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + /hast-util-to-jsx-runtime@2.3.0: + resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} dependencies: + '@types/estree': 1.0.5 '@types/hast': 3.0.4 '@types/unist': 3.0.2 + comma-separated-tokens: 2.0.3 devlop: 1.1.0 - hastscript: 8.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.1.2 + mdast-util-mdxjs-esm: 2.0.1 property-information: 6.5.0 - vfile: 6.0.1 - vfile-location: 5.0.2 - web-namespaces: 2.0.1 + space-separated-tokens: 2.0.2 + style-to-object: 1.0.6 + unist-util-position: 5.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color dev: false - /hast-util-parse-selector@3.1.1: - resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + /hast-util-to-string@3.0.0: + resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==} dependencies: - '@types/hast': 2.3.10 + '@types/hast': 3.0.4 dev: false - /hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} dependencies: '@types/hast': 3.0.4 dev: false - /hast-util-to-estree@2.3.3: - resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} - dependencies: - '@types/estree': 1.0.5 - '@types/estree-jsx': 1.0.5 - '@types/hast': 2.3.10 - '@types/unist': 2.0.10 - comma-separated-tokens: 2.0.3 - estree-util-attach-comments: 2.1.1 - estree-util-is-identifier-name: 2.1.0 - hast-util-whitespace: 2.0.1 - mdast-util-mdx-expression: 1.3.2 - mdast-util-mdxjs-esm: 1.3.1 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - style-to-object: 0.4.4 - unist-util-position: 4.0.4 - zwitch: 2.0.4 - transitivePeerDependencies: - - supports-color - dev: false - - /hast-util-to-string@3.0.0: - resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==} - dependencies: - '@types/hast': 3.0.4 - dev: false - - /hast-util-whitespace@2.0.1: - resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} - dev: false - - /hastscript@7.2.0: - resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} - dependencies: - '@types/hast': 2.3.10 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 3.1.1 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - dev: false - - /hastscript@8.0.0: - resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 4.0.0 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - dev: false - /heap@0.2.7: resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} dev: true @@ -6081,6 +6282,10 @@ packages: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: false + /inline-style-parser@0.2.3: + resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==} + dev: false + /internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} @@ -6155,11 +6360,6 @@ packages: has-tostringtag: 1.0.2 dev: true - /is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - dev: false - /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} @@ -6195,6 +6395,11 @@ packages: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} dev: false + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: false + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -6391,11 +6596,20 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: false + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 + dev: true /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} @@ -6478,9 +6692,9 @@ packages: json-buffer: 3.0.1 dev: true - /kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} dev: false /language-subtag-registry@0.3.22: @@ -6533,7 +6747,6 @@ packages: /lodash.castarray@4.4.0: resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} - dev: true /lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} @@ -6541,11 +6754,9 @@ packages: /lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true /lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} @@ -6603,36 +6814,30 @@ packages: react: 18.2.0 dev: false - /markdown-extensions@1.1.1: - resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} - engines: {node: '>=0.10.0'} + /lucide-react@0.378.0(react@18.2.0): + resolution: {integrity: sha512-u6EPU8juLUk9ytRcyapkWI18epAv3RU+6+TC23ivjR0e+glWKBobFeSgRwOIJihzktILQuy6E0E80P2jVTDR5g==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 dev: false - /mdast-util-definitions@5.1.2: - resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} - dependencies: - '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 - unist-util-visit: 4.1.2 + /markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} dev: false - /mdast-util-from-markdown@1.3.1: - resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + /markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + dev: false + + /mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} dependencies: - '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 - decode-named-character-reference: 1.0.2 - mdast-util-to-string: 3.2.0 - micromark: 3.2.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-decode-string: 1.1.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - unist-util-stringify-position: 3.0.3 - uvu: 0.5.6 - transitivePeerDependencies: - - supports-color + '@types/mdast': 4.0.3 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 dev: false /mdast-util-from-markdown@2.0.0: @@ -6654,68 +6859,133 @@ packages: - supports-color dev: false - /mdast-util-mdx-expression@1.3.2: - resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + /mdast-util-gfm-autolink-literal@2.0.0: + resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==} + dependencies: + '@types/mdast': 4.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.1 + micromark-util-character: 2.1.0 + dev: false + + /mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + markdown-table: 3.0.3 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + dependencies: + mdast-util-from-markdown: 2.0.0 + mdast-util-gfm-autolink-literal: 2.0.0 + mdast-util-gfm-footnote: 2.0.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-expression@2.0.0: + resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 2.3.10 - '@types/mdast': 3.0.15 - mdast-util-from-markdown: 1.3.1 - mdast-util-to-markdown: 1.5.0 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color dev: false - /mdast-util-mdx-jsx@2.1.4: - resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + /mdast-util-mdx-jsx@3.1.2: + resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==} dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 2.3.10 - '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 ccount: 2.0.1 - mdast-util-from-markdown: 1.3.1 - mdast-util-to-markdown: 1.5.0 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 parse-entities: 4.0.1 stringify-entities: 4.0.4 - unist-util-remove-position: 4.0.2 - unist-util-stringify-position: 3.0.3 - vfile-message: 3.1.4 + unist-util-remove-position: 5.0.0 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 transitivePeerDependencies: - supports-color dev: false - /mdast-util-mdx@2.0.1: - resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + /mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} dependencies: - mdast-util-from-markdown: 1.3.1 - mdast-util-mdx-expression: 1.3.2 - mdast-util-mdx-jsx: 2.1.4 - mdast-util-mdxjs-esm: 1.3.1 - mdast-util-to-markdown: 1.5.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.1.2 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color dev: false - /mdast-util-mdxjs-esm@1.3.1: - resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + /mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} dependencies: '@types/estree-jsx': 1.0.5 - '@types/hast': 2.3.10 - '@types/mdast': 3.0.15 - mdast-util-from-markdown: 1.3.1 - mdast-util-to-markdown: 1.5.0 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color dev: false - /mdast-util-phrasing@3.0.1: - resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} - dependencies: - '@types/mdast': 3.0.15 - unist-util-is: 5.2.1 - dev: false - /mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} dependencies: @@ -6723,30 +6993,18 @@ packages: unist-util-is: 6.0.0 dev: false - /mdast-util-to-hast@12.3.0: - resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + /mdast-util-to-hast@13.1.0: + resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==} dependencies: - '@types/hast': 2.3.10 - '@types/mdast': 3.0.15 - mdast-util-definitions: 5.1.2 - micromark-util-sanitize-uri: 1.2.0 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 trim-lines: 3.0.1 - unist-util-generated: 2.0.1 - unist-util-position: 4.0.4 - unist-util-visit: 4.1.2 - dev: false - - /mdast-util-to-markdown@1.5.0: - resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} - dependencies: - '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 - longest-streak: 3.1.0 - mdast-util-phrasing: 3.0.1 - mdast-util-to-string: 3.2.0 - micromark-util-decode-string: 1.1.0 - unist-util-visit: 4.1.2 - zwitch: 2.0.4 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 dev: false /mdast-util-to-markdown@2.1.0: @@ -6762,30 +7020,12 @@ packages: zwitch: 2.0.4 dev: false - /mdast-util-to-string@3.2.0: - resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} - dependencies: - '@types/mdast': 3.0.15 - dev: false - /mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} dependencies: '@types/mdast': 4.0.3 dev: false - /mdast-util-toc@7.0.0: - resolution: {integrity: sha512-C28UcSqjmnWuvgT8d97qpaItHKvySqVPAECUzqQ51xuMyNFFJwcFoKW77KoMjtXrclTidLQFDzLUmTmrshRweA==} - dependencies: - '@types/mdast': 4.0.3 - '@types/ungap__structured-clone': 0.3.3 - '@ungap/structured-clone': 1.2.0 - github-slugger: 2.0.0 - mdast-util-to-string: 4.0.0 - unist-util-is: 6.0.0 - unist-util-visit: 5.0.0 - dev: false - /memoizee@0.4.15: resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} dependencies: @@ -6803,27 +7043,6 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - /micromark-core-commonmark@1.1.0: - resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} - dependencies: - decode-named-character-reference: 1.0.2 - micromark-factory-destination: 1.1.0 - micromark-factory-label: 1.1.0 - micromark-factory-space: 1.1.0 - micromark-factory-title: 1.1.0 - micromark-factory-whitespace: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-chunked: 1.1.0 - micromark-util-classify-character: 1.1.0 - micromark-util-html-tag-name: 1.2.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-resolve-all: 1.1.0 - micromark-util-subtokenize: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - dev: false - /micromark-core-commonmark@2.0.1: resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} dependencies: @@ -6845,73 +7064,137 @@ packages: micromark-util-types: 2.0.0 dev: false - /micromark-extension-mdx-expression@1.0.8: - resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + /micromark-extension-gfm-autolink-literal@2.0.0: + resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm-footnote@2.0.0: + resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==} + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm-table@2.0.0: + resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + dependencies: + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm-task-list-item@2.0.1: + resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + dependencies: + micromark-extension-gfm-autolink-literal: 2.0.0 + micromark-extension-gfm-footnote: 2.0.0 + micromark-extension-gfm-strikethrough: 2.0.0 + micromark-extension-gfm-table: 2.0.0 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.0.1 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-mdx-expression@3.0.0: + resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} dependencies: '@types/estree': 1.0.5 - micromark-factory-mdx-expression: 1.0.9 - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-events-to-acorn: 1.2.3 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: false - /micromark-extension-mdx-jsx@1.0.5: - resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + /micromark-extension-mdx-jsx@3.0.0: + resolution: {integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==} dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.5 - estree-util-is-identifier-name: 2.1.0 - micromark-factory-mdx-expression: 1.0.9 - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - vfile-message: 3.1.4 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 dev: false - /micromark-extension-mdx-md@1.0.1: - resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + /micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} dependencies: - micromark-util-types: 1.1.0 + micromark-util-types: 2.0.0 dev: false - /micromark-extension-mdxjs-esm@1.0.5: - resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + /micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} dependencies: '@types/estree': 1.0.5 - micromark-core-commonmark: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-events-to-acorn: 1.2.3 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - unist-util-position-from-estree: 1.1.2 - uvu: 0.5.6 - vfile-message: 3.1.4 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.2 dev: false - /micromark-extension-mdxjs@1.0.1: - resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + /micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} dependencies: acorn: 8.11.3 acorn-jsx: 5.3.2(acorn@8.11.3) - micromark-extension-mdx-expression: 1.0.8 - micromark-extension-mdx-jsx: 1.0.5 - micromark-extension-mdx-md: 1.0.1 - micromark-extension-mdxjs-esm: 1.0.5 - micromark-util-combine-extensions: 1.1.0 - micromark-util-types: 1.1.0 - dev: false - - /micromark-factory-destination@1.1.0: - resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 + micromark-extension-mdx-expression: 3.0.0 + micromark-extension-mdx-jsx: 3.0.0 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 dev: false /micromark-factory-destination@2.0.0: @@ -6922,15 +7205,6 @@ packages: micromark-util-types: 2.0.0 dev: false - /micromark-factory-label@1.1.0: - resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - dev: false - /micromark-factory-label@2.0.0: resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} dependencies: @@ -6940,24 +7214,17 @@ packages: micromark-util-types: 2.0.0 dev: false - /micromark-factory-mdx-expression@1.0.9: - resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + /micromark-factory-mdx-expression@2.0.1: + resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==} dependencies: '@types/estree': 1.0.5 - micromark-util-character: 1.2.0 - micromark-util-events-to-acorn: 1.2.3 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - unist-util-position-from-estree: 1.1.2 - uvu: 0.5.6 - vfile-message: 3.1.4 - dev: false - - /micromark-factory-space@1.1.0: - resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} - dependencies: - micromark-util-character: 1.2.0 - micromark-util-types: 1.1.0 + devlop: 1.1.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.2 dev: false /micromark-factory-space@2.0.0: @@ -6967,15 +7234,6 @@ packages: micromark-util-types: 2.0.0 dev: false - /micromark-factory-title@1.1.0: - resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - dev: false - /micromark-factory-title@2.0.0: resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} dependencies: @@ -6985,15 +7243,6 @@ packages: micromark-util-types: 2.0.0 dev: false - /micromark-factory-whitespace@1.1.0: - resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - dev: false - /micromark-factory-whitespace@2.0.0: resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} dependencies: @@ -7003,13 +7252,6 @@ packages: micromark-util-types: 2.0.0 dev: false - /micromark-util-character@1.2.0: - resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} - dependencies: - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - dev: false - /micromark-util-character@2.1.0: resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} dependencies: @@ -7017,26 +7259,12 @@ packages: micromark-util-types: 2.0.0 dev: false - /micromark-util-chunked@1.1.0: - resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} - dependencies: - micromark-util-symbol: 1.1.0 - dev: false - /micromark-util-chunked@2.0.0: resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} dependencies: micromark-util-symbol: 2.0.0 dev: false - /micromark-util-classify-character@1.1.0: - resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - dev: false - /micromark-util-classify-character@2.0.0: resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} dependencies: @@ -7045,13 +7273,6 @@ packages: micromark-util-types: 2.0.0 dev: false - /micromark-util-combine-extensions@1.1.0: - resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} - dependencies: - micromark-util-chunked: 1.1.0 - micromark-util-types: 1.1.0 - dev: false - /micromark-util-combine-extensions@2.0.0: resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} dependencies: @@ -7059,27 +7280,12 @@ packages: micromark-util-types: 2.0.0 dev: false - /micromark-util-decode-numeric-character-reference@1.1.0: - resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} - dependencies: - micromark-util-symbol: 1.1.0 - dev: false - /micromark-util-decode-numeric-character-reference@2.0.1: resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} dependencies: micromark-util-symbol: 2.0.0 dev: false - /micromark-util-decode-string@1.1.0: - resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} - dependencies: - decode-named-character-reference: 1.0.2 - micromark-util-character: 1.2.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-symbol: 1.1.0 - dev: false - /micromark-util-decode-string@2.0.0: resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} dependencies: @@ -7089,67 +7295,39 @@ packages: micromark-util-symbol: 2.0.0 dev: false - /micromark-util-encode@1.1.0: - resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} - dev: false - /micromark-util-encode@2.0.0: resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} dev: false - /micromark-util-events-to-acorn@1.2.3: - resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + /micromark-util-events-to-acorn@2.0.2: + resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.5 - '@types/unist': 2.0.10 - estree-util-visit: 1.2.1 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - vfile-message: 3.1.4 - dev: false - - /micromark-util-html-tag-name@1.2.0: - resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + '@types/unist': 3.0.2 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 dev: false /micromark-util-html-tag-name@2.0.0: resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} dev: false - /micromark-util-normalize-identifier@1.1.0: - resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} - dependencies: - micromark-util-symbol: 1.1.0 - dev: false - /micromark-util-normalize-identifier@2.0.0: resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} dependencies: micromark-util-symbol: 2.0.0 dev: false - /micromark-util-resolve-all@1.1.0: - resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} - dependencies: - micromark-util-types: 1.1.0 - dev: false - /micromark-util-resolve-all@2.0.0: resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} dependencies: micromark-util-types: 2.0.0 dev: false - /micromark-util-sanitize-uri@1.2.0: - resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} - dependencies: - micromark-util-character: 1.2.0 - micromark-util-encode: 1.1.0 - micromark-util-symbol: 1.1.0 - dev: false - /micromark-util-sanitize-uri@2.0.0: resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} dependencies: @@ -7158,15 +7336,6 @@ packages: micromark-util-symbol: 2.0.0 dev: false - /micromark-util-subtokenize@1.1.0: - resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} - dependencies: - micromark-util-chunked: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - dev: false - /micromark-util-subtokenize@2.0.1: resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} dependencies: @@ -7176,46 +7345,14 @@ packages: micromark-util-types: 2.0.0 dev: false - /micromark-util-symbol@1.1.0: - resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - dev: false - /micromark-util-symbol@2.0.0: resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} dev: false - /micromark-util-types@1.1.0: - resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - dev: false - /micromark-util-types@2.0.0: resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} dev: false - /micromark@3.2.0: - resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} - dependencies: - '@types/debug': 4.1.12 - debug: 4.3.4 - decode-named-character-reference: 1.0.2 - micromark-core-commonmark: 1.1.0 - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-chunked: 1.1.0 - micromark-util-combine-extensions: 1.1.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-encode: 1.1.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-resolve-all: 1.1.0 - micromark-util-sanitize-uri: 1.2.0 - micromark-util-subtokenize: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - transitivePeerDependencies: - - supports-color - dev: false - /micromark@4.0.0: resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} dependencies: @@ -7300,11 +7437,6 @@ packages: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} - /mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - dev: false - /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -7328,6 +7460,11 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + /next-auth@4.24.7(next@14.2.3)(nodemailer@6.9.13)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-iChjE8ov/1K/z98gdKbn2Jw+2vLgJtVV39X+rCP5SGnVQuco7QOr19FRNGMIrD8d3LYhHWV9j9sKLzq1aDWWQQ==} peerDependencies: @@ -7354,23 +7491,6 @@ packages: uuid: 8.3.2 dev: false - /next-mdx-remote@4.4.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1BvyXaIou6xy3XoNF4yaMZUCb6vD2GTAa5ciOa6WoO+gAUTYsb1K4rI/HSC2ogAWLrb/7VSV52skz07vOzmqIQ==} - engines: {node: '>=14', npm: '>=7'} - peerDependencies: - react: '>=16.x <=18.x' - react-dom: '>=16.x <=18.x' - dependencies: - '@mdx-js/mdx': 2.3.0 - '@mdx-js/react': 2.3.0(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - vfile: 5.3.7 - vfile-matter: 3.0.1 - transitivePeerDependencies: - - supports-color - dev: false - /next-themes@0.2.1(next@14.2.3)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} peerDependencies: @@ -7474,6 +7594,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /npm-to-yarn@2.2.1: + resolution: {integrity: sha512-O/j/ROyX0KGLG7O6Ieut/seQ0oiTpHF2tXAcFbpdTLQFiaNtkyTXXocM1fwpaa60dg1qpWj0nHlbNhx6qwuENQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: false + /oauth4webapi@2.10.4: resolution: {integrity: sha512-DSoj8QoChzOCQlJkRmYxAJCIpnXFW32R0Uq7avyghIeB6iJq0XAblOD7pcq3mx4WEBDwMuKr0Y1qveCBleG2Xw==} dev: false @@ -7655,16 +7780,6 @@ packages: lines-and-columns: 1.2.4 dev: true - /parse-numeric-range@1.3.0: - resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} - dev: false - - /parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} - dependencies: - entities: 4.5.0 - dev: false - /parseley@0.12.1: resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} dependencies: @@ -7843,7 +7958,6 @@ packages: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true /postcss-selector-parser@6.0.16: resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} @@ -8060,6 +8174,16 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + /react-medium-image-zoom@5.2.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-XLu/fLqpbmhiDAGA6yie78tDv4kh8GxvS7kKQArSOvCvm5zvgItoh4h01NAAvnezQ60ovsTeedHiHG3eG9CcGg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react-remove-scroll-bar@2.3.6(@types/react@18.3.1)(react@18.2.0): resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} engines: {node: '>=10'} @@ -8076,6 +8200,25 @@ packages: tslib: 2.6.2 dev: false + /react-remove-scroll@2.5.10(@types/react@18.3.1)(react@18.2.0): + resolution: {integrity: sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.1 + react: 18.2.0 + react-remove-scroll-bar: 2.3.6(@types/react@18.3.1)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.3.1)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.2(@types/react@18.3.1)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.3.1)(react@18.2.0) + dev: false + /react-remove-scroll@2.5.4(@types/react@18.3.1)(react@18.2.0): resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} engines: {node: '>=10'} @@ -8241,15 +8384,6 @@ packages: which-builtin-type: 1.1.3 dev: true - /refractor@4.8.1: - resolution: {integrity: sha512-/fk5sI0iTgFYlmVGYVew90AoYnNMP6pooClx/XKqyeeCQXrL0Kvgn8V0VEht5ccdljbzzF1i3Q213gcntkRExg==} - dependencies: - '@types/hast': 2.3.10 - '@types/prismjs': 1.26.3 - hastscript: 7.2.0 - parse-entities: 4.0.1 - dev: false - /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -8275,40 +8409,24 @@ packages: jsesc: 0.5.0 dev: true - /rehype-parse@9.0.0: - resolution: {integrity: sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==} + /remark-gfm@4.0.0: + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} dependencies: - '@types/hast': 3.0.4 - hast-util-from-html: 2.0.1 + '@types/mdast': 4.0.3 + mdast-util-gfm: 3.0.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 unified: 11.0.4 - dev: false - - /rehype-prism-plus@2.0.0: - resolution: {integrity: sha512-FeM/9V2N7EvDZVdR2dqhAzlw5YI49m9Tgn7ZrYJeYHIahM6gcXpH0K1y2gNnKanZCydOMluJvX2cB9z3lhY8XQ==} - dependencies: - hast-util-to-string: 3.0.0 - parse-numeric-range: 1.3.0 - refractor: 4.8.1 - rehype-parse: 9.0.0 - unist-util-filter: 5.0.1 - unist-util-visit: 5.0.0 - dev: false - - /remark-mdx@2.3.0: - resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} - dependencies: - mdast-util-mdx: 2.0.1 - micromark-extension-mdxjs: 1.0.1 transitivePeerDependencies: - supports-color dev: false - /remark-parse@10.0.2: - resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + /remark-mdx@3.0.1: + resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} dependencies: - '@types/mdast': 3.0.15 - mdast-util-from-markdown: 1.3.1 - unified: 10.1.2 + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 transitivePeerDependencies: - supports-color dev: false @@ -8324,13 +8442,14 @@ packages: - supports-color dev: false - /remark-rehype@10.1.0: - resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + /remark-rehype@11.1.0: + resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} dependencies: - '@types/hast': 2.3.10 - '@types/mdast': 3.0.15 - mdast-util-to-hast: 12.3.0 - unified: 10.1.2 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + mdast-util-to-hast: 13.1.0 + unified: 11.0.4 + vfile: 6.0.1 dev: false /remark-stringify@11.0.0: @@ -8408,13 +8527,6 @@ packages: dependencies: queue-microtask: 1.2.3 - /sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - dependencies: - mri: 1.2.0 - dev: false - /safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -8440,6 +8552,20 @@ packages: loose-envify: 1.4.0 dev: false + /scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + dependencies: + compute-scroll-into-view: 3.1.0 + dev: false + + /section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + dev: false + /selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} dependencies: @@ -8529,6 +8655,12 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + /shiki@1.5.2: + resolution: {integrity: sha512-fpPbuSaatinmdGijE7VYUD3hxLozR3ZZ+iAx8Iy2X6REmJGyF5hQl94SgmiUNTospq346nXUVZx0035dyGvIVw==} + dependencies: + '@shikijs/core': 1.5.2 + dev: false + /side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -8642,6 +8774,10 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: false + /std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} dev: false @@ -8731,6 +8867,11 @@ packages: dependencies: ansi-regex: 6.0.1 + /strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + dev: false + /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -8754,6 +8895,12 @@ packages: inline-style-parser: 0.1.1 dev: false + /style-to-object@1.0.6: + resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==} + dependencies: + inline-style-parser: 0.2.3 + dev: false + /styled-jsx@5.1.1(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} @@ -8808,6 +8955,16 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + /swr@2.2.5(react@18.2.0): + resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==} + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 + dependencies: + client-only: 0.0.1 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + /synckit@0.9.0: resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -9096,18 +9253,6 @@ packages: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true - /unified@10.1.2: - resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} - dependencies: - '@types/unist': 2.0.10 - bail: 2.0.2 - extend: 3.0.2 - is-buffer: 2.0.5 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 5.3.7 - dev: false - /unified@11.0.4: resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} dependencies: @@ -9120,53 +9265,29 @@ packages: vfile: 6.0.1 dev: false - /unist-util-filter@5.0.1: - resolution: {integrity: sha512-pHx7D4Zt6+TsfwylH9+lYhBhzyhEnCXs/lbq/Hstxno5z4gVdyc2WEW0asfjGKPyG4pEKrnBv5hdkO6+aRnQJw==} - dependencies: - '@types/unist': 3.0.2 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - dev: false - - /unist-util-generated@2.0.1: - resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} - dev: false - - /unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} - dependencies: - '@types/unist': 2.0.10 - dev: false - /unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} dependencies: '@types/unist': 3.0.2 dev: false - /unist-util-position-from-estree@1.1.2: - resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} - dependencies: - '@types/unist': 2.0.10 - dev: false - - /unist-util-position@4.0.4: - resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + /unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 3.0.2 dev: false - /unist-util-remove-position@4.0.2: - resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} dependencies: - '@types/unist': 2.0.10 - unist-util-visit: 4.1.2 + '@types/unist': 3.0.2 dev: false - /unist-util-stringify-position@3.0.3: - resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + /unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 3.0.2 + unist-util-visit: 5.0.0 dev: false /unist-util-stringify-position@4.0.0: @@ -9175,13 +9296,6 @@ packages: '@types/unist': 3.0.2 dev: false - /unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 5.2.1 - dev: false - /unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} dependencies: @@ -9189,14 +9303,6 @@ packages: unist-util-is: 6.0.0 dev: false - /unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 - dev: false - /unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} dependencies: @@ -9307,17 +9413,6 @@ packages: hasBin: true dev: false - /uvu@0.5.6: - resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} - engines: {node: '>=8'} - hasBin: true - dependencies: - dequal: 2.0.3 - diff: 5.2.0 - kleur: 4.1.5 - sade: 1.8.1 - dev: false - /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -9339,28 +9434,6 @@ packages: - '@types/react-dom' dev: false - /vfile-location@5.0.2: - resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} - dependencies: - '@types/unist': 3.0.2 - vfile: 6.0.1 - dev: false - - /vfile-matter@3.0.1: - resolution: {integrity: sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==} - dependencies: - '@types/js-yaml': 4.0.9 - is-buffer: 2.0.5 - js-yaml: 4.1.0 - dev: false - - /vfile-message@3.1.4: - resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} - dependencies: - '@types/unist': 2.0.10 - unist-util-stringify-position: 3.0.3 - dev: false - /vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} dependencies: @@ -9368,15 +9441,6 @@ packages: unist-util-stringify-position: 4.0.0 dev: false - /vfile@5.3.7: - resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - dependencies: - '@types/unist': 2.0.10 - is-buffer: 2.0.5 - unist-util-stringify-position: 3.0.3 - vfile-message: 3.1.4 - dev: false - /vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} dependencies: @@ -9404,10 +9468,6 @@ packages: d3-timer: 3.0.1 dev: false - /web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - dev: false - /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -9516,6 +9576,10 @@ packages: /zod@3.23.4: resolution: {integrity: sha512-/AtWOKbBgjzEYYQRNfoGKHObgfAZag6qUJX1VbHo2PRBgS+wfWagEY2mizjfyAPcGesrJOcx/wcl0L9WnVrHFw==} + dev: false + + /zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} /zustand@4.5.2(@types/react@18.3.1)(react@18.2.0): resolution: {integrity: sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==} diff --git a/starterkits/saas/.map.ts b/starterkits/saas/.map.ts new file mode 100644 index 0000000..4da1afa --- /dev/null +++ b/starterkits/saas/.map.ts @@ -0,0 +1,4 @@ +/** Auto-generated **/ +declare const map: Record + +export { map } \ No newline at end of file diff --git a/starterkits/saas/src/content/blog/introduction.mdx b/starterkits/saas/content/blogs/create-saas-in-1-day.mdx similarity index 52% rename from starterkits/saas/src/content/blog/introduction.mdx rename to starterkits/saas/content/blogs/create-saas-in-1-day.mdx index 4984257..a47a6a3 100644 --- a/starterkits/saas/src/content/blog/introduction.mdx +++ b/starterkits/saas/content/blogs/create-saas-in-1-day.mdx @@ -1,39 +1,36 @@ --- -title: Introduction -slug: introduction +title: Create a SaaS in 1 day publishedAt: 2022-01-01 -updatedAt: 2024-05-01 readTime: 5 min -tags: ["introduction", "saas"] +tags: ["saas", "introduction"] description: This is the introduction thumbnail: https://fakeimg.pl/700x400/d1d1d1/6b6b6b --- -## Introduction + +## This is the introduction Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. -## Heading 2 -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. -### Heading 3 +### This is the long heading 3 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. -#### Heading 4 +### This is the long heading 4 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. -##### Heading 5 +### This is the long heading 5 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. -###### Heading 6 +### short heading 6 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. @@ -41,13 +38,27 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praes -This is the first step +## This is the first step + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. -This is the second step +## This is the first step + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. + +This is the first step + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. diff --git a/starterkits/saas/src/content/blog/create-saas-in-1-day.mdx b/starterkits/saas/content/blogs/introduction.mdx similarity index 62% rename from starterkits/saas/src/content/blog/create-saas-in-1-day.mdx rename to starterkits/saas/content/blogs/introduction.mdx index ff37e25..7d7d8fe 100644 --- a/starterkits/saas/src/content/blog/create-saas-in-1-day.mdx +++ b/starterkits/saas/content/blogs/introduction.mdx @@ -1,31 +1,58 @@ --- -title: Create a SaaS in 1 day -slug: create-saas-in-1-day +title: Introduction publishedAt: 2022-01-01 -updatedAt: 2024-05-01 readTime: 5 min -tags: ["saas", "introduction"] +tags: ["introduction", "saas"] description: This is the introduction thumbnail: https://fakeimg.pl/700x400/d1d1d1/6b6b6b --- +## Introduction -## This is the introduction +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. + + +## Heading 2 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. - +### Heading 3 + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. + - - Tab 1 - Tab 2 - +#### Heading 4 - +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. + + +##### Heading 5 + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. + +###### Heading 6 + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. + + + + + +This is the first step + + + + + +This is the second step + + + + ```tsx -import { useState } from "react"; +import {useState} from "react"; function Counter() { const [count, setCount] = useState(0); @@ -41,12 +68,8 @@ function Counter() { } ``` - - - - ```tsx -import { useState } from "react"; +import {useState} from "react"; function Counter() { const [count, setCount] = useState(0); @@ -60,45 +83,38 @@ function Counter() { ); } - -export default Counter; ``` - - - - - -### This is the long heading 3 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. - - -### This is the long heading 4 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. - - -### This is the long heading 5 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. - -### short heading 6 - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. - - - - +```tsx title="Counter.tsx" +import {useState} from "react"; -This is the first step - - +function Counter() { + const [count, setCount] = useState(0); - + return ( +
+

You clicked {count} times

+ +
+ ); +} +``` -This is the second step +```tsx +import {useState} from "react"; -
+function Counter() { + const [count, setCount] = useState(0); -
\ No newline at end of file + return ( +
+

You clicked {count} times

+ +
+ ); +} +``` \ No newline at end of file diff --git a/starterkits/saas/content/changelogs/final.mdx b/starterkits/saas/content/changelogs/final.mdx new file mode 100644 index 0000000..561b5ed --- /dev/null +++ b/starterkits/saas/content/changelogs/final.mdx @@ -0,0 +1,27 @@ +--- +title: "Launch of RapidLaunch 3" +description: "RapidLaunch is a platform to create and launch SaaS products quickly." +version: "0.4.0" +publishedAt: 2024-10-06 +thumbnail: "https://fakeimg.pl/896x400/d1d1d1/6b6b6b" +--- + + +### Features + +- Create and launch SaaS products quickly. +- Manage your SaaS products from a single dashboard. +- Monitor your SaaS products and get real-time insights. +- Track your SaaS product usage and performance. +- Manage your SaaS product plans and billing. +- Integrate with your existing SaaS products. +- Get support and help from RapidLaunch's community. + + +### Pricing + +RapidLaunch is a free SaaS product. You can try it out for free and see how it works. + +### Support + +If you have any questions or issues, you can contact us at [support@rapidlaunch.xyz](mailto:support@rapidlaunch.xyz). \ No newline at end of file diff --git a/starterkits/saas/content/changelogs/launch.mdx b/starterkits/saas/content/changelogs/launch.mdx new file mode 100644 index 0000000..b9ccd49 --- /dev/null +++ b/starterkits/saas/content/changelogs/launch.mdx @@ -0,0 +1,27 @@ +--- +title: "Launch of RapidLaunch" +description: "RapidLaunch is a platform to create and launch SaaS products quickly." +version: "0.0.0" +publishedAt: 2024-04-01 +--- + +RapidLaunch is a platform to create and launch SaaS products quickly. + +### Features + +- Create and launch SaaS products quickly. +- Manage your SaaS products from a single dashboard. +- Monitor your SaaS products and get real-time insights. +- Track your SaaS product usage and performance. +- Manage your SaaS product plans and billing. +- Integrate with your existing SaaS products. +- Get support and help from RapidLaunch's community. + + +### Pricing + +RapidLaunch is a free SaaS product. You can try it out for free and see how it works. + +### Support + +If you have any questions or issues, you can contact us at [support@rapidlaunch.xyz](mailto:support@rapidlaunch.xyz). diff --git a/starterkits/saas/content/changelogs/testing.mdx b/starterkits/saas/content/changelogs/testing.mdx new file mode 100644 index 0000000..ddc3329 --- /dev/null +++ b/starterkits/saas/content/changelogs/testing.mdx @@ -0,0 +1,27 @@ +--- +title: "Launch of RapidLaunch 2" +description: "RapidLaunch is a platform to create and launch SaaS products quickly." +version: "0.1.0" +publishedAt: 2024-08-01 +thumbnail: "https://fakeimg.pl/896x400/d1d1d1/6b6b6b" +--- + + +### Features + +- Create and launch SaaS products quickly. +- Manage your SaaS products from a single dashboard. +- Monitor your SaaS products and get real-time insights. +- Track your SaaS product usage and performance. +- Manage your SaaS product plans and billing. +- Integrate with your existing SaaS products. +- Get support and help from RapidLaunch's community. + + +### Pricing + +RapidLaunch is a free SaaS product. You can try it out for free and see how it works. + +### Support + +If you have any questions or issues, you can contact us at [support@rapidlaunch.xyz](mailto:support@rapidlaunch.xyz). \ No newline at end of file diff --git a/starterkits/saas/src/content/docs/introduction.mdx b/starterkits/saas/content/docs/index.mdx similarity index 65% rename from starterkits/saas/src/content/docs/introduction.mdx rename to starterkits/saas/content/docs/index.mdx index 2225ede..29ff1aa 100644 --- a/starterkits/saas/src/content/docs/introduction.mdx +++ b/starterkits/saas/content/docs/index.mdx @@ -1,8 +1,6 @@ --- title: "Introduction" -slug: "/" description: "Rapidlaunch is an open-source Next.js SaaS Starterkit/Boilerplate designed to expedite the development process of Software as a Service (SaaS) applications. Launch your MVP in days." -publishedAt: 2024-01-01 --- ## Creator @@ -31,48 +29,3 @@ This project is for developers who want to build a Software as a Service (SaaS) ## Why Rapidlaunch? Rapidlaunch is an open-source Next.js SaaS Starterkit/Boilerplate designed to expedite the development process of Software as a Service (SaaS) applications. Launch your MVP in days. - - -## Contributing -Contributing is always welcome. Contribution guidelines are coming soon. - - -## Sub Heading Test -This is a test of the sub heading - -### Sub Heading Test 1 -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac nisl nec nunc ultricies tincidunt. Nullam nec nunc nec nunc ultricies - -### Sub Heading Test 2 -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac nisl nec nunc ultricies tincidunt. Nullam nec nunc nec nunc ultricies - -## Tab Test -This is a test of the tabs - - - - - Tab 1 - Tab 2 - - - - -```bash {2} -# Tab 1 Content -const test1 = 'test 1' -``` - - - - - - -```bash {2} -# Tab 2 Content -const test2 = 'test 2' -``` - - - - \ No newline at end of file diff --git a/starterkits/saas/content/docs/installation.mdx b/starterkits/saas/content/docs/installation.mdx new file mode 100644 index 0000000..5d8aeda --- /dev/null +++ b/starterkits/saas/content/docs/installation.mdx @@ -0,0 +1,114 @@ +--- +title: "Installation" +description: "This content doesn't mean anything it is generated by copilot" +--- + +## Installation + +Rapidlaunch is available as a [Docker image](https://hub.docker.com/r/rapidlaunch/rapidlaunch/) on Docker Hub. + +### Docker + +```bash +docker run -d -p 8080:8080 rapidlaunch/rapidlaunch +``` + +### Docker Compose + +```yaml +version: "3.7" +services: + rapidlaunch: + image: rapidlaunch/rapidlaunch + ports: + - "8080:8080" +``` + +### Kubernetes + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: rapidlaunch +spec: + replicas: 1 + selector: + matchLabels: + app: rapidlaunch + template: + metadata: + labels: + app: rapidlaunch + spec: + containers: + - name: rapidlaunch + image: rapidlaunch/rapidlaunch + ports: + - containerPort: 8080 +``` + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: rapidlaunch +spec: + selector: + app: rapidlaunch + ports: + - protocol: TCP + port: 8080 + targetPort: 8080 +``` + +## Configuration + +Rapidlaunch is configured using environment variables. The following environment variables are available: + +| Variable | Description | +| --- | --- | +| `RAPIDLAUNCH_PORT` | The port to listen on. Defaults to `8080`. | +| `RAPIDLAUNCH_AUTH` | The authentication method to use. Defaults to `none`. | +| `RAPIDLAUNCH_AUTH_USERNAME` | The username to use for authentication. | +| `RAPIDLAUNCH_AUTH_PASSWORD` | The password to use for authentication. | +| `RAPIDLAUNCH_SESSION_TTL` | The session TTL in seconds. Defaults to `600`. | +| `RAPIDLAUNCH_SESSION_SECRET` | The session secret. | +| `RAPIDLAUNCH_LOG_LEVEL` | The log level. Defaults to `info`. | +| `RAPIDLAUNCH_LOG_FORMAT` | The log format. Defaults to `text`. | +| `RAPIDLAUNCH_LOG_FILE` | The log file. | +| `RAPIDLAUNCH_DB_URL` | The database URL. | +| `RAPIDLAUNCH_DB_POOL_SIZE` | The database pool size. Defaults to `10`. | +| `RAPIDLAUNCH_DB_POOL_TIMEOUT` | The database pool timeout in seconds. Defaults to `30`. | +| `RAPIDLAUNCH_DB_MAX_IDLE` | The maximum number of idle connections in the pool. Defaults to `5`. | +| `RAPIDLAUNCH_DB_MIN_IDLE` | The minimum number of idle connections in the pool. Defaults to `0`. | +| `RAPIDLAUNCH_DB_MAX_AGE` | The maximum age of a connection in the pool in seconds. Defaults to `300`. | +| `RAPIDLAUNCH_DB_MIN_AGE` | The minimum age of a connection in the pool in seconds. Defaults to `0`. | +| `RAPIDLAUNCH_DB_TEST_ON_BORROW` | Whether to test a connection on borrow. Defaults to `true`. | +| `RAPIDLAUNCH_DB_TEST_ON_RETURN` | Whether to test a connection on return. Defaults to `true`. | +| `RAPIDLAUNCH_JWT_SECRET` | The JWT secret. | +| `RAPIDLAUNCH_JWT_EXPIRATION` | The JWT expiration in seconds. Defaults to `3600`. | +| `RAPIDLAUNCH_JWT_ALGORITHM` | The JWT algorithm. Defaults to `HS256`. | +| `RAPIDLAUNCH_JWT_ISSUER` | The JWT issuer. | +| `RAPIDLAUNCH_JWT_AUDIENCE` | The JWT audience. | +| `RAPIDLAUNCH_JWT_SUBJECT` | The JWT subject. | +| `RAPIDLAUNCH_JWT_PUBLIC_KEY` | The JWT public key. | +| `RAPIDLAUNCH_JWT_PRIVATE_KEY` | The JWT private key. | +| `RAPIDLAUNCH_JWT_HEADER` | The JWT header. Defaults to `Authorization`. | +| `RAPIDLAUNCH_JWT_CLAIMS` | The JWT claims. | +| `RAPIDLAUNCH_JWT_CLAIMS_AUDIENCE` | The JWT audience claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_ISSUER` | The JWT issuer claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_SUBJECT` | The JWT subject claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_EXPIRATION` | The JWT expiration claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_NOT_BEFORE` | The JWT not before claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_ISSUED_AT` | The JWT issued at claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_ID` | The JWT id claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_PUBLIC_KEY` | The JWT public key claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_PRIVATE_KEY` | The JWT private key claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_HEADER` | The JWT header claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_CLAIMS` | The JWT claims claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_CLAIMS_AUDIENCE` | The JWT audience claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_CLAIMS_ISSUER` | The JWT issuer claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_CLAIMS_SUBJECT` | The JWT subject claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_CLAIMS_EXPIRATION` | The JWT expiration claim. | +| `RAPIDLAUNCH_JWT_CLAIMS_CLAIMS_NOT_BEFORE` | The JWT not before claim. | \ No newline at end of file diff --git a/starterkits/saas/mdx-components.tsx b/starterkits/saas/mdx-components.tsx new file mode 100644 index 0000000..5eb17ab --- /dev/null +++ b/starterkits/saas/mdx-components.tsx @@ -0,0 +1,20 @@ +import type { MDXComponents } from "mdx/types"; +import defaultComponents from "fumadocs-ui/mdx"; +import { Step, Steps } from "fumadocs-ui/components/steps"; +import { Tab, Tabs } from "fumadocs-ui/components/tabs"; +import { TypeTable } from "fumadocs-ui/components/type-table"; +import { Accordion, Accordions } from "fumadocs-ui/components/accordion"; + +export function useMDXComponents(components?: MDXComponents): MDXComponents { + return { + Step, + Steps, + Tab, + Tabs, + TypeTable, + Accordion, + Accordions, + ...defaultComponents, + ...components, + }; +} diff --git a/starterkits/saas/next.config.mjs b/starterkits/saas/next.config.mjs index dfd0bfc..edf63f0 100644 --- a/starterkits/saas/next.config.mjs +++ b/starterkits/saas/next.config.mjs @@ -4,6 +4,13 @@ */ await import("./src/env.js"); +import createMDX from "fumadocs-mdx/config"; + +const withMDX = createMDX({ + mdxOptions: { + lastModifiedTime: "git", + }, +}); /** @type {import('next').NextConfig} */ const nextConfig = { @@ -36,4 +43,4 @@ const nextConfig = { skipTrailingSlashRedirect: true, }; -export default nextConfig; +export default withMDX(nextConfig); diff --git a/starterkits/saas/package.json b/starterkits/saas/package.json index b42e8a8..9728c6f 100644 --- a/starterkits/saas/package.json +++ b/starterkits/saas/package.json @@ -36,6 +36,7 @@ "@t3-oss/env-nextjs": "^0.9.2", "@tanstack/react-query": "^5.29.2", "@tanstack/react-table": "^8.16.0", + "@types/mdx": "^2.0.13", "@uploadthing/react": "^6.4.4", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", @@ -43,14 +44,14 @@ "date-fns": "^3.6.0", "drizzle-orm": "^0.29.4", "drizzle-zod": "^0.5.1", + "fumadocs-core": "^11.1.1", + "fumadocs-mdx": "^8.2.19", + "fumadocs-ui": "^11.1.1", "geist": "^1.3.0", - "github-slugger": "^2.0.0", "json2csv": "6.0.0-alpha.2", "lucide-react": "^0.368.0", - "mdast-util-toc": "^7.0.0", "next": "^14.2.1", "next-auth": "^4.24.6", - "next-mdx-remote": "^4.4.1", "next-themes": "^0.3.0", "nodemailer": "^6.9.13", "postgres": "^3.4.3", @@ -60,19 +61,16 @@ "react-hook-form": "^7.51.3", "react-wrap-balancer": "^1.1.0", "recharts": "^2.12.6", - "rehype-prism-plus": "^2.0.0", - "remark": "^15.0.1", "resend": "^3.2.0", "server-only": "^0.0.1", "sonner": "^1.4.41", "superjson": "^2.2.1", "tailwind-merge": "^2.2.2", "tailwindcss-animate": "^1.0.7", - "unist-util-visit": "^5.0.0", "uploadthing": "^6.9.0", "uuid": "^9.0.1", "vaul": "^0.9.0", - "zod": "^3.22.4", + "zod": "^3.23.8", "zustand": "^4.5.2" }, "devDependencies": { diff --git a/starterkits/saas/src/app/(web)/_components/header.tsx b/starterkits/saas/src/app/(web)/_components/header.tsx index 006f891..a768c6a 100644 --- a/starterkits/saas/src/app/(web)/_components/header.tsx +++ b/starterkits/saas/src/app/(web)/_components/header.tsx @@ -17,7 +17,7 @@ export function WebHeader() { - + diff --git a/starterkits/saas/src/app/(web)/blog/[slug]/page.tsx b/starterkits/saas/src/app/(web)/blogs/[...slug]/page.tsx similarity index 54% rename from starterkits/saas/src/app/(web)/blog/[slug]/page.tsx rename to starterkits/saas/src/app/(web)/blogs/[...slug]/page.tsx index 833e423..7fb99d5 100644 --- a/starterkits/saas/src/app/(web)/blog/[slug]/page.tsx +++ b/starterkits/saas/src/app/(web)/blogs/[...slug]/page.tsx @@ -1,97 +1,94 @@ import { WebPageWrapper } from "@/app/(web)/_components/general-components"; import { Badge } from "@/components/ui/badge"; -import { siteUrls } from "@/config/urls"; -import { getBlogs } from "@/server/actions/blog"; import { format } from "date-fns"; import Image from "next/image"; -import { notFound, redirect } from "next/navigation"; +import { notFound } from "next/navigation"; import { type Metadata } from "next"; +import { blogs } from "@/app/source"; +import { useMDXComponents } from "mdx-components"; +import { DocsBody } from "fumadocs-ui/page"; export const dynamic = "force-static"; type BlogSlugPageProps = { params: { - slug: string; + slug: string[]; }; }; -export async function generateMetadata({ - params, -}: BlogSlugPageProps): Promise { - const slug = params.slug; - - const blog = (await getBlogs()).find((b) => b.metaData.slug === slug); - - if (!blog) { - return notFound(); - } - - return { - title: blog.metaData.title, - description: blog.metaData.description, - }; -} - -export async function generateStaticParams() { - const blogs = await getBlogs(); - - return blogs.map((blog) => ({ - slug: blog.metaData.slug, - })); -} - export default async function BlogSlugPage({ params }: BlogSlugPageProps) { - if (!params.slug) { - return redirect(siteUrls.blog); - } + const blog = blogs.getPage(params.slug); - const slug = params.slug; + if (blog == null) { + notFound(); + } - const blog = (await getBlogs()).find((b) => b.metaData.slug === slug); + const MDX = blog.data.exports.default; - if (!blog) { - return notFound(); - } + const components = useMDXComponents(); return (

- {blog.metaData.title} + {blog.data.title}

{blog.metaData.title}
- {blog.metaData?.tags && blog.metaData.tags.length > 0 && ( + {blog.data.tags && blog.data.tags.length > 0 && (
- {blog.metaData.tags.map((tag) => ( + {blog.data.tags.map((tag) => ( {tag} ))}
)} +

- {format(new Date(blog.metaData.publishedAt), "PPP")} •{" "} - {blog.metaData.readTime} read + {format(new Date(blog.data.publishedAt), "PPP")} •{" "} + {blog.data.readTime} read

- {blog.metaData.updatedAt && ( + {blog.data.exports.lastModified && (

Last updated at{" "} - {format(new Date(blog.metaData.updatedAt), "PPP")} + {format( + new Date(blog.data.exports.lastModified), + "PPP", + )}

)}
- {blog.content} + + +
); } + +export async function generateStaticParams() { + return blogs.getPages().map((page) => ({ + slug: page.slugs, + })); +} + +export function generateMetadata({ params }: { params: { slug?: string[] } }) { + const page = blogs.getPage(params.slug); + + if (page == null) notFound(); + + return { + title: page.data.title, + description: page.data.description, + } satisfies Metadata; +} diff --git a/starterkits/saas/src/app/(web)/blog/_constants/page-config.ts b/starterkits/saas/src/app/(web)/blogs/_constants/page-config.ts similarity index 100% rename from starterkits/saas/src/app/(web)/blog/_constants/page-config.ts rename to starterkits/saas/src/app/(web)/blogs/_constants/page-config.ts diff --git a/starterkits/saas/src/app/(web)/blog/page.tsx b/starterkits/saas/src/app/(web)/blogs/page.tsx similarity index 72% rename from starterkits/saas/src/app/(web)/blog/page.tsx rename to starterkits/saas/src/app/(web)/blogs/page.tsx index ccdb5a5..9e79e8f 100644 --- a/starterkits/saas/src/app/(web)/blog/page.tsx +++ b/starterkits/saas/src/app/(web)/blogs/page.tsx @@ -3,13 +3,12 @@ import { WebPageWrapper, } from "@/app/(web)/_components/general-components"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { siteUrls } from "@/config/urls"; -import { getBlogs } from "@/server/actions/blog"; import { format } from "date-fns"; import Image from "next/image"; import Link from "next/link"; import { type Metadata } from "next"; -import { blogPageConfig } from "@/app/(web)/blog/_constants/page-config"; +import { blogPageConfig } from "@/app/(web)/blogs/_constants/page-config"; +import { blogs } from "@/app/source"; export const metadata: Metadata = { title: blogPageConfig.title, @@ -18,8 +17,6 @@ export const metadata: Metadata = { export const dynamic = "force-static"; export default async function BlogsPage() { - const blogs = await getBlogs(); - return ( @@ -35,37 +32,39 @@ export default async function BlogsPage() { - {blogs?.map((blog) => ( + {blogs.getPages()?.map((blog) => (
{blog.metaData.title}

- {blog.metaData.title} + {blog.data.title}

-

{blog.metaData.description}

+

{blog.data.description}

{format( - new Date(blog.metaData.publishedAt), + new Date(blog.data.publishedAt), "PPP", )}{" "} - • {blog.metaData.readTime} read + • {blog.data.readTime} read

- {blog.metaData.updatedAt && ( + {blog.data.exports.lastModified && (

Last updated at{" "} {format( - new Date(blog.metaData.updatedAt), + new Date( + blog.data.exports.lastModified, + ), "PPP", )}

diff --git a/starterkits/saas/src/app/(web)/changelog/page.tsx b/starterkits/saas/src/app/(web)/changelog/page.tsx deleted file mode 100644 index 58a2ac2..0000000 --- a/starterkits/saas/src/app/(web)/changelog/page.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import { - WebPageHeader, - WebPageWrapper, -} from "@/app/(web)/_components/general-components"; -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { siteConfig } from "@/config/site"; -import { getChangelogs } from "@/server/actions/changelog"; -import { format } from "date-fns"; -import Image from "next/image"; -import type { Metadata } from "next"; -import { changelogPageConfig } from "@/app/(web)/changelog/_constants/page-config"; - -export const metadata: Metadata = { - title: changelogPageConfig.title, -}; - -export const dynamic = "force-static"; - -export default async function ChangeLogPage() { - //filter changelogs by date - const changelogs = (await getChangelogs()).sort( - (a, b) => - Number(new Date(b.metaData.publishedAt)) - - Number(new Date(a.metaData.publishedAt)), - ); - - return ( - - -

- - All the latest features, fixes and work to{" "} - {siteConfig.name}. - -

-
-
- {changelogs.map((changelog, index) => ( - - ))} -
-
- ); -} - -type ChangeLogCardProps = Awaited>[number]; - -function ChangeLogCard({ metaData, content }: ChangeLogCardProps) { - return ( - -
- {metaData.title} -
- - v{metaData.version} - {metaData.title} - {metaData.description} - - -

- Published on {format(new Date(metaData.publishedAt), "PPP")} -

- - {content} -
-
- ); -} diff --git a/starterkits/saas/src/app/(web)/changelog/_constants/page-config.ts b/starterkits/saas/src/app/(web)/changelogs/_constants/page-config.ts similarity index 100% rename from starterkits/saas/src/app/(web)/changelog/_constants/page-config.ts rename to starterkits/saas/src/app/(web)/changelogs/_constants/page-config.ts diff --git a/starterkits/saas/src/app/(web)/changelogs/page.tsx b/starterkits/saas/src/app/(web)/changelogs/page.tsx new file mode 100644 index 0000000..30fc90f --- /dev/null +++ b/starterkits/saas/src/app/(web)/changelogs/page.tsx @@ -0,0 +1,91 @@ +import { + WebPageHeader, + WebPageWrapper, +} from "@/app/(web)/_components/general-components"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { siteConfig } from "@/config/site"; +import { format } from "date-fns"; +import Image from "next/image"; +import type { Metadata } from "next"; +import { changelogPageConfig } from "@/app/(web)/changelogs/_constants/page-config"; +import { changelogs } from "@/app/source"; +import { type InferPageType } from "fumadocs-core/source"; +import { useMDXComponents } from "mdx-components"; +import { DocsBody } from "fumadocs-ui/page"; + +export const metadata: Metadata = { + title: changelogPageConfig.title, +}; + +export const dynamic = "force-static"; + +export default async function ChangeLogPage() { + //filter changelogs by publishedAt + const sortedChangelogs = changelogs + .getPages() + .sort( + (a, b) => + Number(new Date(b.data.publishedAt)) - + Number(new Date(a.data.publishedAt)), + ); + + return ( + + +

+ + All the latest features, fixes and work to{" "} + {siteConfig.name}. + +

+
+
+ {sortedChangelogs.map((changelog, index) => ( + + ))} +
+
+ ); +} + +type ChangeLogCardProps = InferPageType; + +function ChangeLogCard({ data }: ChangeLogCardProps) { + const MDX = data.exports.default; + + const components = useMDXComponents(); + + return ( + + {data?.thumbnail && ( +
+ {data.title} +
+ )} + + v{data.version} + {data.title} + {data.description} +

+ Published on {format(new Date(data.publishedAt), "PPP")} +

+
+ + + + + +
+ ); +} diff --git a/starterkits/saas/src/app/api/(docs)/search/route.ts b/starterkits/saas/src/app/api/(docs)/search/route.ts new file mode 100644 index 0000000..cb7c229 --- /dev/null +++ b/starterkits/saas/src/app/api/(docs)/search/route.ts @@ -0,0 +1,11 @@ +import { docs } from "@/app/source"; +import { createSearchAPI } from "fumadocs-core/search/server"; + +export const { GET } = createSearchAPI("advanced", { + indexes: docs.getPages().map((page) => ({ + title: page.data.title, + structuredData: page.data.exports.structuredData, + id: page.url, + url: page.url, + })), +}); diff --git a/starterkits/saas/src/app/docs/[[...slug]]/page.tsx b/starterkits/saas/src/app/docs/[[...slug]]/page.tsx index 5f74f6e..2949ca1 100644 --- a/starterkits/saas/src/app/docs/[[...slug]]/page.tsx +++ b/starterkits/saas/src/app/docs/[[...slug]]/page.tsx @@ -1,71 +1,52 @@ +import { docs } from "@/app/source"; +import type { Metadata } from "next"; +import { DocsPage, DocsBody } from "fumadocs-ui/page"; import { notFound } from "next/navigation"; -import { Toc } from "@/components/toc"; -import { getDocs } from "@/server/actions/docs"; -import { type Metadata } from "next"; +import { useMDXComponents } from "mdx-components"; +import { RollButton } from "fumadocs-ui/components/roll-button"; export const dynamic = "force-static"; -type DocsSlugPageProps = { - params: { - slug: string[]; - }; -}; - -export async function generateMetadata({ +export default async function Page({ params, -}: DocsSlugPageProps): Promise { - const slug = Array.isArray(params.slug) ? params.slug.join("/") : "/"; - - const doc = (await getDocs()).find((doc) => doc.metaData.slug === slug); +}: { + params: { slug?: string[] }; +}) { + const page = docs.getPage(params.slug); - if (!doc) { - return notFound(); + if (page == null) { + notFound(); } - return { - title: doc.metaData.title, - description: doc.metaData.description, - }; + const MDX = page.data.exports.default; + + const components = useMDXComponents(); + + return ( + + + +

{page.data.title}

+

{page.data.description}

+ +
+
+ ); } export async function generateStaticParams() { - const docs = await getDocs(); - - return docs.map((doc) => ({ - slug: doc.metaData.slug.split("/") || ["/"], + return docs.getPages().map((page) => ({ + slug: page.slugs, })); } -export default async function DocsSlugPage({ params }: DocsSlugPageProps) { - const slug = Array.isArray(params.slug) ? params.slug.join("/") : "/"; +export function generateMetadata({ params }: { params: { slug?: string[] } }) { + const page = docs.getPage(params.slug); - const doc = (await getDocs()).find((doc) => doc.metaData.slug === slug); + if (page == null) notFound(); - console.log(["gettings-started", "installation"].join("/"), params.slug); - - if (!doc) { - return notFound(); - } - - return ( - <> -
-
-

- {doc.metaData.title} -

- {doc.metaData.description && ( -

- {doc.metaData?.description} -

- )} -
- {doc.content} -
- -
- -
- - ); + return { + title: page.data.title, + description: page.data.description, + } satisfies Metadata; } diff --git a/starterkits/saas/src/app/docs/_components/command-menu.tsx b/starterkits/saas/src/app/docs/_components/command-menu.tsx deleted file mode 100644 index 71f845b..0000000 --- a/starterkits/saas/src/app/docs/_components/command-menu.tsx +++ /dev/null @@ -1,168 +0,0 @@ -"use client"; - -import * as React from "react"; -import { useRouter } from "next/navigation"; -import { type DialogProps } from "@radix-ui/react-alert-dialog"; -import { CircleIcon, LaptopIcon, MoonIcon, SunIcon } from "lucide-react"; -import { useTheme } from "next-themes"; - -import { docsConfig } from "@/config/docs"; -import { cn } from "@/lib/utils"; -import { Button } from "@/components/ui/button"; -import { - CommandDialog, - CommandEmpty, - CommandGroup, - CommandInput, - CommandItem, - CommandList, - CommandSeparator, -} from "@/components/ui/command"; -import { Badge } from "@/components/ui/badge"; - -export function CommandMenu({ ...props }: DialogProps) { - const router = useRouter(); - const [open, setOpen] = React.useState(false); - const { setTheme } = useTheme(); - - React.useEffect(() => { - const down = (e: KeyboardEvent) => { - if ((e.key === "k" && (e.metaKey || e.ctrlKey)) || e.key === "/") { - if ( - (e.target instanceof HTMLElement && - e.target.isContentEditable) || - e.target instanceof HTMLInputElement || - e.target instanceof HTMLTextAreaElement || - e.target instanceof HTMLSelectElement - ) { - return; - } - - e.preventDefault(); - setOpen((open) => !open); - } - }; - - document.addEventListener("keydown", down); - return () => document.removeEventListener("keydown", down); - }, []); - - const runCommand = React.useCallback((command: () => unknown) => { - setOpen(false); - command(); - }, []); - - return ( - <> - - - - - No results found. - {docsConfig.nav.map((section) => ( - - {section.items.map((item) => { - if (item.subItems) { - return ( - - {item.subItems.map((subItem) => ( - { - runCommand(() => - router.push( - subItem.href, - ), - ); - }} - > - - {subItem.label} - {subItem.badge && ( - - {subItem.badge} - - )} - - ))} - - ); - } else { - return ( - { - runCommand(() => - router.push(item.href), - ); - }} - > - - {item.label} - {item.badge && ( - - {item.badge} - - )} - - ); - } - })} - - ))} - - - - runCommand(() => setTheme("light"))} - className="h-9" - > - - Light - - runCommand(() => setTheme("dark"))} - className="h-9" - > - - Dark - - - runCommand(() => setTheme("system")) - } - className="h-9" - > - - System - - - - - - ); -} diff --git a/starterkits/saas/src/app/docs/_components/docs-header.tsx b/starterkits/saas/src/app/docs/_components/docs-header.tsx deleted file mode 100644 index cbc581f..0000000 --- a/starterkits/saas/src/app/docs/_components/docs-header.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { CommandMenu } from "@/app/docs/_components/command-menu"; -import { DocsMobileSidenav } from "@/app/docs/_components/mobile-sidenav"; -import { ThemeToggle } from "@/components/theme-toggle"; -import { buttonVariants } from "@/components/ui/button"; -import { Icons } from "@/components/ui/icons"; -import { siteUrls } from "@/config/urls"; -import Link from "next/link"; - -export function DocsHeader() { - return ( -
-
-
- -
- - - - -
- -
- - - - - - - -
-
- ); -} diff --git a/starterkits/saas/src/app/docs/_components/mobile-sidenav.tsx b/starterkits/saas/src/app/docs/_components/mobile-sidenav.tsx deleted file mode 100644 index adf9ea2..0000000 --- a/starterkits/saas/src/app/docs/_components/mobile-sidenav.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { DocsSidebar } from "@/app/docs/_components/sidebar"; -import { Button } from "@/components/ui/button"; -import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet"; -import { MenuIcon } from "lucide-react"; - -export function DocsMobileSidenav() { - return ( - - - - - - - - - ); -} diff --git a/starterkits/saas/src/app/docs/_components/sidebar-nav.tsx b/starterkits/saas/src/app/docs/_components/sidebar-nav.tsx deleted file mode 100644 index 517b65b..0000000 --- a/starterkits/saas/src/app/docs/_components/sidebar-nav.tsx +++ /dev/null @@ -1,172 +0,0 @@ -"use client"; - -import { - Accordion, - AccordionContent, - AccordionItem, - AccordionTrigger, -} from "@/components/ui/accordion"; -import { Badge } from "@/components/ui/badge"; -import { buttonVariants } from "@/components/ui/button"; -import { Separator } from "@/components/ui/separator"; -import { docsConfig } from "@/config/docs"; -import { cn, isLinkActive } from "@/lib/utils"; -import type { VariantProps } from "class-variance-authority"; -import Link from "next/link"; -import { usePathname } from "next/navigation"; - -type LinkStyleProps = { - active?: boolean; - disabled?: boolean; - className?: string; -} & VariantProps; - -function linkStyles({ active, disabled, className, ...props }: LinkStyleProps) { - return cn( - buttonVariants({ - variant: active ? "secondary" : "ghost", - size: props.size, - ...props, - }), - "flex h-8 w-full items-center justify-start gap-3 px-3", - active ? "font-medium" : "font-normal", - disabled && "pointer-events-none opacity-50", - className, - ); -} - -export function DocsSidebarNav() { - const pathname = usePathname(); - - const params = pathname.split("/"); - - return ( - - ); -} - -type NavLinkProps = { - label: string; - href: string; - pathname: string; - className?: string; - disabled?: boolean; - badge?: string; -}; - -function NavLink(props: NavLinkProps) { - return ( - - {props.label} - {props.badge && ( - - {props.badge} - - )} - - ); -} diff --git a/starterkits/saas/src/app/docs/_components/sidebar.tsx b/starterkits/saas/src/app/docs/_components/sidebar.tsx deleted file mode 100644 index eaafc65..0000000 --- a/starterkits/saas/src/app/docs/_components/sidebar.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { DocsSidebarNav } from "@/app/docs/_components/sidebar-nav"; - -export function DocsSidebar() { - return ( - - ); -} diff --git a/starterkits/saas/src/app/docs/layout.tsx b/starterkits/saas/src/app/docs/layout.tsx index cc363b5..bec1e40 100644 --- a/starterkits/saas/src/app/docs/layout.tsx +++ b/starterkits/saas/src/app/docs/layout.tsx @@ -1,22 +1,27 @@ -import { DocsHeader } from "@/app/docs/_components/docs-header"; -import { DocsSidebar } from "@/app/docs/_components/sidebar"; +import { DocsLayout } from "fumadocs-ui/layout"; +import { docs } from "@/app/source"; +import type { ReactNode } from "react"; +import { Icons } from "@/components/ui/icons"; +import { WebHeaderNav } from "@/app/(web)/_components/header-nav"; -type DocsLayoutProps = { - children: React.ReactNode; +type RootDocsLayoutProps = { + children: ReactNode; }; -export default function DocsLayout({ children }: DocsLayoutProps) { +export default function RootDocsLayout({ children }: RootDocsLayoutProps) { return ( -
- - -
-
- -
- - {children} -
-
+ , + children: ( +
+ +
+ ), + }} + > + {children} +
); } diff --git a/starterkits/saas/src/app/layout.tsx b/starterkits/saas/src/app/layout.tsx index f98910c..55b051c 100644 --- a/starterkits/saas/src/app/layout.tsx +++ b/starterkits/saas/src/app/layout.tsx @@ -2,7 +2,6 @@ import React from "react"; import { Providers } from "@/components/providers"; import { Toaster } from "@/components/ui/sonner"; import "@/styles/globals.css"; -import "@/styles/prism.css"; import { fontHeading, fontSans } from "@/lib/fonts"; import { type Metadata } from "next"; import { diff --git a/starterkits/saas/src/app/sitemap.ts b/starterkits/saas/src/app/sitemap.ts index ec8ac6e..816c724 100644 --- a/starterkits/saas/src/app/sitemap.ts +++ b/starterkits/saas/src/app/sitemap.ts @@ -1,25 +1,22 @@ +import { blogs, docs } from "@/app/source"; import { publicRoutes, siteUrls } from "@/config/urls"; -import { getBlogs } from "@/server/actions/blog"; -import { getDocs } from "@/server/actions/docs"; import type { MetadataRoute } from "next"; const addPathToBaseURL = (path: string) => `${siteUrls.publicUrl}${path}`; export default async function sitemap(): Promise { - const allBlogs = await getBlogs(); - - const blogs = allBlogs.map((blog) => ({ - url: addPathToBaseURL(`${siteUrls.blog}/${blog.metaData.slug}`), - lastModified: new Date(blog.metaData.updatedAt), + const blogsSitemap = blogs.getPages().map((blog) => ({ + url: addPathToBaseURL(`${siteUrls.blogs}${blog.url}`), + lastModified: blog.data.exports.lastModified + ? new Date(blog.data.exports.lastModified) + : new Date(blog.data.publishedAt), })); - const allDocs = await getDocs(); - - const docs = allDocs.map((doc) => ({ - url: addPathToBaseURL( - `${siteUrls.docs}/${doc.metaData.slug === "/" ? "" : doc.metaData.slug}`, - ), - lastModified: new Date(doc.metaData.publishedAt), + const docsSitemap = docs.getPages().map((doc) => ({ + url: addPathToBaseURL(`${siteUrls.docs}${doc.url}`), + lastModified: doc.data.exports.lastModified + ? new Date(doc.data.exports.lastModified) + : undefined, })); const publicRoutesWithoutPublicUrl = publicRoutes.filter( @@ -32,5 +29,5 @@ export default async function sitemap(): Promise { lastModified: new Date(), })); - return [...routes, ...blogs, ...docs]; + return [...routes, ...blogsSitemap, ...docsSitemap]; } diff --git a/starterkits/saas/src/app/source.ts b/starterkits/saas/src/app/source.ts new file mode 100644 index 0000000..2c4176e --- /dev/null +++ b/starterkits/saas/src/app/source.ts @@ -0,0 +1,39 @@ +import { map } from "@/../.map"; +import { createMDXSource, defaultSchemas } from "fumadocs-mdx"; +import { loader } from "fumadocs-core/source"; +import { z } from "zod"; + +export const docs = loader({ + baseUrl: "/docs", + rootDir: "docs", + source: createMDXSource(map), +}); + +const blogsFronmatterSchema = defaultSchemas.frontmatter.extend({ + thumbnail: z.string().url(), + publishedAt: z.date(), + readTime: z.string(), + tags: z.array(z.string()), +}); + +export const blogs = loader({ + baseUrl: "/blogs", + rootDir: "blogs", + source: createMDXSource(map, { + schema: { frontmatter: blogsFronmatterSchema }, + }), +}); + +const changelogsFronmatterSchema = defaultSchemas.frontmatter.extend({ + version: z.string(), + publishedAt: z.date(), + thumbnail: z.string().url().optional(), +}); + +export const changelogs = loader({ + baseUrl: "/changelog", + rootDir: "changelogs", + source: createMDXSource(map, { + schema: { frontmatter: changelogsFronmatterSchema }, + }), +}); diff --git a/starterkits/saas/src/components/mdx-components.tsx b/starterkits/saas/src/components/mdx-components.tsx deleted file mode 100644 index d61c707..0000000 --- a/starterkits/saas/src/components/mdx-components.tsx +++ /dev/null @@ -1,246 +0,0 @@ -import { cn } from "@/lib/utils"; -import Link from "next/link"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; - -const components = { - h1: ({ className, ...props }: React.HTMLAttributes) => ( -

- ), - h2: ({ className, ...props }: React.HTMLAttributes) => ( -

- ), - h3: ({ className, ...props }: React.HTMLAttributes) => ( -

- ), - h4: ({ className, ...props }: React.HTMLAttributes) => ( -

- ), - h5: ({ className, ...props }: React.HTMLAttributes) => ( -
- ), - h6: ({ className, ...props }: React.HTMLAttributes) => ( -
- ), - a: ({ className, ...props }: React.HTMLAttributes) => ( - - ), - p: ({ - className, - ...props - }: React.HTMLAttributes) => ( -

- ), - ul: ({ className, ...props }: React.HTMLAttributes) => ( -

    - ), - ol: ({ className, ...props }: React.HTMLAttributes) => ( -
      - ), - li: ({ className, ...props }: React.HTMLAttributes) => ( -
    1. - ), - blockquote: ({ - className, - ...props - }: React.HTMLAttributes) => ( -
      - ), - img: ({ - className, - alt, - ...props - }: React.ImgHTMLAttributes) => ( - // eslint-disable-next-line @next/next/no-img-element - {alt} - ), - hr: ({ ...props }: React.HTMLAttributes) => ( -
      - ), - table: ({ - className, - ...props - }: React.HTMLAttributes) => ( -
      - - - ), - tr: ({ - className, - ...props - }: React.HTMLAttributes) => ( - - ), - th: ({ - className, - ...props - }: React.HTMLAttributes) => ( -
      - ), - td: ({ - className, - ...props - }: React.HTMLAttributes) => ( - - ), - Link: ({ className, ...props }: React.ComponentProps) => ( - - ), - LinkedCard: ({ - className, - ...props - }: React.ComponentProps) => ( - - ), - - code: ({ className, ...props }: React.HTMLAttributes) => ( - - ), - pre: ({ className, ...props }: React.HTMLAttributes) => ( -
      -    ),
      -    Tabs: ({ className, ...props }: React.ComponentProps) => (
      -        
      -    ),
      -    TabsList: ({
      -        className,
      -        ...props
      -    }: React.ComponentProps) => (
      -        
      -    ),
      -    TabsTrigger: ({
      -        className,
      -        ...props
      -    }: React.ComponentProps) => (
      -        
      -    ),
      -    TabsContent: ({
      -        className,
      -        ...props
      -    }: React.ComponentProps) => (
      -        
      -    ),
      -    Step: ({ className, ...props }: React.ComponentProps<"h3">) => (
      -        

      - ), - Steps: ({ ...props }) => ( -
      - ), -}; - -export function mdxComponents() { - return components; -} diff --git a/starterkits/saas/src/components/providers.tsx b/starterkits/saas/src/components/providers.tsx index 44fd314..988bfa2 100644 --- a/starterkits/saas/src/components/providers.tsx +++ b/starterkits/saas/src/components/providers.tsx @@ -4,6 +4,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { ThemeProvider } from "@/components/theme-provider"; import { PosthogProvider } from "@/components/posthog-provider"; import { SessionProvider } from "next-auth/react"; +import { RootProvider as FumaRootProvider } from "fumadocs-ui/provider"; type ProvidersProps = { children: React.ReactNode; @@ -16,7 +17,9 @@ export function Providers({ children }: ProvidersProps) { - {children} + + {children} + diff --git a/starterkits/saas/src/components/toc.tsx b/starterkits/saas/src/components/toc.tsx deleted file mode 100644 index b3a148e..0000000 --- a/starterkits/saas/src/components/toc.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import type { getTableOfContents } from "@/lib/toc"; -import { cn } from "@/lib/utils"; -import Link from "next/link"; - -type TocProps = { - toc: Awaited>; - wrapperClassName?: string; -}; - -export function Toc({ toc, wrapperClassName }: TocProps) { - return ( -
      -

      On this page

      -
        - {toc.items?.map((item) => ( -
      • - {item.items ? ( - <> - {item.title} -
          - {item.items.map((subItem) => ( -
        • - - {subItem.title} - -
        • - ))} -
        - - ) : ( - {item.title} - )} -
      • - ))} -
      -
      - ); -} diff --git a/starterkits/saas/src/config/docs.ts b/starterkits/saas/src/config/docs.ts deleted file mode 100644 index f962919..0000000 --- a/starterkits/saas/src/config/docs.ts +++ /dev/null @@ -1,113 +0,0 @@ -/** - * Docs navigation items - * @type {DocsSidebarNavItems[]} - * @property {string} id - The unique id of the navigation item. - * @property {string} label - The label of the navigation item. - * @property {DocsNavItem[]} items - The sub navigation items. - * - * @example - * export const docsNavigation = [ - * { - * id: "getting-started", - * label: "Getting Started", - * items: [ - * { - * id: "installation", - * label: "Installation", - * href: "/docs/getting-started/installation", - * }, - * ] - * - * @returns The navigation items for the docs sidebar. - * - */ - -type DocsNavItem = { - id: string; - label: string; - badge?: string; -} & ( - | { href: string; subItems?: never; disabled?: boolean } - | { - href?: never; - subItems: { - id: string; - label: string; - href: string; - disabled?: boolean; - badge?: string; - }[]; - } -); - -type DocsSidebarNavItems = { - id: string; - label: string; - items: DocsNavItem[]; -}; - -const nav: DocsSidebarNavItems[] = [ - { - id: "introduction", - label: "Introduction", - items: [ - { - id: "introduction", - label: "What is Rapidlaunch?", - href: "/docs", - }, - ], - }, - { - id: "getting-started", - label: "Getting Started", - items: [ - { - id: "installation", - label: "Installation", - href: "/docs/getting-started/installation", - }, - ], - }, - { - id: "api", - label: "API", - items: [ - { - id: "endpoints", - label: "Endpoints", - href: "/docs/api/endpoints", - badge: "Soon", - disabled: true, - }, - { - id: "authentication", - label: "Authentication", - subItems: [ - { - id: "sign-up", - label: "Sign Up", - href: "/docs/api/authentication/sign-up", - disabled: true, - }, - { - id: "sign-in", - label: "Sign In", - href: "/docs/api/authentication/sign-in", - disabled: true, - }, - { - id: "sign-out", - label: "Sign Out", - href: "/docs/api/authentication/sign-out", - disabled: true, - }, - ], - }, - ], - }, -]; - -export const docsConfig = { - nav, -}; diff --git a/starterkits/saas/src/config/header.ts b/starterkits/saas/src/config/header.ts index b067333..8804daa 100644 --- a/starterkits/saas/src/config/header.ts +++ b/starterkits/saas/src/config/header.ts @@ -35,9 +35,9 @@ export const navigation: NavigationItem[] = [ label: "Support", }, { - id: "blog", - href: siteUrls.blog, - label: "Blog", + id: "blogs", + href: siteUrls.blogs, + label: "Blogs", }, { id: "docs", @@ -45,8 +45,8 @@ export const navigation: NavigationItem[] = [ label: "Docs", }, { - id: "changelog", - href: siteUrls.changelog, - label: "Changelog", + id: "changelogs", + href: siteUrls.changelogs, + label: "Changelogs", }, ]; diff --git a/starterkits/saas/src/config/sidebar.ts b/starterkits/saas/src/config/sidebar.ts index c4be061..26a35ec 100644 --- a/starterkits/saas/src/config/sidebar.ts +++ b/starterkits/saas/src/config/sidebar.ts @@ -175,7 +175,7 @@ const navigation: SidebarNavItems[] = [ { label: "Blog", icon: PenLineIcon, - href: siteUrls.blog, + href: siteUrls.blogs, }, { label: "Support", diff --git a/starterkits/saas/src/config/support.ts b/starterkits/saas/src/config/support.ts index 78cfd00..ab81d79 100644 --- a/starterkits/saas/src/config/support.ts +++ b/starterkits/saas/src/config/support.ts @@ -51,7 +51,7 @@ export const supportInfos: SupportInfo[] = [ title: "Our Blog", description: "Read our blog to learn more about our products and the latest updates.", - buttonHref: `${siteUrls.blog}`, + buttonHref: `${siteUrls.blogs}`, buttonText: "Read Blog", }, ]; diff --git a/starterkits/saas/src/config/urls.ts b/starterkits/saas/src/config/urls.ts index d9c25bd..5c60853 100644 --- a/starterkits/saas/src/config/urls.ts +++ b/starterkits/saas/src/config/urls.ts @@ -14,9 +14,9 @@ export const siteUrls = { pricing: "/pricing", features: "/features", support: "/support", - blog: "/blog", + blogs: "/blogs", docs: "/docs", - changelog: "/changelog", + changelogs: "/changelogs", maintenance: "/maintenance", waitlist: "/waitlist", rapidlaunch: "https://www.rapidlaunch.xyz", @@ -58,9 +58,9 @@ export const publicRoutes: string[] = [ siteUrls.pricing, siteUrls.features, siteUrls.support, - siteUrls.blog, + siteUrls.blogs, siteUrls.docs, - siteUrls.changelog, + siteUrls.changelogs, siteUrls.maintenance, siteUrls.waitlist, siteUrls.rapidlaunch, diff --git a/starterkits/saas/src/content/changelogs/version-0.0.0.mdx b/starterkits/saas/src/content/changelogs/version-0.0.0.mdx deleted file mode 100644 index 9c5774a..0000000 --- a/starterkits/saas/src/content/changelogs/version-0.0.0.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Launch of RapidLaunch" -description: "RapidLaunch is a platform to create and launch SaaS products quickly." -version: "0.0.0" -publishedAt: 2024-04-01 -thumbnail: "https://fakeimg.pl/896x400/d1d1d1/6b6b6b" ---- - -You can now change the monitors visibility to public. This will allow you to -share the monitor's metrics _(the overview page)_ with your users. The period is -restricted to **1d** and **7d** for now. - -The monitor can be accessed either by the **public URL** or/and by embedding the -monitor within a **status page**. - -- Public URL: - [openstatus.dev/public/monitors/1](https://openstatus.dev/public/monitors/1) -- Status Page URL: - [status.openstatus.dev/monitors/1](https://status.openstatus.dev/monitors/1) - -You can enable public mode from the monitor _Danger_ section setting. diff --git a/starterkits/saas/src/content/changelogs/version-0.1.0.mdx b/starterkits/saas/src/content/changelogs/version-0.1.0.mdx deleted file mode 100644 index 7ccbe3a..0000000 --- a/starterkits/saas/src/content/changelogs/version-0.1.0.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Launch of RapidLaunch 2" -description: "RapidLaunch is a platform to create and launch SaaS products quickly." -version: "0.1.0" -publishedAt: 2024-08-01 -thumbnail: "https://fakeimg.pl/896x400/d1d1d1/6b6b6b" ---- - -You can now change the monitors visibility to public. This will allow you to -share the monitor's metrics _(the overview page)_ with your users. The period is -restricted to **1d** and **7d** for now. - -The monitor can be accessed either by the **public URL** or/and by embedding the -monitor within a **status page**. - -- Public URL: - [openstatus.dev/public/monitors/1](https://openstatus.dev/public/monitors/1) -- Status Page URL: - [status.openstatus.dev/monitors/1](https://status.openstatus.dev/monitors/1) - -You can enable public mode from the monitor _Danger_ section setting. diff --git a/starterkits/saas/src/content/changelogs/version-0.2.4.mdx b/starterkits/saas/src/content/changelogs/version-0.2.4.mdx deleted file mode 100644 index 11018c6..0000000 --- a/starterkits/saas/src/content/changelogs/version-0.2.4.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Launch of RapidLaunch 2" -description: "RapidLaunch is a platform to create and launch SaaS products quickly." -version: "0.4.0" -publishedAt: 2024-10-06 -thumbnail: "https://fakeimg.pl/896x400/d1d1d1/6b6b6b" ---- - -You can now change the monitors visibility to public. This will allow you to -share the monitor's metrics _(the overview page)_ with your users. The period is -restricted to **1d** and **7d** for now. - -The monitor can be accessed either by the **public URL** or/and by embedding the -monitor within a **status page**. - -- Public URL: - [openstatus.dev/public/monitors/1](https://openstatus.dev/public/monitors/1) -- Status Page URL: - [status.openstatus.dev/monitors/1](https://status.openstatus.dev/monitors/1) - -You can enable public mode from the monitor _Danger_ section setting. diff --git a/starterkits/saas/src/content/docs/installation.mdx b/starterkits/saas/src/content/docs/installation.mdx deleted file mode 100644 index 07030a8..0000000 --- a/starterkits/saas/src/content/docs/installation.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Installation" -slug: "getting-started/installation" -description: "Learn how to install rapidlaunch" -publishedAt: 2024-01-01 ---- - -Added your your own doumentation by create a .mdx file in "*src/content/docs*" folder. - - - -Step - 1 - -This is the content of step 1 - - Step - 2 - -This is the content of step 2 - - \ No newline at end of file diff --git a/starterkits/saas/src/lib/mdx.ts b/starterkits/saas/src/lib/mdx.ts deleted file mode 100644 index 29f31a9..0000000 --- a/starterkits/saas/src/lib/mdx.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { compileMDX } from "next-mdx-remote/rsc"; -import { readdir, readFile } from "fs/promises"; -import path from "path"; -import { getTableOfContents } from "@/lib/toc"; -import { mdxComponents } from "@/components/mdx-components"; -import { AutoIdsToHeading } from "@/lib/rehype-plugins"; -import rehypePrism from "rehype-prism-plus"; -import type { SomeZodObject } from "zod"; - -export async function getMDXData(dir: string, schema: SomeZodObject) { - const files = (await readdir(dir, "utf-8")).filter( - (file) => path.extname(file) === ".mdx", - ); - - const components = mdxComponents(); - - return await Promise.all( - files.map(async (file) => { - const fileData = await readFile(`${dir}/${file}`, "utf-8"); - const mdxData = await compileMDX({ - source: fileData, - options: { - parseFrontmatter: true, - mdxOptions: { - //@ts-expect-error-error - rehypePlugins: [AutoIdsToHeading, rehypePrism], - format: "mdx", - }, - }, - components, - }); - - const validate = await schema.safeParseAsync(mdxData.frontmatter); - - if (!validate.success) { - throw new Error( - `Invalid frontmatter in ${dir} ${file}\nCause: ${validate.error.message}`, - { - cause: validate.error.errors, - }, - ); - } - - const raw = fileData.split("---").slice(2).join("---"); - - const toc = await getTableOfContents(raw); - - return { - content: mdxData.content, - metaData: mdxData.frontmatter, - toc, - fileData, - }; - }), - ); -} diff --git a/starterkits/saas/src/lib/rehype-plugins.ts b/starterkits/saas/src/lib/rehype-plugins.ts deleted file mode 100644 index 8ea65f2..0000000 --- a/starterkits/saas/src/lib/rehype-plugins.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { slug } from "github-slugger"; -import { visit } from "unist-util-visit"; - -type Node = { - type: string; - tagName: string; - properties: { - id: string; - }; - children: { - value: string; - }[]; -}; - -export const AutoIdsToHeading = () => (tree: Node) => { - visit(tree, (node) => { - if ( - node.type === "element" && - (node?.tagName === "h1" || - node?.tagName === "h2" || - node?.tagName === "h3" || - node?.tagName === "h4" || - node?.tagName === "h5" || - node?.tagName === "h6") - ) { - const id = slug(node?.children[0]?.value ?? ""); - node.properties.id = id; - } - }); -}; diff --git a/starterkits/saas/src/lib/toc.ts b/starterkits/saas/src/lib/toc.ts deleted file mode 100644 index f8d4d68..0000000 --- a/starterkits/saas/src/lib/toc.ts +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable @typescript-eslint/no-unsafe-call */ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck -import { toc } from "mdast-util-toc"; -import { remark } from "remark"; -import { visit } from "unist-util-visit"; - -const textTypes = ["text", "emphasis", "strong", "inlineCode"]; - -function flattenNode(node) { - const p = []; - visit(node, (node) => { - if (!textTypes.includes(node.type)) return; - p.push(node.value); - }); - return p.join(``); -} - -interface Item { - title: string; - url: string; - items?: Item[]; -} - -interface Items { - items?: Item[]; -} - -function getItems(node, current): Items { - if (!node) { - return {}; - } - - if (node.type === "paragraph") { - visit(node, (item) => { - if (item.type === "link") { - current.url = item.url; - current.title = flattenNode(node); - } - - if (item.type === "text") { - current.title = flattenNode(node); - } - }); - - return current; - } - - if (node.type === "list") { - current.items = node.children.map((i) => getItems(i, {})); - - return current; - } else if (node.type === "listItem") { - const heading = getItems(node.children[0], {}); - - if (node.children.length > 1) { - getItems(node.children[1], heading); - } - - return heading; - } - - return {}; -} - -const getToc = () => (node, file) => { - const table = toc(node, { - maxDepth: 3, - }); - const items = getItems(table.map, {}); - - file.data = items; -}; - -export type TableOfContents = Items; - -export async function getTableOfContents( - content: string, -): Promise { - const result = await remark().use(getToc).process(content); - - return result.data; -} diff --git a/starterkits/saas/src/server/actions/blog.ts b/starterkits/saas/src/server/actions/blog.ts deleted file mode 100644 index da0a42c..0000000 --- a/starterkits/saas/src/server/actions/blog.ts +++ /dev/null @@ -1,11 +0,0 @@ -import "server-only"; - -import { getMDXData } from "@/lib/mdx"; -import { type BlogMetaData, blogMetaSchema } from "@/validations/mdx-content"; - -export async function getBlogs() { - const dir = "src/content/blog"; - return (await getMDXData(dir, blogMetaSchema)).filter( - (blog) => !blog.metaData.isDraft, - ); -} diff --git a/starterkits/saas/src/server/actions/changelog.ts b/starterkits/saas/src/server/actions/changelog.ts deleted file mode 100644 index bfd217c..0000000 --- a/starterkits/saas/src/server/actions/changelog.ts +++ /dev/null @@ -1,14 +0,0 @@ -import "server-only"; - -import { getMDXData } from "@/lib/mdx"; -import { - type ChangelogMetaData, - changelogMetaSchema, -} from "@/validations/mdx-content"; - -export async function getChangelogs() { - const dir = "src/content/changelogs"; - return ( - await getMDXData(dir, changelogMetaSchema) - ).filter((changelog) => !changelog.metaData.isDraft); -} diff --git a/starterkits/saas/src/server/actions/docs.ts b/starterkits/saas/src/server/actions/docs.ts deleted file mode 100644 index 08c1e8e..0000000 --- a/starterkits/saas/src/server/actions/docs.ts +++ /dev/null @@ -1,11 +0,0 @@ -import "server-only"; - -import { getMDXData } from "@/lib/mdx"; -import { type DocsMetaData, docsMetaSchema } from "@/validations/mdx-content"; - -export async function getDocs() { - const dir = "src/content/docs"; - return (await getMDXData(dir, docsMetaSchema)).filter( - (doc) => !doc.metaData.isDraft, - ); -} diff --git a/starterkits/saas/src/styles/globals.css b/starterkits/saas/src/styles/globals.css index a640ca9..37410ae 100644 --- a/starterkits/saas/src/styles/globals.css +++ b/starterkits/saas/src/styles/globals.css @@ -59,15 +59,3 @@ text-rendering: optimizeLegibility; } } - -@layer utilities { - .step { - counter-increment: step; - } - - .step:before { - @apply absolute inline-flex h-9 w-9 items-center justify-center rounded-full border-4 border-background bg-muted text-center -indent-px font-mono text-base font-medium; - @apply ml-[-50px] mt-[-4px]; - content: counter(step); - } -} diff --git a/starterkits/saas/src/styles/prism.css b/starterkits/saas/src/styles/prism.css deleted file mode 100644 index a3eba58..0000000 --- a/starterkits/saas/src/styles/prism.css +++ /dev/null @@ -1,110 +0,0 @@ -.token.tag, -.token.class-name, -.token.selector, -.token.selector .class, -.token.selector.class, -.token.function { - color: theme("colors.pink.400"); -} - -.token.attr-name, -.token.keyword, -.token.rule, -.token.pseudo-class, -.token.important { - color: theme("colors.blue.300"); -} - -.token.module { - color: theme("colors.purple.300"); -} - -.token.attr-value { - color: theme("colors.blue.300"); -} - -.token.string { - color: theme("colors.orange.300"); -} - -.token.class { - color: theme("colors.teal.300"); -} - -.token.punctuation, -.token.attr-equals { - color: theme("colors.zinc.500"); -} - -.token.unit, -.language-css .token.function { - color: theme("colors.sky.200"); -} - -.token.comment { - color: theme("colors.emerald.400"); - opacity: 0.7; -} - -.token.property, -.token.operator, -.token.combinator { - color: theme("colors.zinc.400"); -} - -.code-highlight { - float: left; /* 1 */ - min-width: 100%; /* 2 */ -} - -.code-line { - display: block; - padding-left: 16px; - padding-right: 16px; - margin-left: -16px; - margin-right: -16px; - border-left: 4px solid rgba(0, 0, 0, 0); /* Set placeholder for highlight accent border color to transparent */ - line-height: 1.5rem; -} - -.code-line.inserted { - background-color: theme( - "colors.emerald.900" - ); /* Set inserted line (+) color */ -} - -.code-line.deleted { - background-color: theme("colors.red.900"); /* Set deleted line (-) color */ -} - -.highlight-line { - margin-left: -14px; - margin-right: -16px; - background-color: theme("colors.zinc.800"); /* Set highlight bg color */ - border-left: 2px solid theme("colors.amber.400"); /* Set highlight accent border color */ -} - -.line-number::before { - display: inline-block; - width: 1rem; - text-align: right; - margin-right: 16px; - margin-left: -8px; - color: theme("colors.zinc.500"); - content: attr(line); -} - -.rehype-code-title { - margin: 0 !important; - display: inline-flex; - position: relative; - top: 1rem; - left: 2rem; - background: theme("colors.zinc.900"); - color: theme("colors.zinc.100"); - font-family: theme("fontFamily.mono"); - padding: 0.25rem 1.5rem; - border-radius: 0.5rem 0.5rem 0 0; - border-top: 4px solid theme("colors.indigo.600"); - font-size: 0.8rem; -} diff --git a/starterkits/saas/src/validations/mdx-content.ts b/starterkits/saas/src/validations/mdx-content.ts deleted file mode 100644 index c51ccde..0000000 --- a/starterkits/saas/src/validations/mdx-content.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { z } from "zod"; - -export const docsMetaSchema = z.object({ - title: z.string(), - slug: z.string(), - publishedAt: z.date(), - tags: z.array(z.string()).optional(), - description: z.string().optional(), - isDraft: z.boolean().optional(), -}); - -export type DocsMetaData = z.infer; - -export const blogMetaSchema = z.object({ - title: z.string(), - slug: z.string(), - publishedAt: z.date(), - updatedAt: z.date(), - readTime: z.string(), - tags: z.array(z.string()).optional(), - description: z.string(), - thumbnail: z.string().url(), - featured: z.boolean().optional(), - isDraft: z.boolean().optional(), -}); - -export type BlogMetaData = z.infer; - -export const changelogMetaSchema = z.object({ - title: z.string(), - publishedAt: z.date(), - thumbnail: z.string().url(), - description: z.string(), - version: z.string(), - isDraft: z.boolean().optional(), -}); - -export type ChangelogMetaData = z.infer; diff --git a/starterkits/saas/tailwind.config.ts b/starterkits/saas/tailwind.config.ts index 787d469..912cf96 100644 --- a/starterkits/saas/tailwind.config.ts +++ b/starterkits/saas/tailwind.config.ts @@ -1,9 +1,15 @@ import type { Config } from "tailwindcss"; import { fontFamily } from "tailwindcss/defaultTheme"; +import { createPreset } from "fumadocs-ui/tailwind-plugin"; const config = { darkMode: ["class"], - content: ["./src/**/*.{ts,tsx}"], + content: [ + "./src/**/*.{ts,tsx}", + "./node_modules/fumadocs-ui/dist/**/*.js", + "./mdx-components.tsx", + ], + presets: [createPreset()], prefix: "", safelist: ["dark"], theme: {