From a36b509e89cba3a3934803949260496175ebb0a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Jul 2025 09:02:22 +0000 Subject: [PATCH 1/5] chore(deps-dev): bump @types/lodash from 4.17.18 to 4.17.20 --- updated-dependencies: - dependency-name: "@types/lodash" dependency-version: 4.17.20 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/next/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/next/package.json b/packages/next/package.json index dd904f2..fd87b5a 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -34,7 +34,7 @@ "next": "^15.3.1" }, "devDependencies": { - "@types/lodash": "^4.17.18", + "@types/lodash": "^4.17.20", "@types/node": "^22.14.1", "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7f739fb..9fa6155 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -168,8 +168,8 @@ importers: version: 15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@types/lodash': - specifier: ^4.17.18 - version: 4.17.18 + specifier: ^4.17.20 + version: 4.17.20 '@types/node': specifier: ^22.14.1 version: 22.14.1 @@ -736,8 +736,8 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@types/lodash@4.17.18': - resolution: {integrity: sha512-KJ65INaxqxmU6EoCiJmRPZC9H9RVWCRd349tXM2M3O5NA7cY6YL7c0bHAHQ93NOfTObEQ004kd2QVHs/r0+m4g==} + '@types/lodash@4.17.20': + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} '@types/marked@6.0.0': resolution: {integrity: sha512-jmjpa4BwUsmhxcfsgUit/7A9KbrC48Q0q8KvnY107ogcjGgTFDlIL3RpihNpx2Mu1hM4mdFQjoVc4O6JoGKHsA==} @@ -1684,7 +1684,7 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@types/lodash@4.17.18': {} + '@types/lodash@4.17.20': {} '@types/marked@6.0.0': dependencies: From 5a5b8d2a6a12fb861d02998f3547905ef7cd7aeb Mon Sep 17 00:00:00 2001 From: Jonas Date: Tue, 8 Jul 2025 11:03:15 +0200 Subject: [PATCH 2/5] Revert "chore(deps-dev): bump @types/lodash from 4.17.18 to 4.17.20" --- packages/next/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/next/package.json b/packages/next/package.json index fd87b5a..dd904f2 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -34,7 +34,7 @@ "next": "^15.3.1" }, "devDependencies": { - "@types/lodash": "^4.17.20", + "@types/lodash": "^4.17.18", "@types/node": "^22.14.1", "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9fa6155..7f739fb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -168,8 +168,8 @@ importers: version: 15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) devDependencies: '@types/lodash': - specifier: ^4.17.20 - version: 4.17.20 + specifier: ^4.17.18 + version: 4.17.18 '@types/node': specifier: ^22.14.1 version: 22.14.1 @@ -736,8 +736,8 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@types/lodash@4.17.20': - resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + '@types/lodash@4.17.18': + resolution: {integrity: sha512-KJ65INaxqxmU6EoCiJmRPZC9H9RVWCRd349tXM2M3O5NA7cY6YL7c0bHAHQ93NOfTObEQ004kd2QVHs/r0+m4g==} '@types/marked@6.0.0': resolution: {integrity: sha512-jmjpa4BwUsmhxcfsgUit/7A9KbrC48Q0q8KvnY107ogcjGgTFDlIL3RpihNpx2Mu1hM4mdFQjoVc4O6JoGKHsA==} @@ -1684,7 +1684,7 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@types/lodash@4.17.20': {} + '@types/lodash@4.17.18': {} '@types/marked@6.0.0': dependencies: From 4c77631e4f71e848ac595c1876c5db689f23ffae Mon Sep 17 00:00:00 2001 From: Jonas Date: Tue, 8 Jul 2025 11:05:41 +0200 Subject: [PATCH 3/5] Update dependabot.yml --- .github/dependabot.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 5f0889c..74617ad 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,11 +1,8 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file - version: 2 updates: - - package-ecosystem: "npm" # See documentation for possible values - directory: "/" # Location of package manifests + - package-ecosystem: "npm" + directory: "/" schedule: interval: "weekly" + target-branch: "canary" + open-pull-requests-limit: 5 From 859d9565d286f9b7dd942d6522ad5b2584b74fbf Mon Sep 17 00:00:00 2001 From: Jonas Date: Wed, 20 Aug 2025 19:33:40 +0200 Subject: [PATCH 4/5] added docs site --- .github/funding.yml | 1 + .gitmodules | 12 +- .prettierignore | 14 +- LICENSE | 56 +- docs/.github/CODE_OF_CONDUCT.md | 11 + docs/.github/CONTRIBUTING.md | 38 + docs/.github/GOVERNANCE.md | 32 + docs/.github/README.md | 49 + docs/.github/SECURITY.md | 17 + docs/.github/SUPPORT.md | 27 + docs/.gitignore | 3 + docs/.prettierignore | 3 + docs/.prettierrc | 1 + docs/.vitepress/config.ts | 168 +++ docs/.vitepress/theme/group-icons.css | 70 ++ docs/.vitepress/theme/index.ts | 9 + docs/.vitepress/theme/styles.css | 43 + docs/LICENSE | 28 + docs/de/api/reference.md | 289 ++++++ docs/de/guide/cli.md | 109 ++ docs/de/guide/configuration.md | 107 ++ docs/de/guide/index.md | 51 + docs/de/guide/installation.md | 122 +++ docs/de/guide/output.md | 59 ++ docs/de/index.md | 37 + docs/en/api/reference.md | 289 ++++++ docs/en/guide/cli.md | 109 ++ docs/en/guide/configuration.md | 107 ++ docs/en/guide/index.md | 51 + docs/en/guide/installation.md | 122 +++ docs/en/guide/output.md | 59 ++ docs/en/index.md | 37 + docs/package.json | 30 + docs/public/logo.png | Bin 0 -> 68831 bytes packages/cli/LICENSE | 56 +- packages/cli/README.md | 58 +- packages/contentkit/.gitignore | 2 +- packages/contentkit/LICENSE | 56 +- packages/contentkit/README.md | 104 +- packages/core/LICENSE | 56 +- packages/core/README.md | 58 +- packages/matter/LICENSE | 56 +- packages/matter/README.md | 58 +- packages/next/.gitignore | 2 +- packages/next/LICENSE | 56 +- packages/next/README.md | 68 +- packages/types/LICENSE | 56 +- packages/types/README.md | 60 +- packages/utils/LICENSE | 56 +- packages/utils/README.md | 60 +- pnpm-lock.yaml | 1368 ++++++++++++++++++++++++- pnpm-workspace.yaml | 7 +- 52 files changed, 3890 insertions(+), 507 deletions(-) create mode 100644 .github/funding.yml create mode 100644 docs/.github/CODE_OF_CONDUCT.md create mode 100644 docs/.github/CONTRIBUTING.md create mode 100644 docs/.github/GOVERNANCE.md create mode 100644 docs/.github/README.md create mode 100644 docs/.github/SECURITY.md create mode 100644 docs/.github/SUPPORT.md create mode 100644 docs/.gitignore create mode 100644 docs/.prettierignore create mode 100644 docs/.prettierrc create mode 100644 docs/.vitepress/config.ts create mode 100644 docs/.vitepress/theme/group-icons.css create mode 100644 docs/.vitepress/theme/index.ts create mode 100644 docs/.vitepress/theme/styles.css create mode 100644 docs/LICENSE create mode 100644 docs/de/api/reference.md create mode 100644 docs/de/guide/cli.md create mode 100644 docs/de/guide/configuration.md create mode 100644 docs/de/guide/index.md create mode 100644 docs/de/guide/installation.md create mode 100644 docs/de/guide/output.md create mode 100644 docs/de/index.md create mode 100644 docs/en/api/reference.md create mode 100644 docs/en/guide/cli.md create mode 100644 docs/en/guide/configuration.md create mode 100644 docs/en/guide/index.md create mode 100644 docs/en/guide/installation.md create mode 100644 docs/en/guide/output.md create mode 100644 docs/en/index.md create mode 100644 docs/package.json create mode 100644 docs/public/logo.png diff --git a/.github/funding.yml b/.github/funding.yml new file mode 100644 index 0000000..a5f4c2a --- /dev/null +++ b/.github/funding.yml @@ -0,0 +1 @@ +github: ["@builtbyjonas"] \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index c6551f3..d7342c2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ -[submodule "examples/next"] - path = examples/next - url = https://github.com/binary-blazer/contentkit-next-blog-demo.git -[submodule "examples/javascript"] - path = examples/javascript - url = https://github.com/binary-blazer/contentkit-js-demo.git +[submodule "examples/next"] + path = examples/next + url = https://github.com/binary-blazer/contentkit-next-blog-demo.git +[submodule "examples/javascript"] + path = examples/javascript + url = https://github.com/binary-blazer/contentkit-js-demo.git diff --git a/.prettierignore b/.prettierignore index 1cf943c..cfcf957 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,8 +1,8 @@ -node_modules -distribution -LICENSE -README.md -pnpm-lock.yaml -pnpm-workspace.yaml -.next +node_modules +distribution +LICENSE +README.md +pnpm-lock.yaml +pnpm-workspace.yaml +.next .contentkit \ No newline at end of file diff --git a/LICENSE b/LICENSE index 24e70bb..95d4519 100644 --- a/LICENSE +++ b/LICENSE @@ -1,28 +1,28 @@ -BSD 3-Clause License - -Copyright (c) 2025, Jonas Franke - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +BSD 3-Clause License + +Copyright (c) 2025, Jonas Franke + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/.github/CODE_OF_CONDUCT.md b/docs/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..cb77e5b --- /dev/null +++ b/docs/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,11 @@ +# Code of Conduct (Docs) + +This project adheres to the **Resonix Code of Conduct**. + +To view the canonical, up-to-date version, see the repository root [CODE_OF_CONDUCT.md](https://github.com/resonix-dev/resonix-node/blob/master/CODE_OF_CONDUCT.md). + +> Any unacceptable behavior within documentation contributions (issues / PRs / discussions) should be reported per the instructions in the root policy. + +If you are viewing this in a published documentation site, follow this link: + +- https://github.com/resonix-dev/resonix-node/blob/master/CODE_OF_CONDUCT.md diff --git a/docs/.github/CONTRIBUTING.md b/docs/.github/CONTRIBUTING.md new file mode 100644 index 0000000..57b264d --- /dev/null +++ b/docs/.github/CONTRIBUTING.md @@ -0,0 +1,38 @@ +# Contributing to Resonix Docs + +The primary contributing guide lives at the repository root: [CONTRIBUTING.md](https://github.com/resonix-dev/resonix-node/blob/master/CONTRIBUTING.md). + +This file exists to clarify documentation-specific expectations: + +## Docs-Specific Guidelines + +- Maintain parity between `en/` and `de/` folders. If translation is pending, clearly mark it. +- Favor short paragraphs and descriptive headings. +- Use fenced code blocks with explicit language identifiers (e.g. `rust`, `bash`, `json`). +- Keep link titles descriptive; avoid raw URLs except in reference lists. +- Prefer present tense and active voice. + +## Process + +1. Fork & branch from `development`. +2. Make doc changes. +3. Run local preview to ensure no build errors. +4. Open a Pull Request with: + - Summary of changes + - Screenshots if UI / theme related + - Checklist of translated pages (if applicable) +5. Respond to review feedback. + +## Style Consistency + +- Use American English in `en/` by default. +- Keep headings in sentence case (capitalize only first word and proper nouns) unless conventional (e.g. API, HTTP). +- Avoid trailing whitespace; wrap lines at ~100–120 chars where practical. + +## Tooling + +VitePress & Markdown linting can be added later; feel free to propose enhancements. + +For general project contribution (tests, code style, commit message format), see the root guide: + +- https://github.com/resonix-dev/resonix-node/blob/master/CONTRIBUTING.md diff --git a/docs/.github/GOVERNANCE.md b/docs/.github/GOVERNANCE.md new file mode 100644 index 0000000..6075724 --- /dev/null +++ b/docs/.github/GOVERNANCE.md @@ -0,0 +1,32 @@ +# Project Governance (Summary for Docs) + +The canonical governance (if formalized) resides in root docs or organizational policy. This document summarizes how decisions affecting documentation are generally made. + +## Roles + +- Maintainers: Merge PRs, publish releases, curate roadmap. +- Contributors: Open issues/PRs, help review translations. +- Reviewers (optional pool): Provide focused feedback on specialized areas (audio pipeline, API design, localization). + +## Decision Making + +- Small doc fixes: Merged by a single maintainer after basic review. +- Structural changes (navigation, IA): Require consensus of at least 2 maintainers (or lazy consensus after 5 business days). +- Policy documents: Mirror root repository; changes happen centrally. + +## Transparency + +All substantial decisions should be documented in PR descriptions or linked issues for traceability. + +## Escalation + +If you disagree with a docs decision, open an issue labeled `governance` summarizing: + +- Context +- Decision made +- Alternative proposal +- Rationale & trade-offs + +## Evolution + +As the project grows, a more formal charter may replace this summary. Suggestions welcome via PR. diff --git a/docs/.github/README.md b/docs/.github/README.md new file mode 100644 index 0000000..12ae7b1 --- /dev/null +++ b/docs/.github/README.md @@ -0,0 +1,49 @@ +# Resonix Documentation + +Welcome to the documentation source for **Resonix**. + +This `docs` folder contains the multilingual (currently `en` and `de`) content for the site built with [VitePress](https://vitepress.dev/). + +## Quick Start (Local Preview) + +1. Install dependencies (uses `pnpm`): + ```bash + pnpm install + pnpm dev + ``` +2. Open the local dev URL printed in the terminal. + +## Structure + +- `.vitepress/` – VitePress config & theme overrides +- `en/` / `de/` – English & German content +- `LICENSE` – License for documentation content + +## Contributing to the Docs + +Please read [CONTRIBUTING.md](./CONTRIBUTING.md) in this folder. In short: + +- For substantial structural/content changes, open an issue first. +- Keep language parity: when adding or changing an English page, create/update the German counterpart (or add a TODO note inside it). +- Use inclusive language and concise examples. +- Prefer relative links; avoid absolute GitHub URLs unless necessary. + +## Translation Workflow + +1. Update the English page. +2. Duplicate to `de/` and translate. +3. If translation will follow later, add at the top: + ```md + > :warning: This page is pending translation. Contributions welcome! + ``` +4. Open a PR referencing the issue (if any). + +## License + +All documentation content is licensed under the same license as the main project. + +> BSD-3-Clause + +## Feedback + +Please open an issue in the main repository for suggestions, typos, or structural improvements. diff --git a/docs/.github/SECURITY.md b/docs/.github/SECURITY.md new file mode 100644 index 0000000..ebb95a6 --- /dev/null +++ b/docs/.github/SECURITY.md @@ -0,0 +1,17 @@ +# Security Policy (Docs) + +The authoritative security policy is maintained at the repository root: [SECURITY.md](https://github.com/resonix-dev/resonix-node/blob/master/SECURITY.md). + +Please read that file for: + +- Supported versions / release lines +- How to report a vulnerability (private disclosure process) +- Expected response timelines + +Direct link: + +- https://github.com/resonix-dev/resonix-node/blob/master/SECURITY.md + +## Documentation-Specific Notes + +If you discover a security issue within the documentation site infrastructure (build pipeline, published assets) rather than the application code, you may still use the same private disclosure channel. Please clearly state in your report that the issue concerns the documentation delivery mechanism. diff --git a/docs/.github/SUPPORT.md b/docs/.github/SUPPORT.md new file mode 100644 index 0000000..1cff5c9 --- /dev/null +++ b/docs/.github/SUPPORT.md @@ -0,0 +1,27 @@ +# Support + +Need help with Resonix? + +## Channels + +| Topic | Where | Notes | +| ----------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------- | +| General usage questions | GitHub Discussions (if enabled) / Issues (question label) | Search first to avoid duplicates | +| Bug reports | GitHub Issues | Include reproduction steps, expected vs actual behavior | +| Security concerns | See [SECURITY.md](https://github.com/resonix-dev/resonix-node/blob/master/SECURITY.md) | Use private disclosure channel only | +| Feature requests | GitHub Issues / Discussions | Provide motivation & alternatives considered | +| Documentation gaps | Pull Request or Issue | Screenshots helpful for visual issues | + +## Before You Ask + +1. Check existing issues & docs search. +2. Verify you are on a supported version. +3. Reproduce with minimal steps or a small test snippet. + +## Response Expectations + +This is an open-source project maintained by volunteers. Response times may vary; security reports have priority. + +## Commercial / Enterprise + +If you require SLAs or commercial support, open a discussion to gauge interest—this may evolve as the project grows. diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..07d5b61 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,3 @@ +node_modules +.vitepress/dist +.vitepress/cache \ No newline at end of file diff --git a/docs/.prettierignore b/docs/.prettierignore new file mode 100644 index 0000000..62c25b2 --- /dev/null +++ b/docs/.prettierignore @@ -0,0 +1,3 @@ +node_modules +.vitepress/cache/ +.vitepress/dist/ \ No newline at end of file diff --git a/docs/.prettierrc b/docs/.prettierrc new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/docs/.prettierrc @@ -0,0 +1 @@ +{} diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts new file mode 100644 index 0000000..712c67f --- /dev/null +++ b/docs/.vitepress/config.ts @@ -0,0 +1,168 @@ +import { + defineConfig, + resolveSiteDataByRoute, + type HeadConfig, +} from "vitepress"; +import { groupIconMdPlugin } from "vitepress-plugin-group-icons"; + +const prod = !!process.env.NETLIFY; + +export default async function () { + const registry_url = "https://registry.npmjs.org/contentkit"; + const latest_version = await fetch(registry_url) + .then((res) => res.json()) + .then((data) => data["dist-tags"].latest); + + // Site configuration (see https://vitepress.dev/reference/site-config ) + return defineConfig({ + rewrites: { + "en/:rest*": ":rest*", + }, + title: "ContentKit", + description: "Type-safe content toolkit", + lang: "en-US", + lastUpdated: true, + cleanUrls: true, + sitemap: { hostname: "https://contentkit.js.org" }, + appearance: false, + markdown: { + config(md) { + const fence = md.renderer.rules.fence!; + md.renderer.rules.fence = function (tokens, idx, options, env, self) { + const locale = (env as any).locale || "en"; + const isGerman = locale === "de"; + const codeCopyButtonTitle = isGerman ? "Code kopieren" : "Copy code"; + return fence(tokens, idx, options, env, self).replace( + '', + ``, + ); + }; + md.use(groupIconMdPlugin); + }, + }, + head: [ + [ + "link", + { + rel: "icon", + type: "image/png", + href: "/logo.png", + }, + ], + ["meta", { name: "theme-color", content: "#5179fd" }], + ["meta", { property: "og:type", content: "website" }], + ["meta", { property: "og:site_name", content: "ContentKit" }], + ["meta", { property: "og:url", content: "https://contentkit.js.org/" }], + [ + "script", + {}, + `try{ + localStorage.setItem('vitepress-theme-appearance','dark'); + document.documentElement.classList.add('dark'); + }catch(e){}`, + ], + ], + themeConfig: { + logo: "/logo.png", + editLink: { + pattern: + "https://github.com/infinitejs/contentkit/blob/master/docs/:path", + text: "Edit this page on GitHub", + }, + socialLinks: [ + { icon: "github", link: "https://github.com/infinitejs/contentkit" }, + ], + footer: { + message: "Released under the BSD-3-Clause License.", + copyright: "Copyright © 2025-present ContentKit contributors", + }, + search: { provider: "local" }, + }, + locales: { + root: { + label: "English", + lang: "en-US", + title: "ContentKit", + description: "Type-safe content toolkit", + themeConfig: { + nav: [ + { text: "Guide", link: "/guide/", activeMatch: "/guide/" }, + { text: "API", link: "/api/reference", activeMatch: "/api/" }, + { + text: `v${latest_version}`, + items: [ + { + text: "Security", + link: "https://github.com/infinitejs/contentkit/blob/master/SECURITY.md", + }, + { + text: "Contribution Guide", + link: "https://github.com/infinitejs/contentkit/blob/master/CONTRIBUTING.md", + }, + ], + }, + ], + sidebar: { + "/guide/": [ + { text: "Introduction", link: "/guide/" }, + { text: "Installation", link: "/guide/installation" }, + { text: "Configuration", link: "/guide/configuration" }, + { text: "Build Output", link: "/guide/output" }, + { text: "CLI", link: "/guide/cli" }, + ], + "/api/": [ + { + text: "API", + items: [{ text: "Reference", link: "/api/reference" }], + }, + ], + }, + }, + }, + de: { + label: "Deutsch", + lang: "de-DE", + title: "ContentKit", + description: "Type-safe Content Toolkit", + themeConfig: { + nav: [ + { + text: "Leitfaden", + link: "/de/guide/", + activeMatch: "/de/guide/", + }, + { text: "API", link: "/de/api/reference", activeMatch: "/de/api/" }, + ], + sidebar: { + "/de/guide/": [ + { text: "Einführung", link: "/de/guide/" }, + { text: "Installation", link: "/de/guide/installation" }, + { text: "Konfiguration", link: "/de/guide/configuration" }, + { text: "Build Ausgabe", link: "/de/guide/output" }, + { text: "CLI", link: "/de/guide/cli" }, + ], + "/de/api/": [ + { + text: "API", + items: [{ text: "Referenz", link: "/de/api/reference" }], + }, + ], + }, + }, + }, + }, + transformPageData: prod + ? (pageData, ctx) => { + const site = resolveSiteDataByRoute( + ctx.siteConfig.site, + pageData.relativePath, + ); + const title = `${pageData.title || site.title} | ${pageData.description || site.description}`; + ((pageData.frontmatter.head ??= []) as HeadConfig[]).push( + ["meta", { property: "og:locale", content: site.lang }], + ["meta", { property: "og:title", content: title }], + ); + } + : undefined, + }); +} diff --git a/docs/.vitepress/theme/group-icons.css b/docs/.vitepress/theme/group-icons.css new file mode 100644 index 0000000..a13a388 --- /dev/null +++ b/docs/.vitepress/theme/group-icons.css @@ -0,0 +1,70 @@ +[data-title="bun"], +[data-title="bunx"]:before { + content: ""; + --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 32 32'%3E%3Cpath fill='%23fbf0df' d='M29 17c0 5.65-5.82 10.23-13 10.23S3 22.61 3 17c0-3.5 2.24-6.6 5.66-8.44S14.21 4.81 16 4.81s3.32 1.54 7.34 3.71C26.76 10.36 29 13.46 29 17'/%3E%3Cpath fill='none' stroke='%23000' d='M16 27.65c7.32 0 13.46-4.65 13.46-10.65c0-3.72-2.37-7-5.89-8.85c-1.39-.75-2.46-1.41-3.37-2l-1.13-.69A6.14 6.14 0 0 0 16 4.35a6.9 6.9 0 0 0-3.3 1.23c-.42.24-.86.51-1.32.8c-.87.54-1.83 1.13-3 1.73C4.91 10 2.54 13.24 2.54 17c0 6 6.14 10.65 13.46 10.65Z'/%3E%3Cellipse cx='21.65' cy='18.62' fill='%23febbd0' rx='2.17' ry='1.28'/%3E%3Cellipse cx='10.41' cy='18.62' fill='%23febbd0' rx='2.17' ry='1.28'/%3E%3Cpath fill-rule='evenodd' d='M11.43 18.11a2 2 0 1 0-2-2.05a2.05 2.05 0 0 0 2 2.05m9.2 0a2 2 0 1 0-2-2.05a2 2 0 0 0 2 2.05'/%3E%3Cpath fill='%23fff' fill-rule='evenodd' d='M10.79 16.19a.77.77 0 1 0-.76-.77a.76.76 0 0 0 .76.77m9.2 0a.77.77 0 1 0 0-1.53a.77.77 0 0 0 0 1.53'/%3E%3Cpath fill='%23b71422' stroke='%23000' stroke-width='.75' d='M18.62 19.67a3.3 3.3 0 0 1-1.09 1.75a2.48 2.48 0 0 1-1.5.69a2.53 2.53 0 0 1-1.5-.69a3.28 3.28 0 0 1-1.08-1.75a.26.26 0 0 1 .29-.3h4.58a.27.27 0 0 1 .3.3Z'/%3E%3Cpath fill='%23ccbea7' fill-rule='evenodd' d='M14.93 5.75a6.1 6.1 0 0 1-2.09 4.62c-.1.09 0 .27.11.22c1.25-.49 2.94-1.94 2.23-4.88c-.03-.15-.25-.11-.25.04m.85 0a6 6 0 0 1 .57 5c0 .13.12.24.21.13c.83-1 1.54-3.11-.59-5.31c-.1-.11-.27.04-.19.17Zm1-.06a6.1 6.1 0 0 1 2.53 4.38c0 .14.21.17.24 0c.34-1.3.15-3.51-2.66-4.66c-.12-.02-.21.18-.09.27ZM9.94 9.55a6.27 6.27 0 0 0 3.89-3.33c.07-.13.28-.08.25.07c-.64 3-2.79 3.59-4.13 3.51c-.14-.01-.14-.21-.01-.25'/%3E%3C/svg%3E"); +} + +/* JavaScript file/group titles share the same JS icon */ +[data-title="index\.js"], +[data-title="JavaScript"], +[data-title="contentkit\.config\.js"], +[data-title="contentkit\.config\.cjs"], +[data-title="contentkit\.config\.mjs"], +[data-title="jsconfig\.json"], +[data-title="next\.config\.js"], +[data-title="next\.config\.mjs"] { + content: ""; + --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 32 32'%3E%3Cpath fill='%23f5de19' d='M18.774 19.7a3.73 3.73 0 0 0 3.376 2.078c1.418 0 2.324-.709 2.324-1.688c0-1.173-.931-1.589-2.491-2.272l-.856-.367c-2.469-1.052-4.11-2.37-4.11-5.156c0-2.567 1.956-4.52 5.012-4.52A5.06 5.06 0 0 1 26.9 10.52l-2.665 1.711a2.33 2.33 0 0 0-2.2-1.467a1.49 1.49 0 0 0-1.638 1.467c0 1.027.636 1.442 2.1 2.078l.856.366c2.908 1.247 4.549 2.518 4.549 5.376c0 3.081-2.42 4.769-5.671 4.769a6.58 6.58 0 0 1-6.236-3.5ZM6.686 20c.538.954 1.027 1.76 2.2 1.76c1.124 0 1.834-.44 1.834-2.15V7.975h3.422v11.683c0 3.543-2.078 5.156-5.11 5.156A5.31 5.31 0 0 1 3.9 21.688Z'/%3E%3C/svg%3E"); +} + +/* TypeScript / TS-related config files share the TS icon */ +[data-title="index\.ts"], +[data-title="TypeScript"], +[data-title="contentkit\.config\.ts"], +[data-title="tsconfig\.json"], +[data-title="next\.config\.ts"] { + content: ""; + --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 32 32'%3E%3Cpath fill='%23007acc' d='M23.827 8.243a4.4 4.4 0 0 1 2.223 1.281a6 6 0 0 1 .852 1.143c.011.045-1.534 1.083-2.471 1.662c-.034.023-.169-.124-.322-.35a2.01 2.01 0 0 0-1.67-1c-1.077-.074-1.771.49-1.766 1.433a1.3 1.3 0 0 0 .153.666c.237.49.677.784 2.059 1.383c2.544 1.095 3.636 1.817 4.31 2.843a5.16 5.16 0 0 1 .416 4.333a4.76 4.76 0 0 1-3.932 2.815a11 11 0 0 1-2.708-.028a6.53 6.53 0 0 1-3.616-1.884a6.3 6.3 0 0 1-.926-1.371a3 3 0 0 1 .327-.208c.158-.09.756-.434 1.32-.761l1.024-.6l.214.312a4.8 4.8 0 0 0 1.35 1.292a3.3 3.3 0 0 0 3.458-.175a1.545 1.545 0 0 0 .2-1.974c-.276-.395-.84-.727-2.443-1.422a8.8 8.8 0 0 1-3.349-2.055a4.7 4.7 0 0 1-.976-1.777a7.1 7.1 0 0 1-.062-2.268a4.33 4.33 0 0 1 3.644-3.374a9 9 0 0 1 2.691.084m-8.343 1.483l.011 1.454h-4.63v13.148H7.6V11.183H2.97V9.755a14 14 0 0 1 .04-1.466c.017-.023 2.832-.034 6.245-.028l6.211.017Z'/%3E%3C/svg%3E"); +} + +[data-title="npm"], +[data-title="npx"]:before { + content: ""; + --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 32 32'%3E%3Cpath fill='%23c12127' d='M2 2h28v28H2'/%3E%3Cpath fill='%23fff' d='M7.25 7.25h17.5v17.5h-3.5v-14H16v14H7.25'/%3E%3C/svg%3E"); +} + +[data-title="package\.json"]:before { + content: ""; + --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 32 32'%3E%3Cpath fill='%2383cd29' d='M16 30a2.15 2.15 0 0 1-1.076-.288L11.5 27.685c-.511-.286-.262-.387-.093-.446a6.8 6.8 0 0 0 1.549-.7a.26.26 0 0 1 .255.019l2.631 1.563a.34.34 0 0 0 .318 0l10.26-5.922a.32.32 0 0 0 .157-.278V10.075a.33.33 0 0 0-.159-.283l-10.26-5.917a.32.32 0 0 0-.317 0L5.587 9.794a.33.33 0 0 0-.162.281v11.841a.32.32 0 0 0 .161.274L8.4 23.814c1.525.762 2.459-.136 2.459-1.038V11.085a.3.3 0 0 1 .3-.3h1.3a.3.3 0 0 1 .3.3v11.692c0 2.035-1.108 3.2-3.038 3.2a4.4 4.4 0 0 1-2.363-.642l-2.697-1.547a2.17 2.17 0 0 1-1.076-1.872V10.075A2.16 2.16 0 0 1 4.661 8.2l10.261-5.924a2.25 2.25 0 0 1 2.156 0L27.338 8.2a2.17 2.17 0 0 1 1.077 1.87v11.846a2.17 2.17 0 0 1-1.077 1.872l-10.26 5.924A2.15 2.15 0 0 1 16 30'/%3E%3Cpath fill='%2383cd29' d='M14.054 17.953a.3.3 0 0 1 .3-.3h1.327a.3.3 0 0 1 .295.251c.2 1.351.8 2.032 3.513 2.032c2.161 0 3.082-.489 3.082-1.636c0-.661-.261-1.152-3.62-1.481c-2.808-.278-4.544-.9-4.544-3.144c0-2.07 1.745-3.305 4.67-3.305c3.287 0 4.914 1.141 5.12 3.589a.3.3 0 0 1-.295.323h-1.336a.3.3 0 0 1-.288-.232c-.319-1.421-1.1-1.875-3.2-1.875c-2.36 0-2.634.822-2.634 1.438c0 .746.324.964 3.51 1.385c3.153.417 4.651 1.007 4.651 3.223c0 2.236-1.864 3.516-5.115 3.516c-4.495.006-5.436-2.055-5.436-3.784'/%3E%3C/svg%3E"); +} + +[data-title="pnpm"]:before { + content: ""; + --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 32 32'%3E%3Cpath fill='%23f9ad00' d='M30 10.75h-8.749V2H30Zm-9.626 0h-8.75V2h8.75Zm-9.625 0H2V2h8.749ZM30 20.375h-8.749v-8.75H30Z'/%3E%3Cpath fill='%234e4e4e' d='M20.374 20.375h-8.75v-8.75h8.75Zm0 9.625h-8.75v-8.75h8.75ZM30 30h-8.749v-8.75H30Zm-19.251 0H2v-8.75h8.749Z'/%3E%3C/svg%3E"); +} + +.vp-code-group .tabs label[data-title]::before { + display: inline-block; + width: 1em; + height: 1em; + background: var(--icon) no-repeat center / 1em 1em; + margin-right: 0.4em; + vertical-align: -0.15em; + content: ""; +} + +[data-title="yarn"]:before { + content: ""; + --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 32 32'%3E%3Cpath fill='%232188b6' d='M28.208 24.409a10.5 10.5 0 0 0-3.959 1.822a23.7 23.7 0 0 1-5.835 2.642a1.63 1.63 0 0 1-.983.55a62 62 0 0 1-6.447.577c-1.163.009-1.876-.3-2.074-.776a1.573 1.573 0 0 1 .866-2.074a4 4 0 0 1-.514-.379c-.171-.171-.352-.514-.406-.388c-.225.55-.343 1.894-.947 2.5c-.83.839-2.4.559-3.328.072c-1.019-.541.072-1.813.072-1.813a.73.73 0 0 1-.992-.343a4.85 4.85 0 0 1-.667-2.949a5.37 5.37 0 0 1 1.749-2.895a9.3 9.3 0 0 1 .658-4.4a10.45 10.45 0 0 1 3.165-3.661S6.628 10.747 7.35 8.817c.469-1.262.658-1.253.812-1.308a3.6 3.6 0 0 0 1.452-.857a5.27 5.27 0 0 1 4.41-1.7S15.2 1.4 16.277 2.09a18.4 18.4 0 0 1 1.533 2.886s1.281-.748 1.425-.469a11.33 11.33 0 0 1 .523 6.132a14 14 0 0 1-2.6 5.411c-.135.225 1.551.938 2.615 3.887c.983 2.7.108 4.96.262 5.212c.027.045.036.063.036.063s1.127.09 3.391-1.308a8.5 8.5 0 0 1 4.277-1.604a1.081 1.081 0 0 1 .469 2.11Z'/%3E%3C/svg%3E"); +} + +[data-title="Unix"]:before { + content: ""; + --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath fill='%23202020' d='M13.338 12.033c-.1-.112-.146-.319-.197-.54-.05-.22-.107-.457-.288-.61v-.001a.756.756 0 00-.223-.134c.252-.745.153-1.487-.1-2.157-.312-.823-.855-1.54-1.27-2.03-.464-.586-.918-1.142-.91-1.963.014-1.254.138-3.579-2.068-3.582-.09 0-.183.004-.28.012-2.466.198-1.812 2.803-1.849 3.675-.045.638-.174 1.14-.613 1.764-.515.613-1.24 1.604-1.584 2.637-.162.487-.24.984-.168 1.454-.023.02-.044.041-.064.063-.151.161-.263.357-.388.489-.116.116-.282.16-.464.225-.183.066-.383.162-.504.395v.001a.702.702 0 00-.077.339c0 .108.016.217.032.322.034.22.068.427.023.567-.144.395-.163.667-.061.865.102.199.31.286.547.335.473.1 1.114.075 1.619.342l.043-.082-.043.082c.54.283 1.089.383 1.526.284a.99.99 0 00.706-.552c.342-.002.717-.146 1.318-.18.408-.032.918.145 1.503.113a.806.806 0 00.068.183l.001.001c.227.455.65.662 1.1.627.45-.036.928-.301 1.315-.762l-.07-.06.07.06c.37-.448.982-.633 1.388-.878.203-.123.368-.276.38-.499.013-.222-.118-.471-.418-.805z'/%3E%3Cpath fill='%23F8BF11' d='M13.571 12.828c-.007.137-.107.24-.29.35-.368.222-1.019.414-1.434.918-.362.43-.802.665-1.19.696-.387.03-.721-.13-.919-.526v-.002c-.123-.233-.072-.6.031-.987s.251-.785.271-1.108v-.001c.02-.415.044-.776.114-1.055.07-.28.179-.468.373-.575a.876.876 0 01.027-.014c.022.359.2.725.514.804.343.09.838-.204 1.047-.445l.122-.004c.184-.005.337.006.495.143v.001c.121.102.179.296.229.512.05.217.09.453.239.621.287.32.38.534.371.672zM6.592 13.843v.003c-.034.435-.28.672-.656.758-.377.086-.888 0-1.398-.266-.565-.3-1.237-.27-1.667-.36-.216-.045-.357-.113-.421-.238-.064-.126-.066-.345.071-.72v-.001l.001-.002c.068-.209.018-.438-.015-.653-.033-.214-.049-.41.024-.546l.001-.001c.094-.181.232-.246.403-.307.17-.062.373-.11.533-.27l.001-.001h.001c.148-.157.26-.353.39-.492.11-.117.22-.195.385-.196h.005a.61.61 0 01.093.008c.22.033.411.187.596.437l.533.971v.001c.142.296.441.622.695.954.254.333.45.666.425.921z'/%3E%3Cpath fill='%23D6A312' d='M9.25 4.788c-.043-.084-.13-.164-.28-.225-.31-.133-.444-.142-.617-.254-.28-.181-.513-.244-.706-.244a.834.834 0 00-.272.047c-.236.08-.392.25-.49.342-.02.019-.044.035-.104.08-.06.043-.15.11-.28.208-.117.086-.154.2-.114.332.04.132.167.285.4.417h.001c.145.085.244.2.358.291a.801.801 0 00.189.117c.072.031.156.052.26.058.248.015.43-.06.59-.151.16-.092.296-.204.452-.255h.001c.32-.1.548-.301.62-.493a.324.324 0 00-.008-.27z'/%3E%3Cpath fill='%23202020' d='M8.438 5.26c-.255.133-.552.294-.869.294-.316 0-.566-.146-.745-.289-.09-.07-.163-.142-.218-.193-.096-.075-.084-.181-.045-.178.066.008.076.095.117.134.056.052.126.12.211.187.17.135.397.266.68.266.284 0 .614-.166.816-.28.115-.064.26-.179.379-.266.09-.067.087-.147.162-.138.075.009.02.089-.085.18-.105.092-.27.214-.403.283z'/%3E%3Cpath fill='%23fff' d='M12.337 10.694a1.724 1.724 0 00-.104 0h-.01c.088-.277-.106-.48-.621-.713-.534-.235-.96-.212-1.032.265-.005.025-.009.05-.011.076a.801.801 0 00-.12.054c-.252.137-.389.386-.465.692-.076.305-.098.674-.119 1.09-.013.208-.099.49-.186.79-.875.624-2.09.894-3.122.19-.07-.11-.15-.22-.233-.328a13.85 13.85 0 00-.16-.205.65.65 0 00.268-.05.34.34 0 00.186-.192c.063-.17 0-.408-.202-.68-.201-.273-.542-.58-1.043-.888-.368-.23-.574-.51-.67-.814-.097-.305-.084-.635-.01-.96.143-.625.51-1.233.743-1.614.063-.046.023.086-.236.567-.232.44-.667 1.455-.072 2.248.016-.564.15-1.14.377-1.677.329-.747 1.018-2.041 1.072-3.073.029.02.125.086.169.11.126.075.221.184.344.283a.85.85 0 00.575.2c.24 0 .427-.079.582-.168.17-.096.304-.204.433-.245.27-.085.486-.235.608-.41.21.83.7 2.027 1.014 2.611.167.31.5.969.643 1.762.091-.002.191.01.299.038.375-.973-.319-2.022-.636-2.314-.128-.124-.135-.18-.07-.177.343.304.795.917.96 1.608.075.315.09.646.01.973.04.017.08.034.12.054.603.293.826.548.719.897z'/%3E%3Cpath fill='%23E6E6E6' d='M8.04 8.062c-.556.002-1.099.251-1.558.716-.46.464-.814 1.122-1.018 1.888l.061.038v.004c.47.298.805.598 1.012.878.219.296.316.584.223.834a.513.513 0 01-.27.283l-.041.015c.074.097.146.197.213.3.944.628 2.042.396 2.867-.172.08-.278.153-.536.163-.698.021-.415.042-.792.124-1.12.082-.33.242-.63.544-.795.017-.01.034-.015.051-.023a.756.756 0 01.022-.094c-.242-.622-.591-1.14-1.01-1.5-.42-.36-.897-.551-1.382-.554zm2.37 2.155l-.002.005v-.002l.001-.004z'/%3E%3Cpath fill='%23fff' d='M9.278 3.833a1.05 1.05 0 01-.215.656 4.119 4.119 0 00-.218-.09l-.127-.045c.029-.035.085-.075.107-.127a.669.669 0 00.05-.243l.001-.01a.673.673 0 00-.035-.236.434.434 0 00-.108-.184.223.223 0 00-.156-.07H8.57a.228.228 0 00-.151.06.434.434 0 00-.122.175.676.676 0 00-.05.243v.01a.718.718 0 00.009.14 1.773 1.773 0 00-.354-.12 1.196 1.196 0 01-.01-.133v-.013a1.035 1.035 0 01.088-.447.793.793 0 01.25-.328.554.554 0 01.346-.123h.006c.125 0 .232.036.342.116a.78.78 0 01.257.324c.063.138.094.273.097.433l.001.012zM7.388 3.997a1.05 1.05 0 00-.277.125.623.623 0 00.002-.15v-.008a.651.651 0 00-.048-.192.37.37 0 00-.096-.141.158.158 0 00-.119-.045c-.042.004-.077.024-.11.065a.372.372 0 00-.07.156.626.626 0 00-.013.205v.008a.634.634 0 00.048.193.367.367 0 00.116.156l-.102.08-.078.056a.706.706 0 01-.16-.24c-.053-.12-.082-.24-.09-.381v-.001a1.071 1.071 0 01.045-.39.668.668 0 01.167-.292.359.359 0 01.264-.118c.084 0 .158.028.235.09a.68.68 0 01.199.271c.053.12.08.24.089.382v.001c.003.06.003.115-.002.17z'/%3E%3Cpath fill='%23202020' d='M7.806 4.335c.01.034.065.029.097.045.027.014.05.045.08.046.03.001.076-.01.08-.04.005-.038-.052-.063-.088-.077-.047-.019-.107-.028-.151-.003-.01.005-.021.018-.018.03zM7.484 4.335c-.01.034-.065.029-.096.045-.028.014-.05.045-.081.046-.03.001-.076-.01-.08-.04-.005-.038.052-.063.088-.077.047-.019.108-.028.152-.003.01.005.02.018.017.03z'/%3E%3C/svg%3E"); +} + +[data-title="Windows Powershell"]:before, +[data-title="Windows PowerShell"]:before { + content: ""; + --icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Cpath fill='%230277bd' d='M19.847,41.956c-5.629-0.002-11.259,0.024-16.888-0.013c-2.855-0.019-3.374-0.7-2.731-3.525 c2.178-9.58,4.427-19.143,6.557-28.734C7.356,7.112,8.588,5.975,11.312,6C22.57,6.106,33.829,6.034,45.088,6.046 c2.824,0.003,3.298,0.614,2.664,3.511c-2.058,9.406-4.129,18.809-6.236,28.203c-0.789,3.516-1.697,4.187-5.353,4.195 C30.724,41.966,25.285,41.958,19.847,41.956z'/%3E%3Cpath fill='%23fafafa' d='M25.057 23.922c-.608-.687-1.114-1.267-1.531-1.732-2.43-2.728-4.656-5.27-7.063-7.869-1.102-1.189-1.453-2.344-.13-3.518 1.307-1.16 2.592-1.058 3.791.277 3.34 3.717 6.676 7.438 10.071 11.104 1.268 1.369.972 2.3-.424 3.315-5.359 3.895-10.687 7.833-16.01 11.778-1.196.887-2.337 1.109-3.304-.201-1.066-1.445-.08-2.305 1.026-3.114 3.955-2.893 7.903-5.798 11.834-8.725C23.865 24.83 24.595 24.267 25.057 23.922zM21.75 37C20.625 37 20 36 20 35s.625-2 1.75-2c4.224 0 6.112 0 9.5 0 1.125 0 1.75 1 1.75 2s-.625 2-1.75 2C29.125 37 25 37 21.75 37z'/%3E%3C/svg%3E"); +} diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 0000000..bcddfcb --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,9 @@ +import Theme from "vitepress/theme"; +import "./group-icons.css"; +import "./styles.css"; +export default { + ...Theme, + enhanceApp({ app }) { + Theme.enhanceApp?.({ app } as any); + }, +}; diff --git a/docs/.vitepress/theme/styles.css b/docs/.vitepress/theme/styles.css new file mode 100644 index 0000000..1c5a94d --- /dev/null +++ b/docs/.vitepress/theme/styles.css @@ -0,0 +1,43 @@ +:root:where(:lang(fa)) { + --vp-font-family-base: + "Vazirmatn", "Inter", ui-sans-serif, system-ui, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; +} + +:root { + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient( + 120deg, + #5179fd 30%, + #d4fcff + ); + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + rgba(81, 121, 253, 0.25) 30%, + rgba(212, 252, 255, 0.25) + ); + --vp-home-hero-image-filter: blur(44px); +} + +@media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(56px); + } +} + +@media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(68px); + } +} + +.VPHero .VPImage { + filter: drop-shadow(-2px 4px 6px rgba(0, 0, 0, 0.2)); + padding: 18px; +} + +/* used in reference/default-theme-search */ +img[src="/search.png"] { + width: 100%; + aspect-ratio: 1 / 1; +} diff --git a/docs/LICENSE b/docs/LICENSE new file mode 100644 index 0000000..6cffc20 --- /dev/null +++ b/docs/LICENSE @@ -0,0 +1,28 @@ +BSD 3-Clause License + +Copyright (c) 2025, Resonix OSS Team + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/de/api/reference.md b/docs/de/api/reference.md new file mode 100644 index 0000000..fb595c5 --- /dev/null +++ b/docs/de/api/reference.md @@ -0,0 +1,289 @@ +--- +outline: deep +--- + +# API Referenz + +Diese Seite dokumentiert die öffentlichen APIs von ContentKit: CLI Commands, Konfigurationsschema, Runtime Exports und generierte Typen. + +## CLI + +`contentkit` stellt drei primäre Commands bereit. + +### build + +Baut deine Content-Collection(s), validiert Frontmatter gegen dein Schema, generiert JSON Daten & TypeScript Deklarationsdateien und schreibt ein virtuelles Package `dot-contentkit` innerhalb von `.contentkit/`. + +```bash +npx contentkit build +``` + +Outputs: + +- `.contentkit/package.json` (ephemere Version mit zufälligem Prerelease) +- `.contentkit/generated/` Verzeichnis mit per‑Typ JSON Indizes und `index.js` +- `.contentkit/generated/index.d.ts` und `types.d.ts` (falls `generateTypes` nicht deaktiviert) + +### init + +Erstellt eine Starter `contentkit.config.{ts|js|mjs|cjs}` Datei im Projektroot falls noch nicht vorhanden (oder ersetzt eine Config mit anderer Extension, um zur Umgebung zu passen). + +```bash +npx contentkit init +``` + +### validate + +Lädt und type‑checkt (syntaktisch) die Konfigurationsdatei. Nützlich in CI um früh zu failen falls die Config fehlt oder fehlerhaft ist. + +```bash +npx contentkit validate +``` + +--- + +## Konfiguration + +Definiere dein Schema via `contentkit.config.ts` mit `defineConfig` (re-export aus dem Root Package) oder exportiere ein plain object. + +::: code-group + +```ts [contentkit.config.ts] +import { defineConfig } from "contentkit"; + +export default defineConfig({ + contentDirPath: "content", + outputFormat: "esm", // 'esm' | 'cjs' + generateTypes: true, // default true + documentTypes: [ + { + name: "Post", + filePathPattern: "posts/**/*.md", + fields: { + title: { type: "string", required: true }, + date: { type: "date", required: true }, + tags: { type: "array", items: { type: "string" } }, + }, + computedFields: { + slug: { + type: "string", + resolve: (d) => d.title.toLowerCase().replace(/\s+/g, "-"), + }, + }, + }, + ], +}); +``` + +```js [contentkit.config.js] +import { defineConfig } from "contentkit"; + +export default defineConfig({ + contentDirPath: "content", + outputFormat: "esm", + generateTypes: false, + documentTypes: [ + { + name: "Post", + filePathPattern: "posts/**/*.md", + fields: { + title: { type: "string", required: true }, + date: { type: "date", required: true }, + tags: { type: "array", items: { type: "string" } }, + }, + computedFields: { + slug: { + type: "string", + resolve: (d) => d.title.toLowerCase().replace(/\s+/g, "-"), + }, + }, + }, + ], +}); +``` + +::: + +### `ContentKitConfig` + +| Property | Typ | Erforderlich | Beschreibung | +| ---------------- | -------------------------- | ------------ | --------------------------------------------------------------- | ---------------------------------------- | +| `contentDirPath` | `string` | ja | Root-Ordner mit deinen Content-Dateien. | +| `outputFormat` | `'cjs' | 'esm'` | ja | Modul-System für generiertes `index.js`. | +| `generateTypes` | `boolean` | nein | Deaktivieren um `d.ts` Emission zu überspringen. Standard true. | +| `documentTypes` | `DocumentTypeDefinition[]` | ja | Array der Dokumenttyp-Schemata. | + +### `DocumentTypeDefinition` + +| Property | Typ | Erforderlich | Beschreibung | +| ----------------- | ------------------------------- | ------------ | -------------------------------------------------- | +| `name` | `string` | ja | PascalCase Typname für generierte Typen & Exports. | +| `filePathPattern` | `string` | ja | Glob relativ zu `contentDirPath` für Dokumente. | +| `fields` | `Record` | ja | Frontmatter-Schema für Rohfelder. | +| `computedFields` | `Record` | nein | Abgeleitete Felder beim Build aufgelöst. | + +### `FieldType` + +Union für primitive oder Listen / Array Felder. + +Primitive: + +```ts +{ type: 'string' | 'number' | 'boolean' | 'date'; required?: boolean } +``` + +Collections: + +```ts +{ type: 'array' | 'list'; items: { type: 'string' | 'number' | 'boolean' | 'date' | 'array' | 'list' }; required?: boolean } +``` + +### `ComputedField` + +```ts +{ + type: "string" | "number" | "boolean" | "date" | "array" | "list"; + resolve: (data: any) => any; +} +``` + +`data` enthält gemergtes Frontmatter plus: `raw` (Markdown Body), `html` (gerenderte HTML). + +--- + +## Build Output Struktur + +Nach `contentkit build` wird folgende Struktur erzeugt: + +``` +.contentkit/ + package.json # name: 'dot-contentkit' + generated/ + index.js # Re-exports aller Typ-Arrays + allDocuments + index.d.ts # (falls generateTypes) ambient exports + types.d.ts # (falls generateTypes) individuelle Doc Interfaces + / + _index.json # Array der Docs für diesen Typ +``` + +### JSON Dokumentstruktur + +Jeder JSON Eintrag in `/_index.json` ist das hydrierte Dokument: + +```ts +{ + typeName: 'Post', + // frontmatter Felder... + // computed Felder... + raw: string; // originaler Markdown Body + html: string; // gerendert via marked +} +``` + +### Virtueller Package Import + +Füge ein `paths` Mapping (TypeScript) hinzu, damit du generierten Content importieren kannst: +::: code-group + +```jsonc [tsconfig.json] +{ + "compilerOptions": { + "paths": { + "dot-contentkit": [".contentkit/generated"], + }, + }, +} +``` + +```jsonc [jsconfig.json] +{ + "compilerOptions": { + "paths": { + "dot-contentkit": [".contentkit/generated"], + }, + }, +} +``` + +::: + +Dann: + +::: code-group + +```ts [TypeScript] +import { allPosts } from "dot-contentkit"; +console.log(allPosts[0].title); +``` + +```js [JavaScript] +import { allPosts } from "dot-contentkit"; +console.log(allPosts[0].title); +// CommonJS: const { allPosts } = require('dot-contentkit'); +``` + +::: + +- `DocumentTypeNames` string literal Union aller Namen +- `DataExports` Shape der generierten Exports + +--- + +## Frontmatter Parsing + +Unterstützte Frontmatter Formate: + +- YAML (default zwischen `---` Delimitern) +- JSON (Objektliteral zwischen `---` wenn es mit `{}` beginnt/endet) +- TOML (zwischen `+++` Delimitern) + +Validierungsfehler zeigen eine farbige Tabelle; der Build beendet mit Code 1 wenn ein required oder typisiertes Feld invalide ist. + +--- + +## Error Codes + +Einige bekannte Error Codes über den Logger: +| Code | ID | Beschreibung | +|------|----|--------------| +| E001 | CONFIG_NOT_FOUND | Keine Config Datei gefunden. | +| E002 | INVALID_FRONTMATTER_FORMAT | Unsupported oder fehlerhaftes Frontmatter. | +| E003 | INVALID_FRONTMATTER_FORMAT_NO_DELIMITER | Fehlende Frontmatter Delimiter. | + +--- + +## Beispiel End-to-End + +```bash +npx contentkit init +# contentkit.config.ts editieren um documentTypes hinzuzufügen +mkdir -p content/posts +printf "---\ntitle: Hello\ndate: 2025-01-01\n---\n\nBody." > content/posts/hello.md +npx contentkit build +``` + +```ts +import { allPosts } from "dot-contentkit"; +console.log(allPosts[0].title); +``` + +--- + +## Versionierung Hinweis + +Die interne Package-Version nutzt ein zufälliges Prerelease pro Build (z.B. `0.0.0-1A2B3C4D`). Behandle `.contentkit` als transientes Build-Output — nicht veröffentlichen oder committen außer du brauchst deterministische Deploy-Artefakte. + +--- + +## FAQ + +- F: Wie füge ich neue Felder hinzu? + A: Füge sie dem `fields` Objekt einer `DocumentTypeDefinition` hinzu; Build erneut ausführen. Fehlende Pflichtfelder oder falsche Typen failen den Build. +- F: Kann ich die Typ-Generierung deaktivieren? + A: Setze `generateTypes: false` in der Config. +- F: Wie ändere ich CommonJS vs ESM? + A: Setze `outputFormat: 'cjs' | 'esm'`. ESM nutzt JSON Import Assertions. + +--- + +Wenn hier etwas fehlt, bitte ein Issue oder PR auf GitHub öffnen. diff --git a/docs/de/guide/cli.md b/docs/de/guide/cli.md new file mode 100644 index 0000000..07cc71b --- /dev/null +++ b/docs/de/guide/cli.md @@ -0,0 +1,109 @@ +--- +outline: deep +--- + +# CLI + +Zentrale Commands für die Arbeit mit ContentKit. + +## init + +Scaffoldet `contentkit.config.ts`. +::: code-group + +```bash [npx] +npx contentkit init +``` + +```bash [pnpm] +pnpm exec contentkit init +``` + +```bash [yarn] +yarn contentkit init +``` + +```bash [bunx] +bunx contentkit init +``` + +::: + +## validate + +Validiert Dokumente ohne Output zu erzeugen. +::: code-group + +```bash [npx] +npx contentkit validate +``` + +```bash [pnpm] +pnpm exec contentkit validate +``` + +```bash [yarn] +yarn contentkit validate +``` + +```bash [bunx] +bunx contentkit validate +``` + +::: + +Exit Code 1 bei Validierungsfehler. + +## build + +Parst, validiert und schreibt generierte Artefakte. +::: code-group + +```bash [npx] +npx contentkit build +``` + +```bash [pnpm] +pnpm exec contentkit build +``` + +```bash [yarn] +yarn contentkit build +``` + +```bash [bunx] +bunx contentkit build +``` + +::: + +## package.json Scripts + +::: code-group + +```jsonc [package.json] +{ + "scripts": { + "content:build": "contentkit build", + "content:validate": "contentkit validate", + }, +} +``` + +```bash [pnpm] +pnpm run content:build +``` + +```bash [yarn] +yarn content:build +``` + +```bash [npm] +npm run content:build +``` + +```bash [bun] +bun content:build +``` + +::: diff --git a/docs/de/guide/configuration.md b/docs/de/guide/configuration.md new file mode 100644 index 0000000..fb80a29 --- /dev/null +++ b/docs/de/guide/configuration.md @@ -0,0 +1,107 @@ +--- +outline: deep +--- + +# Konfiguration + +Definiere dein Schema in `contentkit.config.ts` mit `defineConfig`. + +## Minimales Beispiel + +::: code-group + +```ts [TypeScript] +// contentkit.config.ts +import { defineConfig } from "contentkit"; + +export default defineConfig({ + contentDirPath: "content", + outputFormat: "esm", + documentTypes: [], +}); +``` + +```js [JavaScript] +// contentkit.config.js +import { defineConfig } from "contentkit"; + +export default defineConfig({ + contentDirPath: "content", + outputFormat: "esm", + documentTypes: [], +}); +``` + +::: + +## Document Type + +::: code-group + +```ts [TypeScript] +// inside contentkit.config.ts +{ + name: 'Post', + filePathPattern: 'posts/**/*.md', + fields: { + title: { type: 'string', required: true }, + date: { type: 'date', required: true }, + tags: { type: 'array', items: { type: 'string' } } + }, + computedFields: { + slug: { type: 'string', resolve: (doc) => doc.title.toLowerCase().replace(/\s+/g, '-') } + } +} +``` + +```js [JavaScript] +// inside contentkit.config.js +{ + name: 'Post', + filePathPattern: 'posts/**/*.md', + fields: { + title: { type: 'string', required: true }, + date: { type: 'date', required: true }, + tags: { type: 'array', items: { type: 'string' } } + }, + computedFields: { + slug: { type: 'string', resolve: (doc) => doc.title.toLowerCase().replace(/\s+/g, '-') } + } +} +``` + +::: + +## Feld-Definition + +Primitive Typen: `string | number | boolean | date` + +Optionen: + +- `required: true` markiert Pflichtfelder +- `list: true` Array dieses Primitivs + +## Computed Fields + +Für abgeleitete Werte wie `slug`, `readingTime`, etc. +::: code-group + +```ts [TypeScript] +readingTime: { type: 'number', resolve: d => Math.ceil(d.raw.split(/\s+/).length / 200) } +``` + +```js [JavaScript] +readingTime: { type: 'number', resolve: (d) => Math.ceil(d.raw.split(/\s+/).length / 200) } +``` + +::: + +## Validierung + +Bei `contentkit build` wird jedes Dokument validiert; Fehler brechen den Build ab. + +## Tipps + +- Halte den Content-Ordner klein & fokussiert +- Bevorzuge berechnete Slugs statt manuell (verhindert Drift) +- Normalisiere Daten mit dem `date` Typ diff --git a/docs/de/guide/index.md b/docs/de/guide/index.md new file mode 100644 index 0000000..bd6933e --- /dev/null +++ b/docs/de/guide/index.md @@ -0,0 +1,51 @@ +--- +outline: deep +--- + +# Überblick Guides + +Willkommen bei den ContentKit Guides. Dieser Abschnitt führt dich durch Installation, Konfiguration und Integration von ContentKit in deine TypeScript / Next.js Projekte und erklärt anschließend die erzeugten Artefakte. + +> ContentKit ist früh und in aktiver Entwicklung. APIs können sich ändern; pinne Versionen und lies Release Notes beim Upgraden. + +## Quick Start (TL;DR) + +1. Installieren: `pnpm add -D contentkit` +2. Config initialisieren: `npx contentkit init` +3. Markdown in deinem `content/` Verzeichnis hinzufügen +4. Build: `npx contentkit build` +5. Daten importieren: `import { allPosts } from 'dot-contentkit/generated'` + +Springe in die detaillierten Guides unten für tiefere Erklärungen und Optionen. + +## Zentrale Guides + +- [Installation](./installation.md) – Paket hinzufügen & Config scaffolden. +- [Konfiguration](./configuration.md) – Dokumenttypen, Felder & Computed Fields definieren. +- [CLI](./cli.md) – Commands (`init`, `validate`, `build`) und Scripting-Tipps. +- [Build Output](./output.md) – Ordnerlayout, Imports & Typen. + +## Konzepte im Überblick + +| Konzept | Was es ist | Wo lesen | +| ----------------- | ---------------------------------------------------- | ---------------------- | +| Document Type | Schema für eine Gruppe von Markdown-Dateien | Konfiguration | +| Frontmatter | Quell-Metadaten (YAML / TOML / JSON) | Konfiguration / Output | +| Computed Field | Abgeleiteter Wert (slug, reading time, etc.) | Konfiguration | +| Generated Package | `dot-contentkit` virtueller Import mit Daten & Typen | Build Output | + +## Roadmap (High Level) + +Geplant / in Exploration: + +- Inkrementelle (per‑Datei) Builds +- Reichere MD/MDX Processing-Pipeline (Plugins / remark / rehype opt-in) +- Watch Mode außerhalb von Next.js +- Optionale Bild/Asset-Metadaten Extraktion +- Verbesserte DX für typsichere Custom Computed Fields + +## Feedback / Issues + +Wenn etwas unklar oder kaputt ist, öffne ein Issue oder PR. Frühes Nutzerfeedback bestimmt stark die Prioritäten. + +Viel Erfolg beim Bauen! diff --git a/docs/de/guide/installation.md b/docs/de/guide/installation.md new file mode 100644 index 0000000..de4f983 --- /dev/null +++ b/docs/de/guide/installation.md @@ -0,0 +1,122 @@ +--- +outline: deep +--- + +# Installation + +Installiere mit deinem bevorzugten Paketmanager: +::: code-group + +```sh [npm] +$ npm install -D contentkit +``` + +```sh [pnpm] +$ pnpm add -D contentkit +``` + +```sh [yarn] +$ yarn add -D contentkit +``` + +```sh [bun] +$ bun add -D contentkit +``` + +::: + +Config initialisieren: +::: code-group + +```bash [npx] +npx contentkit init +``` + +```bash [pnpm] +pnpm exec contentkit init +``` + +```bash [yarn] +yarn contentkit init +``` + +```bash [bunx] +bunx contentkit init +``` + +::: + +Dies erstellt `contentkit.config.ts` (oder `.js`) basierend auf der Umgebung. + +Ein Beispieldokument hinzufügen: + +::: code-group + +```bash [Unix] +mkdir -p content +printf "---\ntitle: Hello World\ndate: 2025-01-01\ntags: [intro]\n---\n\nMein erster Post." > content/hello-world.md +``` + +```powershell [Windows Powershell] +New-Item -ItemType Directory -Force -Path content | Out-Null +@" +--- +title: Hello World +date: 2025-01-01 +tags: [intro] +--- + +Mein erster Post. +"@ | Set-Content content/hello-world.md +``` + +::: + +Build: +::: code-group + +```bash [npx] +npx contentkit build +``` + +```bash [pnpm] +pnpm exec contentkit build +``` + +```bash [yarn] +yarn contentkit build +``` + +```bash [bunx] +bunx contentkit build +``` + +::: + +Generierte Artefakte liegen in `.contentkit/generated` und ein virtuelles Package `dot-contentkit` wird geschrieben. +Nun fügen wir das `dot-contentkit` Package unserem Projekt hinzu. + +Öffne zuerst deine `tsconfig.json` (oder `jsconfig.json`) Datei und füge folgendes Path Mapping hinzu: +::: code-group + +```jsonc [tsconfig.json] +{ + "compilerOptions": { + "paths": { + "dot-contentkit": [".contentkit/generated"], + }, + }, +} +``` + +```jsonc [jsconfig.json] +{ + "compilerOptions": { + "paths": { + "dot-contentkit": [".contentkit/generated"], + }, + }, +} +``` + +::: diff --git a/docs/de/guide/output.md b/docs/de/guide/output.md new file mode 100644 index 0000000..e0c96ca --- /dev/null +++ b/docs/de/guide/output.md @@ -0,0 +1,59 @@ +--- +outline: deep +--- + +# Build Output + +Nach `npx contentkit build` wird ein `.contentkit/` Verzeichnis erstellt. + +``` +.contentkit/ + package.json # Name "dot-contentkit" für lokale Imports + generated/ + index.js + index.d.ts + types.d.ts + Post/_index.json # eins pro Dokumenttyp (Array der Docs) +``` + +## Imports + +::: code-group + +```ts [TypeScript] +import { allPosts } from "dot-contentkit/generated"; +``` + +```js [JavaScript] +import { allPosts } from "dot-contentkit/generated"; +// oder CommonJS: const { allPosts } = require('dot-contentkit/generated'); +``` + +::: + +Jedes Dokument enthält Frontmatter-Felder + alle Computed Fields. + +## Typen + +`types.d.ts` exportiert Interfaces und Unions. + +::: code-group + +```ts [TypeScript] +import type { Post } from "dot-contentkit/generated"; +``` + +```js [JavaScript] +// Typen zur Laufzeit nicht verfügbar; für Editoren mit JSDoc: +/** @typedef {import('dot-contentkit/generated').Post} Post */ +``` + +::: + +## Regeneration + +Führe den Build erneut aus, wann immer Content oder Config sich ändern. Der Ordner wird komplett überschrieben. + +## Versionskontrolle + +Checke `.contentkit/` ein für reproduzierbare Deploys oder generiere während CI – beides funktioniert. diff --git a/docs/de/index.md b/docs/de/index.md new file mode 100644 index 0000000..92558e1 --- /dev/null +++ b/docs/de/index.md @@ -0,0 +1,37 @@ +--- +layout: home +hero: + name: ContentKit + text: Typ‑sicheres Content-Toolkit + tagline: Frontmatter & Markdown parsen, Felder validieren, Typen & Datenabfragen generieren – alles in einem schlanken Build-Schritt. + image: /logo.png + actions: + - theme: brand + text: Loslegen + link: /guide/ + - theme: alt + text: API Referenz + link: /api/reference + - theme: alt + text: GitHub + link: https://github.com/infinitejs/contentkit +features: + - icon: ⚙️ + title: CMS ohne Runtime + details: Versionskontrolliertes Markdown + Frontmatter im Repo, kompiliert zu typisiertem JSON & TS-Definitionen. + - icon: 🧪 + title: Typ-Generierung + details: Automatisch generierte d.ts & diskriminierte Unions für jeden Dokumenttyp. + - icon: 🧩 + title: Framework‑freundlich + details: Funktioniert mit Next.js SSG/ISR oder jedem Build-Pipeline – einfach generierte Daten importieren. + - icon: 🛡️ + title: Strikte Feldvalidierung + details: Required-Flags, Typisierung von List-Items und Datumskonvertierung verhindern stilles Content-Driften. + - icon: ⚡ + title: Schnelle Builds + details: Minimales IO + Streaming-Markdown-Parsing halten Build-Zeiten winzig. + - icon: 📦 + title: Lokales virtuelles Package + details: Imports via 'dot-contentkit/generated' für klare Modul-Grenzen. +--- diff --git a/docs/en/api/reference.md b/docs/en/api/reference.md new file mode 100644 index 0000000..9d6729b --- /dev/null +++ b/docs/en/api/reference.md @@ -0,0 +1,289 @@ +--- +outline: deep +--- + +# API Reference + +This page documents the public APIs exposed by ContentKit: the CLI commands, configuration schema, runtime exports, and type generation outputs. + +## CLI + +`contentkit` provides three primary commands. + +### build + +Builds your content collection(s), validates frontmatter against your schema, generates JSON data & TypeScript declaration files, and writes a virtual package `dot-contentkit` inside `.contentkit/`. + +```bash +npx contentkit build +``` + +Outputs: + +- `.contentkit/package.json` (ephemeral version with random prerelease) +- `.contentkit/generated/` directory containing per‑type JSON indexes and `index.js` +- `.contentkit/generated/index.d.ts` and `types.d.ts` (unless `generateTypes` disabled) + +### init + +Creates a starter `contentkit.config.{ts|js|mjs|cjs}` file in the project root if one does not already exist (or replaces a config with a different extension to match your environment). + +```bash +npx contentkit init +``` + +### validate + +Loads and type‑checks (syntactically) the configuration file. Useful in CI to fail fast if the config is missing or malformed. + +```bash +npx contentkit validate +``` + +--- + +## Configuration + +Define your schema via `contentkit.config.ts` using `defineConfig` (re‑exported from the root package) or by exporting a plain object. + +::: code-group + +```ts [contentkit.config.ts] +import { defineConfig } from "contentkit"; + +export default defineConfig({ + contentDirPath: "content", + outputFormat: "esm", // 'esm' | 'cjs' + generateTypes: true, // default true + documentTypes: [ + { + name: "Post", + filePathPattern: "posts/**/*.md", + fields: { + title: { type: "string", required: true }, + date: { type: "date", required: true }, + tags: { type: "array", items: { type: "string" } }, + }, + computedFields: { + slug: { + type: "string", + resolve: (d) => d.title.toLowerCase().replace(/\s+/g, "-"), + }, + }, + }, + ], +}); +``` + +```js [contentkit.config.js] +import { defineConfig } from "contentkit"; + +export default defineConfig({ + contentDirPath: "content", + outputFormat: "esm", + generateTypes: false, + documentTypes: [ + { + name: "Post", + filePathPattern: "posts/**/*.md", + fields: { + title: { type: "string", required: true }, + date: { type: "date", required: true }, + tags: { type: "array", items: { type: "string" } }, + }, + computedFields: { + slug: { + type: "string", + resolve: (d) => d.title.toLowerCase().replace(/\s+/g, "-"), + }, + }, + }, + ], +}); +``` + +::: + +### `ContentKitConfig` + +| Property | Type | Required | Description | +| ---------------- | -------------------------- | -------- | -------------------------------------------------------- | --------------------------------------- | +| `contentDirPath` | `string` | yes | Root folder containing your content files. | +| `outputFormat` | `'cjs' | 'esm'` | yes | Module system for generated `index.js`. | +| `generateTypes` | `boolean` | no | Disable to skip emitting `d.ts` files. Defaults to true. | +| `documentTypes` | `DocumentTypeDefinition[]` | yes | Array of document type schemas. | + +### `DocumentTypeDefinition` + +| Property | Type | Required | Description | +| ----------------- | ------------------------------- | -------- | -------------------------------------------------------- | +| `name` | `string` | yes | PascalCase type name used for generated types & exports. | +| `filePathPattern` | `string` | yes | Glob relative to `contentDirPath` selecting documents. | +| `fields` | `Record` | yes | Frontmatter schema for raw fields. | +| `computedFields` | `Record` | no | Derived fields resolved at build. | + +### `FieldType` + +Union describing primitive or list / array fields. + +Primitives: + +```ts +{ type: 'string' | 'number' | 'boolean' | 'date'; required?: boolean } +``` + +Collections: + +```ts +{ type: 'array' | 'list'; items: { type: 'string' | 'number' | 'boolean' | 'date' | 'array' | 'list' }; required?: boolean } +``` + +### `ComputedField` + +```ts +{ + type: "string" | "number" | "boolean" | "date" | "array" | "list"; + resolve: (data: any) => any; +} +``` + +`data` will include merged frontmatter plus: `raw` (markdown body), `html` (rendered HTML). + +--- + +## Build Output Structure + +After `contentkit build` the following structure is produced: + +``` +.contentkit/ + package.json # name: 'dot-contentkit' + generated/ + index.js # Imports & re-exports all type arrays + allDocuments + index.d.ts # (if generateTypes) ambient exports + types.d.ts # (if generateTypes) individual doc interfaces + / + _index.json # Array of docs for that type +``` + +### JSON Document Shape + +Each JSON entry inside `/_index.json` is the hydrated document: + +```ts +{ + typeName: 'Post', + // frontmatter fields... + // computed fields... + raw: string; // original markdown body + html: string; // rendered via marked +} +``` + +### Virtual Package Import + +Add a `paths` mapping (TypeScript) so you can import generated content: +::: code-group + +```jsonc [tsconfig.json] +{ + "compilerOptions": { + "paths": { + "dot-contentkit": [".contentkit/generated"], + }, + }, +} +``` + +```jsonc [jsconfig.json] +{ + "compilerOptions": { + "paths": { + "dot-contentkit": [".contentkit/generated"], + }, + }, +} +``` + +::: + +Then: + +::: code-group + +```ts [TypeScript] +import { allPosts } from "dot-contentkit"; +console.log(allPosts[0].title); +``` + +```js [JavaScript] +import { allPosts } from "dot-contentkit"; +console.log(allPosts[0].title); +// CommonJS: const { allPosts } = require('dot-contentkit'); +``` + +::: + +- `DocumentTypeNames` string literal union of names +- `DataExports` shape of the generated exports + +--- + +## Frontmatter Parsing + +Supported frontmatter formats: + +- YAML (default between `---` delimiters) +- JSON (object literal between `---` if it starts/ends with `{}`) +- TOML (between `+++` delimiters) + +Validation errors display a colored table; the build exits with code 1 if a required or typed field is invalid. + +--- + +## Error Codes + +Some known error codes surfaced via the logger: +| Code | ID | Description | +|------|----|-------------| +| E001 | CONFIG_NOT_FOUND | No config file located. | +| E002 | INVALID_FRONTMATTER_FORMAT | Unsupported or malformed frontmatter. | +| E003 | INVALID_FRONTMATTER_FORMAT_NO_DELIMITER | Missing frontmatter delimiters. | + +--- + +## Example End-to-End + +```bash +npx contentkit init +# edit contentkit.config.ts to add documentTypes +mkdir -p content/posts +printf "---\ntitle: Hello\ndate: 2025-01-01\n---\n\nBody." > content/posts/hello.md +npx contentkit build +``` + +```ts +import { allPosts } from "dot-contentkit"; +console.log(allPosts[0].title); +``` + +--- + +## Versioning Note + +The internal package version uses a random prerelease per build (e.g. `0.0.0-1A2B3C4D`). Treat `.contentkit` as transient build output—do not publish or commit unless you need deterministic deploy artifacts. + +--- + +## FAQ + +- Q: How do I add new fields? + A: Add them to the `fields` object of a `DocumentTypeDefinition`; re-run build. Missing required fields or wrong types fail the build. +- Q: Can I disable type generation? + A: Set `generateTypes: false` in the config. +- Q: How do I change CommonJS vs ESM? + A: Set `outputFormat: 'cjs' | 'esm'`. ESM uses JSON import assertions. + +--- + +If something is missing here, please open an issue or PR on GitHub. diff --git a/docs/en/guide/cli.md b/docs/en/guide/cli.md new file mode 100644 index 0000000..69688f7 --- /dev/null +++ b/docs/en/guide/cli.md @@ -0,0 +1,109 @@ +--- +outline: deep +--- + +# CLI + +Core commands for working with ContentKit. + +## init + +Scaffolds `contentkit.config.ts`. +::: code-group + +```bash [npx] +npx contentkit init +``` + +```bash [pnpm] +pnpm exec contentkit init +``` + +```bash [yarn] +yarn contentkit init +``` + +```bash [bunx] +bunx contentkit init +``` + +::: + +## validate + +Validates documents without emitting output. +::: code-group + +```bash [npx] +npx contentkit validate +``` + +```bash [pnpm] +pnpm exec contentkit validate +``` + +```bash [yarn] +yarn contentkit validate +``` + +```bash [bunx] +bunx contentkit validate +``` + +::: + +Exit code 1 on validation failure. + +## build + +Parses, validates and writes generated artifacts. +::: code-group + +```bash [npx] +npx contentkit build +``` + +```bash [pnpm] +pnpm exec contentkit build +``` + +```bash [yarn] +yarn contentkit build +``` + +```bash [bunx] +bunx contentkit build +``` + +::: + +## package.json scripts + +::: code-group + +```jsonc [package.json] +{ + "scripts": { + "content:build": "contentkit build", + "content:validate": "contentkit validate", + }, +} +``` + +```bash [pnpm] +pnpm run content:build +``` + +```bash [yarn] +yarn content:build +``` + +```bash [npm] +npm run content:build +``` + +```bash [bun] +bun content:build +``` + +::: diff --git a/docs/en/guide/configuration.md b/docs/en/guide/configuration.md new file mode 100644 index 0000000..23b661a --- /dev/null +++ b/docs/en/guide/configuration.md @@ -0,0 +1,107 @@ +--- +outline: deep +--- + +# Configuration + +Define your schema in `contentkit.config.ts` using `defineConfig`. + +## Minimal Example + +::: code-group + +```ts [TypeScript] +// contentkit.config.ts +import { defineConfig } from "contentkit"; + +export default defineConfig({ + contentDirPath: "content", + outputFormat: "esm", + documentTypes: [], +}); +``` + +```js [JavaScript] +// contentkit.config.js +import { defineConfig } from "contentkit"; + +export default defineConfig({ + contentDirPath: "content", + outputFormat: "esm", + documentTypes: [], +}); +``` + +::: + +## Document Type + +::: code-group + +```ts [TypeScript] +// inside contentkit.config.ts +{ + name: 'Post', + filePathPattern: 'posts/**/*.md', + fields: { + title: { type: 'string', required: true }, + date: { type: 'date', required: true }, + tags: { type: 'array', items: { type: 'string' } } + }, + computedFields: { + slug: { type: 'string', resolve: (doc) => doc.title.toLowerCase().replace(/\s+/g, '-') } + } +} +``` + +```js [JavaScript] +// inside contentkit.config.js +{ + name: 'Post', + filePathPattern: 'posts/**/*.md', + fields: { + title: { type: 'string', required: true }, + date: { type: 'date', required: true }, + tags: { type: 'array', items: { type: 'string' } } + }, + computedFields: { + slug: { type: 'string', resolve: (doc) => doc.title.toLowerCase().replace(/\s+/g, '-') } + } +} +``` + +::: + +## Field Definition + +Primitive types: `string | number | boolean | date` + +Options: + +- `required: true` marks mandatory fields +- `list: true` array of that primitive + +## Computed Fields + +Used for derived values like `slug`, `readingTime`, etc. +::: code-group + +```ts [TypeScript] +readingTime: { type: 'number', resolve: d => Math.ceil(d.raw.split(/\s+/).length / 200) } +``` + +```js [JavaScript] +readingTime: { type: 'number', resolve: (d) => Math.ceil(d.raw.split(/\s+/).length / 200) } +``` + +::: + +## Validation + +On `contentkit build` each document is validated; failures abort the build. + +## Tips + +- Keep content folder small & focused +- Prefer computed slugs over manual to avoid drift +- Normalize dates with `date` type diff --git a/docs/en/guide/index.md b/docs/en/guide/index.md new file mode 100644 index 0000000..cfe26a4 --- /dev/null +++ b/docs/en/guide/index.md @@ -0,0 +1,51 @@ +--- +outline: deep +--- + +# Guides Overview + +Welcome to the ContentKit guides. This section walks you through installing, configuring and integrating ContentKit in your TypeScript / Next.js projects, then understanding the emitted artifacts. + +> ContentKit is early and under active development. APIs may change; pin versions and review release notes when upgrading. + +## Quick Start (TL;DR) + +1. Install: `pnpm add -D contentkit` +2. Init config: `npx contentkit init` +3. Add markdown in your `content/` directory +4. Build: `npx contentkit build` +5. Import data: `import { allPosts } from 'dot-contentkit/generated'` + +Jump into the detailed guides below for deeper explanations and options. + +## Core Guides + +- [Installation](./installation.md) – Add the package & scaffold a config. +- [Configuration](./configuration.md) – Define document types, fields & computed fields. +- [CLI](./cli.md) – Commands (`init`, `validate`, `build`) and scripting tips. +- [Build Output](./output.md) – Folder layout, imports & types. + +## Concepts At a Glance + +| Concept | What It Is | Where To Read | +| ----------------- | ----------------------------------------------------- | ---------------------- | +| Document Type | Schema for a group of markdown files | Configuration | +| Frontmatter | Source metadata (YAML / TOML / JSON) | Configuration / Output | +| Computed Field | Derived value (slug, reading time, etc.) | Configuration | +| Generated Package | `dot-contentkit` virtual import exposing data & types | Build Output | + +## Roadmap (High Level) + +Planned / in exploration: + +- Incremental (per‑file) builds +- Richer MD/MDX processing pipeline (plugins / remark / rehype opt‑in) +- Watch mode outside Next.js +- Optional image/asset metadata extraction +- Improved DX around custom computed field type inference + +## Feedback / Issues + +If something is unclear or broken, open an issue or PR. Early user feedback heavily shapes priorities. + +Happy building! diff --git a/docs/en/guide/installation.md b/docs/en/guide/installation.md new file mode 100644 index 0000000..ac8e65d --- /dev/null +++ b/docs/en/guide/installation.md @@ -0,0 +1,122 @@ +--- +outline: deep +--- + +# Installation + +Install with your preferred package manager: +::: code-group + +```sh [npm] +$ npm install -D contentkit +``` + +```sh [pnpm] +$ pnpm add -D contentkit +``` + +```sh [yarn] +$ yarn add -D contentkit +``` + +```sh [bun] +$ bun add -D contentkit +``` + +::: + +Initialize a config: +::: code-group + +```bash [npx] +npx contentkit init +``` + +```bash [pnpm] +pnpm exec contentkit init +``` + +```bash [yarn] +yarn contentkit init +``` + +```bash [bunx] +bunx contentkit init +``` + +::: + +This creates `contentkit.config.ts` (or `.js`) based on environment. + +Add a sample document: + +::: code-group + +```bash [Unix] +mkdir -p content +printf "---\ntitle: Hello World\ndate: 2025-01-01\ntags: [intro]\n---\n\nMy first post." > content/hello-world.md +``` + +```powershell [Windows Powershell] +New-Item -ItemType Directory -Force -Path content | Out-Null +@" +--- +title: Hello World +date: 2025-01-01 +tags: [intro] +--- + +My first post. +"@ | Set-Content content/hello-world.md +``` + +::: + +Build: +::: code-group + +```bash [npx] +npx contentkit build +``` + +```bash [pnpm] +pnpm exec contentkit build +``` + +```bash [yarn] +yarn contentkit build +``` + +```bash [bunx] +bunx contentkit build +``` + +::: + +Generated artifacts live in `.contentkit/generated` and a virtual package `dot-contentkit` is written. +Now we will add the `dot-contentkit` package to our project. + +First, open your `tsconfig.json` (or `jsconfig.json`) file and add the following path mapping: +::: code-group + +```jsonc [tsconfig.json] +{ + "compilerOptions": { + "paths": { + "dot-contentkit": [".contentkit/generated"], + }, + }, +} +``` + +```jsonc [jsconfig.json] +{ + "compilerOptions": { + "paths": { + "dot-contentkit": [".contentkit/generated"], + }, + }, +} +``` + +::: diff --git a/docs/en/guide/output.md b/docs/en/guide/output.md new file mode 100644 index 0000000..d6a0af2 --- /dev/null +++ b/docs/en/guide/output.md @@ -0,0 +1,59 @@ +--- +outline: deep +--- + +# Build Output + +After `npx contentkit build` a `.contentkit/` directory is created. + +``` +.contentkit/ + package.json # name "dot-contentkit" for local imports + generated/ + index.js + index.d.ts + types.d.ts + Post/_index.json # one per document type (array of docs) +``` + +## Imports + +::: code-group + +```ts [TypeScript] +import { allPosts } from "dot-contentkit/generated"; +``` + +```js [JavaScript] +import { allPosts } from "dot-contentkit/generated"; +// or CommonJS: const { allPosts } = require('dot-contentkit/generated'); +``` + +::: + +Each document has frontmatter fields + any computed fields. + +## Types + +`types.d.ts` exposes interfaces and unions. + +::: code-group + +```ts [TypeScript] +import type { Post } from "dot-contentkit/generated"; +``` + +```js [JavaScript] +// Types not available at runtime; for editors supporting JSDoc: +/** @typedef {import('dot-contentkit/generated').Post} Post */ +``` + +::: + +## Regeneration + +Re-run the build whenever content or config changes. The directory is fully rewritten. + +## Source Control + +Check in `.contentkit/` for reproducible deploys or generate during CI – both models work. diff --git a/docs/en/index.md b/docs/en/index.md new file mode 100644 index 0000000..9c4b064 --- /dev/null +++ b/docs/en/index.md @@ -0,0 +1,37 @@ +--- +layout: home +hero: + name: ContentKit + text: Type‑safe content toolkit + tagline: Parse frontmatter & Markdown, validate fields, generate types & data queries – all in one lightweight build step. + image: /logo.png + actions: + - theme: brand + text: Get Started + link: /guide/ + - theme: alt + text: API Reference + link: /api/reference + - theme: alt + text: GitHub + link: https://github.com/infinitejs/contentkit +features: + - icon: ⚙️ + title: Zero runtime CMS + details: Source-controlled Markdown + frontmatter in your repo, compiled into typed JSON & TS definitions. + - icon: 🧪 + title: Type generation + details: Auto‑generated d.ts & discriminated unions for every document type. + - icon: 🧩 + title: Framework friendly + details: Works with Next.js SSG/ISR or any build pipeline – just import generated data. + - icon: 🛡️ + title: Strict field validation + details: Required flags, list item typing, and date coercion prevent silent content drift. + - icon: ⚡ + title: Fast builds + details: Minimal IO + streaming Markdown parsing keeps build times tiny. + - icon: 📦 + title: Local virtual package + details: Imports via 'dot-contentkit/generated' for clean module boundaries. +--- diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..99cedae --- /dev/null +++ b/docs/package.json @@ -0,0 +1,30 @@ +{ + "name": "resonix.dev", + "version": "1.0.0", + "description": "Documentation site for resonix using vitepress", + "type": "module", + "scripts": { + "dev": "vitepress dev", + "build": "vitepress build", + "preview": "vitepress preview", + "format": "prettier --write .", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Resonix OSS Team", + "license": "BSD-3-Clause", + "repository": { + "type": "git", + "url": "git+https://github.com/resonix-dev/resonix.dev.git" + }, + "homepage": "https://resonix.dev", + "packageManager": "pnpm@10.14.0", + "devDependencies": { + "@types/node": "^24.3.0", + "prettier": "^3.6.2", + "vitepress": "2.0.0-alpha.11" + }, + "dependencies": { + "vitepress-plugin-group-icons": "^1.6.3", + "vue": "^3.5.0" + } +} diff --git a/docs/public/logo.png b/docs/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a67032d399a9a12047f751dd3bbc943b960624 GIT binary patch literal 68831 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 literal 0 HcmV?d00001 diff --git a/packages/cli/LICENSE b/packages/cli/LICENSE index 24e70bb..95d4519 100644 --- a/packages/cli/LICENSE +++ b/packages/cli/LICENSE @@ -1,28 +1,28 @@ -BSD 3-Clause License - -Copyright (c) 2025, Jonas Franke - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +BSD 3-Clause License + +Copyright (c) 2025, Jonas Franke + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/cli/README.md b/packages/cli/README.md index a4e9968..28cefc2 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -1,30 +1,30 @@ -# ContentKit Logo @ckjs/cli - -Command-line interface for ContentKit. - -> [!CAUTION] -> **This project is under construction** and is not fully tested and expected to be entirely working yet. Please use with caution however we do not recommend using this in production yet. - -## Installation - -```bash -# Using npm -npm install contentkit - -# Using yarn -yarn add contentkit - -# Using pnpm -pnpm add contentkit - -# Using bun -bun add contentkit -``` - -## Getting Started - -Visit the [ContentKit documentation](https://contentkit.dev/docs/getting-started) for more information on how to get started with ContentKit. - -## License - +# ContentKit Logo @ckjs/cli + +Command-line interface for ContentKit. + +> [!CAUTION] +> **This project is under construction** and is not fully tested and expected to be entirely working yet. Please use with caution however we do not recommend using this in production yet. + +## Installation + +```bash +# Using npm +npm install contentkit + +# Using yarn +yarn add contentkit + +# Using pnpm +pnpm add contentkit + +# Using bun +bun add contentkit +``` + +## Getting Started + +Visit the [ContentKit documentation](https://contentkit.dev/docs/getting-started) for more information on how to get started with ContentKit. + +## License + [BSD-3-Clause](./LICENSE) \ No newline at end of file diff --git a/packages/contentkit/.gitignore b/packages/contentkit/.gitignore index c8572d9..88e2104 100644 --- a/packages/contentkit/.gitignore +++ b/packages/contentkit/.gitignore @@ -1 +1 @@ -distribution +distribution diff --git a/packages/contentkit/LICENSE b/packages/contentkit/LICENSE index 7f9efa5..7f773fe 100644 --- a/packages/contentkit/LICENSE +++ b/packages/contentkit/LICENSE @@ -1,28 +1,28 @@ -BSD 3-Clause License - -Copyright (c) 2025, Jonas Franke - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +BSD 3-Clause License + +Copyright (c) 2025, Jonas Franke + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/contentkit/README.md b/packages/contentkit/README.md index eeaeeb0..6f75efd 100644 --- a/packages/contentkit/README.md +++ b/packages/contentkit/README.md @@ -1,53 +1,53 @@ -# ContentKit Logo ContentKit - -ContentKit is a powerful SDK for converting Markdown (or MDX) content into structured JSON data. It provides a complete solution for managing content in TypeScript projects, including type-safe configurations, a build system, and a CLI. - -> [!CAUTION] -> **This project is under construction** and is not fully tested and expected to be entirely working yet. Please use with caution however we do not recommend using this in production yet. - -## Features - -- **Type-safe configurations**: Define your content structure with TypeScript types. -- **Markdown processing**: Convert Markdown content into JSON with metadata and HTML. -- **Multi-format frontmatter support**: Parse YAML, JSON, and TOML frontmatter seamlessly. -- **Auto-generated types**: Automatically generate TypeScript types for your content. -- **CLI**: Build your content with a single command. -- **Next.js integration**: Automatically rebuild content in Next.js projects. -- **Extensible**: Modular design with utilities, core functionality, and CLI. - -## Packages - -ContentKit is a monorepo with the following packages: - -- [`@ckjs/utils`](./packages/utils): Utility functions for logging and configuration loading. -- [`@ckjs/types`](./packages/types): Type definitions for ContentKit. -- [`@ckjs/core`](./packages/core): Core library for building and processing content. -- [`@ckjs/cli`](./packages/cli): Command-line interface for ContentKit. -- [`@ckjs/matter`](./packages/matter): Frontmatter parser for YAML, JSON, and TOML. -- [`@ckjs/next`](./packages/next): Next.js client for ContentKit. - -## Installation - -Install the `contentkit` package: - -```bash -# Using npm -npm install contentkit - -# Using yarn -yarn add contentkit - -# Using pnpm -pnpm add contentkit - -# Using bun -bun add contentkit -``` - -## Getting Started - -Visit the [ContentKit documentation](https://contentkit.dev/docs/getting-started) for more information on how to get started with ContentKit. - -## License - +# ContentKit Logo ContentKit + +ContentKit is a powerful SDK for converting Markdown (or MDX) content into structured JSON data. It provides a complete solution for managing content in TypeScript projects, including type-safe configurations, a build system, and a CLI. + +> [!CAUTION] +> **This project is under construction** and is not fully tested and expected to be entirely working yet. Please use with caution however we do not recommend using this in production yet. + +## Features + +- **Type-safe configurations**: Define your content structure with TypeScript types. +- **Markdown processing**: Convert Markdown content into JSON with metadata and HTML. +- **Multi-format frontmatter support**: Parse YAML, JSON, and TOML frontmatter seamlessly. +- **Auto-generated types**: Automatically generate TypeScript types for your content. +- **CLI**: Build your content with a single command. +- **Next.js integration**: Automatically rebuild content in Next.js projects. +- **Extensible**: Modular design with utilities, core functionality, and CLI. + +## Packages + +ContentKit is a monorepo with the following packages: + +- [`@ckjs/utils`](./packages/utils): Utility functions for logging and configuration loading. +- [`@ckjs/types`](./packages/types): Type definitions for ContentKit. +- [`@ckjs/core`](./packages/core): Core library for building and processing content. +- [`@ckjs/cli`](./packages/cli): Command-line interface for ContentKit. +- [`@ckjs/matter`](./packages/matter): Frontmatter parser for YAML, JSON, and TOML. +- [`@ckjs/next`](./packages/next): Next.js client for ContentKit. + +## Installation + +Install the `contentkit` package: + +```bash +# Using npm +npm install contentkit + +# Using yarn +yarn add contentkit + +# Using pnpm +pnpm add contentkit + +# Using bun +bun add contentkit +``` + +## Getting Started + +Visit the [ContentKit documentation](https://contentkit.dev/docs/getting-started) for more information on how to get started with ContentKit. + +## License + BSD-3-Clause \ No newline at end of file diff --git a/packages/core/LICENSE b/packages/core/LICENSE index 24e70bb..95d4519 100644 --- a/packages/core/LICENSE +++ b/packages/core/LICENSE @@ -1,28 +1,28 @@ -BSD 3-Clause License - -Copyright (c) 2025, Jonas Franke - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +BSD 3-Clause License + +Copyright (c) 2025, Jonas Franke + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/core/README.md b/packages/core/README.md index e86bfe2..a0c4e07 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -1,30 +1,30 @@ -# ContentKit Logo @ckjs/core - -Core library for ContentKit. - -> [!CAUTION] -> **This project is under construction** and is not fully tested and expected to be entirely working yet. Please use with caution however we do not recommend using this in production yet. - -## Installation - -```bash -# Using npm -npm install contentkit - -# Using yarn -yarn add contentkit - -# Using pnpm -pnpm add contentkit - -# Using bun -bun add contentkit -``` - -## Getting Started - -Visit the [ContentKit documentation](https://contentkit.dev/docs/getting-started) for more information on how to get started with ContentKit. - -## License - +# ContentKit Logo @ckjs/core + +Core library for ContentKit. + +> [!CAUTION] +> **This project is under construction** and is not fully tested and expected to be entirely working yet. Please use with caution however we do not recommend using this in production yet. + +## Installation + +```bash +# Using npm +npm install contentkit + +# Using yarn +yarn add contentkit + +# Using pnpm +pnpm add contentkit + +# Using bun +bun add contentkit +``` + +## Getting Started + +Visit the [ContentKit documentation](https://contentkit.dev/docs/getting-started) for more information on how to get started with ContentKit. + +## License + [BSD-3-Clause](./LICENSE) \ No newline at end of file diff --git a/packages/matter/LICENSE b/packages/matter/LICENSE index 24e70bb..95d4519 100644 --- a/packages/matter/LICENSE +++ b/packages/matter/LICENSE @@ -1,28 +1,28 @@ -BSD 3-Clause License - -Copyright (c) 2025, Jonas Franke - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +BSD 3-Clause License + +Copyright (c) 2025, Jonas Franke + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/matter/README.md b/packages/matter/README.md index 20e088c..25a76a3 100644 --- a/packages/matter/README.md +++ b/packages/matter/README.md @@ -1,30 +1,30 @@ -# ContentKit Logo @ckjs/matter - -Frontmatter parser for ContentKit. - -> [!CAUTION] -> **This project is under construction** and is not fully tested and expected to be entirely working yet. Please use with caution however we do not recommend using this in production yet. - -## Installation - -```bash -# Using npm -npm install contentkit - -# Using yarn -yarn add contentkit - -# Using pnpm -pnpm add contentkit - -# Using bun -bun add contentkit -``` - -## Getting Started - -Visit the [ContentKit documentation](https://contentkit.dev/docs/getting-started) for more information on how to get started with ContentKit. - -## License - +# ContentKit Logo @ckjs/matter + +Frontmatter parser for ContentKit. + +> [!CAUTION] +> **This project is under construction** and is not fully tested and expected to be entirely working yet. Please use with caution however we do not recommend using this in production yet. + +## Installation + +```bash +# Using npm +npm install contentkit + +# Using yarn +yarn add contentkit + +# Using pnpm +pnpm add contentkit + +# Using bun +bun add contentkit +``` + +## Getting Started + +Visit the [ContentKit documentation](https://contentkit.dev/docs/getting-started) for more information on how to get started with ContentKit. + +## License + [BSD-3-Clause](./LICENSE) \ No newline at end of file diff --git a/packages/next/.gitignore b/packages/next/.gitignore index c8572d9..88e2104 100644 --- a/packages/next/.gitignore +++ b/packages/next/.gitignore @@ -1 +1 @@ -distribution +distribution diff --git a/packages/next/LICENSE b/packages/next/LICENSE index 24e70bb..95d4519 100644 --- a/packages/next/LICENSE +++ b/packages/next/LICENSE @@ -1,28 +1,28 @@ -BSD 3-Clause License - -Copyright (c) 2025, Jonas Franke - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +BSD 3-Clause License + +Copyright (c) 2025, Jonas Franke + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/next/README.md b/packages/next/README.md index 55ad0ab..774d84e 100644 --- a/packages/next/README.md +++ b/packages/next/README.md @@ -1,34 +1,34 @@ -# @ckjs/next - -Next.js client for ContentKit. - -## Installation - -```bash -# Using npm -npm install contentkit - -# Using yarn -yarn add contentkit - -# Using pnpm -pnpm add contentkit - -# Using bun -bun add contentkit -``` - -## Usage - -Wrap your Next.js configuration with `withContentkit`: - -```javascript -// next.config.js -const { withContentkit } = require("contentkit/next"); - -module.exports = withContentkit({ - reactStrictMode: true, -}); -``` - -This will automatically rebuild ContentKit content whenever content files are updated. +# @ckjs/next + +Next.js client for ContentKit. + +## Installation + +```bash +# Using npm +npm install contentkit + +# Using yarn +yarn add contentkit + +# Using pnpm +pnpm add contentkit + +# Using bun +bun add contentkit +``` + +## Usage + +Wrap your Next.js configuration with `withContentkit`: + +```javascript +// next.config.js +const { withContentkit } = require("contentkit/next"); + +module.exports = withContentkit({ + reactStrictMode: true, +}); +``` + +This will automatically rebuild ContentKit content whenever content files are updated. diff --git a/packages/types/LICENSE b/packages/types/LICENSE index 24e70bb..95d4519 100644 --- a/packages/types/LICENSE +++ b/packages/types/LICENSE @@ -1,28 +1,28 @@ -BSD 3-Clause License - -Copyright (c) 2025, Jonas Franke - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +BSD 3-Clause License + +Copyright (c) 2025, Jonas Franke + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/types/README.md b/packages/types/README.md index 55e7060..fa3d274 100644 --- a/packages/types/README.md +++ b/packages/types/README.md @@ -1,30 +1,30 @@ -# ContentKit Logo @ckjs/types - -Type definitions for ContentKit. - -> [!CAUTION] -> **This project is under construction** and is not fully tested and expected to be entirely working yet. Please use with caution however we do not recommend using this in production yet. - -## Installation - -```bash -# Using npm -npm install contentkit - -# Using yarn -yarn add contentkit - -# Using pnpm -pnpm add contentkit - -# Using bun -bun add contentkit -``` - -## Getting Started - -Visit the [ContentKit documentation](https://contentkit.dev/docs/getting-started) for more information on how to get started with ContentKit. - -## License - -[BSD-3-Clause](./LICENSE) +# ContentKit Logo @ckjs/types + +Type definitions for ContentKit. + +> [!CAUTION] +> **This project is under construction** and is not fully tested and expected to be entirely working yet. Please use with caution however we do not recommend using this in production yet. + +## Installation + +```bash +# Using npm +npm install contentkit + +# Using yarn +yarn add contentkit + +# Using pnpm +pnpm add contentkit + +# Using bun +bun add contentkit +``` + +## Getting Started + +Visit the [ContentKit documentation](https://contentkit.dev/docs/getting-started) for more information on how to get started with ContentKit. + +## License + +[BSD-3-Clause](./LICENSE) diff --git a/packages/utils/LICENSE b/packages/utils/LICENSE index 24e70bb..95d4519 100644 --- a/packages/utils/LICENSE +++ b/packages/utils/LICENSE @@ -1,28 +1,28 @@ -BSD 3-Clause License - -Copyright (c) 2025, Jonas Franke - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +BSD 3-Clause License + +Copyright (c) 2025, Jonas Franke + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/utils/README.md b/packages/utils/README.md index 6f8f5f0..a8e7690 100644 --- a/packages/utils/README.md +++ b/packages/utils/README.md @@ -1,30 +1,30 @@ -# ContentKit Logo @ckjs/utils - -Utility functions for the ContentKit ecosystem. - -> [!CAUTION] -> **This project is under construction** and is not fully tested and expected to be entirely working yet. Please use with caution however we do not recommend using this in production yet. - -## Installation - -```bash -# Using npm -npm install contentkit - -# Using yarn -yarn add contentkit - -# Using pnpm -pnpm add contentkit - -# Using bun -bun add contentkit -``` - -## Getting Started - -Visit the [ContentKit documentation](https://contentkit.dev/docs/getting-started) for more information on how to get started with ContentKit. - -## License - -[BSD-3-Clause](./LICENSE) +# ContentKit Logo @ckjs/utils + +Utility functions for the ContentKit ecosystem. + +> [!CAUTION] +> **This project is under construction** and is not fully tested and expected to be entirely working yet. Please use with caution however we do not recommend using this in production yet. + +## Installation + +```bash +# Using npm +npm install contentkit + +# Using yarn +yarn add contentkit + +# Using pnpm +pnpm add contentkit + +# Using bun +bun add contentkit +``` + +## Getting Started + +Visit the [ContentKit documentation](https://contentkit.dev/docs/getting-started) for more information on how to get started with ContentKit. + +## License + +[BSD-3-Clause](./LICENSE) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 071b4b0..036e703 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,11 +18,30 @@ importers: specifier: ^4.20.4 version: 4.20.4 + docs: + dependencies: + vitepress-plugin-group-icons: + specifier: ^1.6.3 + version: 1.6.3(markdown-it@14.1.0)(vite@7.1.3(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.20.4)(yaml@2.8.1)) + vue: + specifier: ^3.5.0 + version: 3.5.18(typescript@5.8.3) + devDependencies: + '@types/node': + specifier: ^24.3.0 + version: 24.3.0 + prettier: + specifier: ^3.6.2 + version: 3.6.2 + vitepress: + specifier: 2.0.0-alpha.11 + version: 2.0.0-alpha.11(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.29.2)(postcss@8.5.6)(tsx@4.20.4)(typescript@5.8.3)(yaml@2.8.1) + examples/javascript: dependencies: contentkit: specifier: ^0.1.1 - version: 0.1.1(@types/node@22.15.32)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 0.1.1(@types/node@24.3.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) examples/next: dependencies: @@ -208,6 +227,29 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + + '@antfu/utils@9.2.0': + resolution: {integrity: sha512-Oq1d9BGZakE/FyoEtcNeSwM7MpDO2vUBi11RWBZXf75zPsbUVWmUs03EqkRFrcgbXyKTas0BdZWC1wcuSoqSAw==} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.3': + resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + engines: {node: '>=6.9.0'} + '@ckjs/cli@0.1.1': resolution: {integrity: sha512-XuiLmsz70HGwVwvcOKiScmjNtS99ShSJI3CxRySQtrYD3shHPXnSPAdj4U+BUsSIFZBAjh5j/eZN+Pk59Oph7g==} hasBin: true @@ -231,6 +273,12 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@docsearch/css@4.0.0-beta.7': + resolution: {integrity: sha512-hBIwf14yLasrUcDNS7jrneM1ibFD/JFJVDjdxd1h/LUHx7eyLrS726pKHVr3cTdToNXP/7jrTbnC1MAuDHPoow==} + + '@docsearch/js@4.0.0-beta.7': + resolution: {integrity: sha512-0RJALbDpLMuFy3H/26rjms/qwi5KjsGMN8Lu4k/bs6kBfOWHUN6Dzg/ybj8qB2OLdT2UegsavRIDZKW3QrzQ4Q==} + '@emnapi/runtime@1.4.3': resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} @@ -393,6 +441,21 @@ packages: '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + '@iconify-json/logos@1.2.9': + resolution: {integrity: sha512-G6VCdFnwZcrT6Eveq3m43oJfLw/CX8plwFcE+2jgv3fiGB64pTmnU7Yd1MNZ/eA+/Re2iEDhuCfSNOWTHwwK8w==} + + '@iconify-json/simple-icons@1.2.48': + resolution: {integrity: sha512-EACOtZMoPJtERiAbX1De0asrrCtlwI27+03c9OJlYWsly9w1O5vcD8rTzh+kDPjo+K8FOVnq2Qy+h/CzljSKDA==} + + '@iconify-json/vscode-icons@1.2.29': + resolution: {integrity: sha512-ByqO3YPYs0n7hakQ/ZUXltJQnYibeOv41H1AdciOs7Pmba5/OsKKK1/oOjcBmvXrYuENO+IvIzORYkl6sFXgqA==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.0.1': + resolution: {integrity: sha512-A78CUEnFGX8I/WlILxJCuIJXloL0j/OJ9PSchPAfCargEIKmUBWvvEMmKWB5oONwiUqlNt+5eRufdkLxeHIWYw==} + '@img/sharp-darwin-arm64@0.34.1': resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -627,6 +690,133 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@rolldown/pluginutils@1.0.0-beta.29': + resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==} + + '@rollup/rollup-android-arm-eabi@4.46.4': + resolution: {integrity: sha512-B2wfzCJ+ps/OBzRjeds7DlJumCU3rXMxJJS1vzURyj7+KBHGONm7c9q1TfdBl4vCuNMkDvARn3PBl2wZzuR5mw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.46.4': + resolution: {integrity: sha512-FGJYXvYdn8Bs6lAlBZYT5n+4x0ciEp4cmttsvKAZc/c8/JiPaQK8u0c/86vKX8lA7OY/+37lIQSe0YoAImvBAA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.46.4': + resolution: {integrity: sha512-/9qwE/BM7ATw/W/OFEMTm3dmywbJyLQb4f4v5nmOjgYxPIGpw7HaxRi6LnD4Pjn/q7k55FGeHe1/OD02w63apA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.46.4': + resolution: {integrity: sha512-QkWfNbeRuzFnv2d0aPlrzcA3Ebq2mE8kX/5Pl7VdRShbPBjSnom7dbT8E3Jmhxo2RL784hyqGvR5KHavCJQciw==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.46.4': + resolution: {integrity: sha512-+ToyOMYnSfV8D+ckxO6NthPln/PDNp1P6INcNypfZ7muLmEvPKXqduUiD8DlJpMMT8LxHcE5W0dK9kXfJke9Zw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.46.4': + resolution: {integrity: sha512-cGT6ey/W+sje6zywbLiqmkfkO210FgRz7tepWAzzEVgQU8Hn91JJmQWNqs55IuglG8sJdzk7XfNgmGRtcYlo1w==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.46.4': + resolution: {integrity: sha512-9fhTJyOb275w5RofPSl8lpr4jFowd+H4oQKJ9XTYzD1JWgxdZKE8bA6d4npuiMemkecQOcigX01FNZNCYnQBdA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.46.4': + resolution: {integrity: sha512-+6kCIM5Zjvz2HwPl/udgVs07tPMIp1VU2Y0c72ezjOvSvEfAIWsUgpcSDvnC7g9NrjYR6X9bZT92mZZ90TfvXw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.46.4': + resolution: {integrity: sha512-SWuXdnsayCZL4lXoo6jn0yyAj7TTjWE4NwDVt9s7cmu6poMhtiras5c8h6Ih6Y0Zk6Z+8t/mLumvpdSPTWub2Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.46.4': + resolution: {integrity: sha512-vDknMDqtMhrrroa5kyX6tuC0aRZZlQ+ipDfbXd2YGz5HeV2t8HOl/FDAd2ynhs7Ki5VooWiiZcCtxiZ4IjqZwQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.46.4': + resolution: {integrity: sha512-mCBkjRZWhvjtl/x+Bd4fQkWZT8canStKDxGrHlBiTnZmJnWygGcvBylzLVCZXka4dco5ymkWhZlLwKCGFF4ivw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.46.4': + resolution: {integrity: sha512-YMdz2phOTFF+Z66dQfGf0gmeDSi5DJzY5bpZyeg9CPBkV9QDzJ1yFRlmi/j7WWRf3hYIWrOaJj5jsfwgc8GTHQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.46.4': + resolution: {integrity: sha512-r0WKLSfFAK8ucG024v2yiLSJMedoWvk8yWqfNICX28NHDGeu3F/wBf8KG6mclghx4FsLePxJr/9N8rIj1PtCnw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.46.4': + resolution: {integrity: sha512-IaizpPP2UQU3MNyPH1u0Xxbm73D+4OupL0bjo4Hm0496e2wg3zuvoAIhubkD1NGy9fXILEExPQy87mweujEatA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.46.4': + resolution: {integrity: sha512-aCM29orANR0a8wk896p6UEgIfupReupnmISz6SUwMIwTGaTI8MuKdE0OD2LvEg8ondDyZdMvnaN3bW4nFbATPA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.46.4': + resolution: {integrity: sha512-0Xj1vZE3cbr/wda8d/m+UeuSL+TDpuozzdD4QaSzu/xSOMK0Su5RhIkF7KVHFQsobemUNHPLEcYllL7ZTCP/Cg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.46.4': + resolution: {integrity: sha512-kM/orjpolfA5yxsx84kI6bnK47AAZuWxglGKcNmokw2yy9i5eHY5UAjcX45jemTJnfHAWo3/hOoRqEeeTdL5hw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.46.4': + resolution: {integrity: sha512-cNLH4psMEsWKILW0isbpQA2OvjXLbKvnkcJFmqAptPQbtLrobiapBJVj6RoIvg6UXVp5w0wnIfd/Q56cNpF+Ew==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.46.4': + resolution: {integrity: sha512-OiEa5lRhiANpv4SfwYVgQ3opYWi/QmPDC5ve21m8G9pf6ZO+aX1g2EEF1/IFaM1xPSP7mK0msTRXlPs6mIagkg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.46.4': + resolution: {integrity: sha512-IKL9mewGZ5UuuX4NQlwOmxPyqielvkAPUS2s1cl6yWjjQvyN3h5JTdVFGD5Jr5xMjRC8setOfGQDVgX8V+dkjg==} + cpu: [x64] + os: [win32] + + '@shikijs/core@3.11.0': + resolution: {integrity: sha512-oJwU+DxGqp6lUZpvtQgVOXNZcVsirN76tihOLBmwILkKuRuwHteApP8oTXmL4tF5vS5FbOY0+8seXmiCoslk4g==} + + '@shikijs/engine-javascript@3.11.0': + resolution: {integrity: sha512-6/ov6pxrSvew13k9ztIOnSBOytXeKs5kfIR7vbhdtVRg+KPzvp2HctYGeWkqv7V6YIoLicnig/QF3iajqyElZA==} + + '@shikijs/engine-oniguruma@3.11.0': + resolution: {integrity: sha512-4DwIjIgETK04VneKbfOE4WNm4Q7WC1wo95wv82PoHKdqX4/9qLRUwrfKlmhf0gAuvT6GHy0uc7t9cailk6Tbhw==} + + '@shikijs/langs@3.11.0': + resolution: {integrity: sha512-Njg/nFL4HDcf/ObxcK2VeyidIq61EeLmocrwTHGGpOQx0BzrPWM1j55XtKQ1LvvDWH15cjQy7rg96aJ1/l63uw==} + + '@shikijs/themes@3.11.0': + resolution: {integrity: sha512-BhhWRzCTEk2CtWt4S4bgsOqPJRkapvxdsifAwqP+6mk5uxboAQchc0etiJ0iIasxnMsb764qGD24DK9albcU9Q==} + + '@shikijs/transformers@3.11.0': + resolution: {integrity: sha512-fhSpVoq0FoCtKbBpzE3mXcIbr0b7ozFDSSWiVjWrQy+wrOfaFfwxgJqh8kY3Pbv/i+4pcuMIVismLD2MfO62eQ==} + + '@shikijs/types@3.11.0': + resolution: {integrity: sha512-RB7IMo2E7NZHyfkqAuaf4CofyY8bPzjWPjJRzn6SEak3b46fIQyG6Vx5fG/obqkfppQ+g8vEsiD7Uc6lqQt32Q==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} @@ -742,13 +932,31 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + '@types/lodash@4.17.20': resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + '@types/marked@6.0.0': resolution: {integrity: sha512-jmjpa4BwUsmhxcfsgUit/7A9KbrC48Q0q8KvnY107ogcjGgTFDlIL3RpihNpx2Mu1hM4mdFQjoVc4O6JoGKHsA==} deprecated: This is a stub types definition. marked provides its own type definitions, so you do not need this installed. + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/node@20.17.30': resolution: {integrity: sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==} @@ -758,6 +966,9 @@ packages: '@types/node@22.15.32': resolution: {integrity: sha512-3jigKqgSjsH6gYZv2nEsqdXfZqIFGAV36XYYjf9KGZ3PSG+IhLecqPnI310RvjutyMwifE2hhhNEklOUrvx/wA==} + '@types/node@24.3.0': + resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} + '@types/react-dom@19.1.2': resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==} peerDependencies: @@ -766,6 +977,115 @@ packages: '@types/react@19.1.2': resolution: {integrity: sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@vitejs/plugin-vue@6.0.1': + resolution: {integrity: sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + vue: ^3.2.25 + + '@vue/compiler-core@3.5.18': + resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} + + '@vue/compiler-dom@3.5.18': + resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==} + + '@vue/compiler-sfc@3.5.18': + resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==} + + '@vue/compiler-ssr@3.5.18': + resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==} + + '@vue/devtools-api@8.0.0': + resolution: {integrity: sha512-I2jF/knesMU36zTw1hnExjoixDZvDoantiWKVrHpLd2J160zqqe8vp3vrGfjWdfuHmPJwSXe/YNG3rYOYiwy1Q==} + + '@vue/devtools-kit@8.0.0': + resolution: {integrity: sha512-b11OeQODkE0bctdT0RhL684pEV2DPXJ80bjpywVCbFn1PxuL3bmMPDoJKjbMnnoWbrnUYXYzFfmMWBZAMhORkQ==} + + '@vue/devtools-shared@8.0.0': + resolution: {integrity: sha512-jrKnbjshQCiOAJanoeJjTU7WaCg0Dz2BUal6SaR6VM/P3hiFdX5Q6Pxl73ZMnrhCxNK9nAg5hvvRGqs+6dtU1g==} + + '@vue/reactivity@3.5.18': + resolution: {integrity: sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==} + + '@vue/runtime-core@3.5.18': + resolution: {integrity: sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==} + + '@vue/runtime-dom@3.5.18': + resolution: {integrity: sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==} + + '@vue/server-renderer@3.5.18': + resolution: {integrity: sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==} + peerDependencies: + vue: 3.5.18 + + '@vue/shared@3.5.18': + resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} + + '@vueuse/core@13.7.0': + resolution: {integrity: sha512-myagn09+c6BmS6yHc1gTwwsdZilAovHslMjyykmZH3JNyzI5HoWhv114IIdytXiPipdHJ2gDUx0PB93jRduJYg==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/integrations@13.7.0': + resolution: {integrity: sha512-Na5p0ONLepNV/xCBi8vBMuzCOZh9CFT/OHnrUlABWXgWTWSHM3wrVaLS1xvAijPLU5B1ysyJDDW/hKak80oLGA==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 || ^8 + vue: ^3.5.0 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + '@vueuse/metadata@13.7.0': + resolution: {integrity: sha512-8okFhS/1ite8EwUdZZfvTYowNTfXmVCOrBFlA31O0HD8HKXhY+WtTRyF0LwbpJfoFPc+s9anNJIXMVrvP7UTZg==} + + '@vueuse/shared@13.7.0': + resolution: {integrity: sha512-Wi2LpJi4UA9kM0OZ0FCZslACp92HlVNw1KPaDY6RAzvQ+J1s7seOtcOpmkfbD5aBSmMn9NvOakc8ZxMxmDXTIg==} + peerDependencies: + vue: ^3.5.0 + acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} @@ -782,10 +1102,16 @@ packages: arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + birpc@2.5.0: + resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -797,6 +1123,15 @@ packages: caniuse-lite@1.0.30001714: resolution: {integrity: sha512-mtgapdwDLSSBnCI3JokHM7oEQBLxiJKVRtg10AxM1AyeiKcM96f0Mkbqeq+1AbiCtvMcHRulAAEMu693JrSWqg==} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -818,6 +1153,9 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} @@ -826,10 +1164,20 @@ packages: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + contentkit@0.1.1: resolution: {integrity: sha512-1lh0DMExb4VmEf9Ck5jJHtckshoWaXGaEB6SD8g/uQJhb5IoFS2q8WcKqzsGPNeoLvRhmxs+NjMkASP017+HHw==} hasBin: true + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -841,10 +1189,26 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + detect-libc@2.0.3: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -853,11 +1217,21 @@ packages: resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + esbuild@0.25.9: resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} engines: {node: '>=18'} hasBin: true + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -865,10 +1239,22 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + focus-trap@7.6.5: + resolution: {integrity: sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==} + framer-motion@12.9.1: resolution: {integrity: sha512-dZBp2TO0a39Cc24opshlLoM0/OdTZVKzcXWuhntfwy2Qgz3t9+N4sTyUqNANyHaRFiJUWbwwsXeDvQkEBPky+g==} peerDependencies: @@ -895,6 +1281,10 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + globby@14.1.0: resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} engines: {node: '>=18'} @@ -902,6 +1292,18 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + ignore@7.0.3: resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==} engines: {node: '>= 4'} @@ -925,10 +1327,17 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + lightningcss-darwin-arm64@1.29.2: resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==} engines: {node: '>= 12.0.0'} @@ -993,6 +1402,13 @@ packages: resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==} engines: {node: '>= 12.0.0'} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + lodash.castarray@4.4.0: resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} @@ -1005,9 +1421,19 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + marked@15.0.12: resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} engines: {node: '>= 18'} @@ -1018,20 +1444,53 @@ packages: engines: {node: '>= 20'} hasBin: true + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + minisearch@7.1.2: + resolution: {integrity: sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + motion-dom@12.9.1: resolution: {integrity: sha512-xqXEwRLDYDTzOgXobSoWtytRtGlf7zdkRfFbrrdP7eojaGQZ5Go4OOKtgnx7uF8sAkfr1ZjMvbCJSCIT2h6fkQ==} motion-utils@12.8.3: resolution: {integrity: sha512-GYVauZEbca8/zOhEiYOY9/uJeedYQld6co/GJFKOy//0c/4lDqk0zB549sBYqqV2iMuX+uHrY1E5zd8A2L+1Lw==} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1083,10 +1542,25 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + oniguruma-to-es@4.3.3: + resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + + package-manager-detector@1.3.0: + resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} + path-type@6.0.0: resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} engines: {node: '>=18'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1094,6 +1568,16 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + postcss-selector-parser@6.0.10: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} engines: {node: '>=4'} @@ -1106,11 +1590,25 @@ packages: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + prettier@3.6.2: resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -1127,6 +1625,15 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -1134,6 +1641,14 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rollup@4.46.4: + resolution: {integrity: sha512-YbxoxvoqNg9zAmw4+vzh1FkGAiZRK+LhnSrbSrSXMdZYsRPDWoshcSd/pldKRO6lWzv/e9TiJAVQyirYIeSIPQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -1149,6 +1664,9 @@ packages: resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shiki@3.11.0: + resolution: {integrity: sha512-VgKumh/ib38I1i3QkMn6mAQA6XjjQubqaAYhfge71glAll0/4xnt8L2oSuC45Qcr/G5Kbskj4RliMQddGmy/Og==} + simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} @@ -1160,10 +1678,20 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -1177,6 +1705,13 @@ packages: babel-plugin-macros: optional: true + superjson@2.2.2: + resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} + engines: {node: '>=16'} + + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tailwindcss@4.1.4: resolution: {integrity: sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==} @@ -1184,10 +1719,20 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + ts-node@10.9.2: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true @@ -1215,49 +1760,171 @@ packages: engines: {node: '>=14.17'} hasBin: true + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.10.0: + resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} - engines: {node: '>= 14.6'} - hasBin: true + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} -snapshots: + vite@7.1.3: + resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true - '@alloc/quick-lru@5.2.0': {} + vitepress-plugin-group-icons@1.6.3: + resolution: {integrity: sha512-bvPD4lhraLJw3rPtLhUIVsOvNfnHnF+F1LH7BKHekEzeZ4uqdTdqnwEyaT580AoKjjT6/F8En6hVJj7takPKDA==} + peerDependencies: + markdown-it: '>=14' + vite: '>=3' - '@ckjs/cli@0.1.1(@types/node@20.17.30)': - dependencies: - '@ckjs/core': 0.1.1(@types/node@20.17.30) - '@ckjs/utils': 0.1.1(@types/node@20.17.30) + vitepress@2.0.0-alpha.11: + resolution: {integrity: sha512-l3FFkGtcB3u3iMlpnvkCR+MdOYqNaz2z+xPRlgZZnx8Xne4XLgQR0yfEfTqY/UyloTymXwxvRvu443Yo9Cr8pA==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + oxc-minify: ^0.81.0 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + oxc-minify: + optional: true + postcss: + optional: true + + vue@3.5.18: + resolution: {integrity: sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} + hasBin: true + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.3.0 + tinyexec: 1.0.1 + + '@antfu/utils@9.2.0': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/parser@7.28.3': + dependencies: + '@babel/types': 7.28.2 + + '@babel/types@7.28.2': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@ckjs/cli@0.1.1(@types/node@20.17.30)': + dependencies: + '@ckjs/core': 0.1.1(@types/node@20.17.30) + '@ckjs/utils': 0.1.1(@types/node@20.17.30) commander: 13.1.0 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - '@types/node' - '@ckjs/cli@0.1.1(@types/node@22.15.32)': + '@ckjs/cli@0.1.1(@types/node@24.3.0)': dependencies: - '@ckjs/core': 0.1.1(@types/node@22.15.32) - '@ckjs/utils': 0.1.1(@types/node@22.15.32) + '@ckjs/core': 0.1.1(@types/node@24.3.0) + '@ckjs/utils': 0.1.1(@types/node@24.3.0) commander: 13.1.0 transitivePeerDependencies: - '@swc/core' @@ -1276,11 +1943,11 @@ snapshots: - '@swc/wasm' - '@types/node' - '@ckjs/core@0.1.1(@types/node@22.15.32)': + '@ckjs/core@0.1.1(@types/node@24.3.0)': dependencies: - '@ckjs/matter': 0.1.1(@types/node@22.15.32) + '@ckjs/matter': 0.1.1(@types/node@24.3.0) '@ckjs/types': 0.1.1 - '@ckjs/utils': 0.1.1(@types/node@22.15.32) + '@ckjs/utils': 0.1.1(@types/node@24.3.0) globby: 14.1.0 marked: 15.0.12 transitivePeerDependencies: @@ -1298,9 +1965,9 @@ snapshots: - '@swc/wasm' - '@types/node' - '@ckjs/matter@0.1.1(@types/node@22.15.32)': + '@ckjs/matter@0.1.1(@types/node@24.3.0)': dependencies: - '@ckjs/utils': 0.1.1(@types/node@22.15.32) + '@ckjs/utils': 0.1.1(@types/node@24.3.0) '@iarna/toml': 2.2.5 yaml: 2.8.1 transitivePeerDependencies: @@ -1328,10 +1995,10 @@ snapshots: - react-dom - sass - '@ckjs/next@0.1.1(@types/node@22.15.32)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@ckjs/next@0.1.1(@types/node@24.3.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@ckjs/core': 0.1.1(@types/node@22.15.32) - '@ckjs/utils': 0.1.1(@types/node@22.15.32) + '@ckjs/core': 0.1.1(@types/node@24.3.0) + '@ckjs/utils': 0.1.1(@types/node@24.3.0) chokidar: 3.6.0 lodash: 4.17.21 next: 15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -1359,9 +2026,9 @@ snapshots: - '@swc/wasm' - '@types/node' - '@ckjs/utils@0.1.1(@types/node@22.15.32)': + '@ckjs/utils@0.1.1(@types/node@24.3.0)': dependencies: - ts-node: 10.9.2(@types/node@22.15.32)(typescript@5.8.3) + ts-node: 10.9.2(@types/node@24.3.0)(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - '@swc/core' @@ -1372,6 +2039,10 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 + '@docsearch/css@4.0.0-beta.7': {} + + '@docsearch/js@4.0.0-beta.7': {} + '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 @@ -1457,6 +2128,33 @@ snapshots: '@iarna/toml@2.2.5': {} + '@iconify-json/logos@1.2.9': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/simple-icons@1.2.48': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify-json/vscode-icons@1.2.29': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.0.1': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@antfu/utils': 9.2.0 + '@iconify/types': 2.0.0 + debug: 4.4.1 + globals: 15.15.0 + kolorist: 1.8.0 + local-pkg: 1.1.2 + mlly: 1.7.4 + transitivePeerDependencies: + - supports-color + '@img/sharp-darwin-arm64@0.34.1': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.1.0 @@ -1608,6 +2306,106 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 + '@rolldown/pluginutils@1.0.0-beta.29': {} + + '@rollup/rollup-android-arm-eabi@4.46.4': + optional: true + + '@rollup/rollup-android-arm64@4.46.4': + optional: true + + '@rollup/rollup-darwin-arm64@4.46.4': + optional: true + + '@rollup/rollup-darwin-x64@4.46.4': + optional: true + + '@rollup/rollup-freebsd-arm64@4.46.4': + optional: true + + '@rollup/rollup-freebsd-x64@4.46.4': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.46.4': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.46.4': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.46.4': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.46.4': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.46.4': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.46.4': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.46.4': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.46.4': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.46.4': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.46.4': + optional: true + + '@rollup/rollup-linux-x64-musl@4.46.4': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.46.4': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.46.4': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.46.4': + optional: true + + '@shikijs/core@3.11.0': + dependencies: + '@shikijs/types': 3.11.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.11.0': + dependencies: + '@shikijs/types': 3.11.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.3 + + '@shikijs/engine-oniguruma@3.11.0': + dependencies: + '@shikijs/types': 3.11.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.11.0': + dependencies: + '@shikijs/types': 3.11.0 + + '@shikijs/themes@3.11.0': + dependencies: + '@shikijs/types': 3.11.0 + + '@shikijs/transformers@3.11.0': + dependencies: + '@shikijs/core': 3.11.0 + '@shikijs/types': 3.11.0 + + '@shikijs/types@3.11.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + '@sindresorhus/merge-streams@2.3.0': {} '@swc/counter@0.1.3': {} @@ -1698,12 +2496,31 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@types/estree@1.0.8': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/linkify-it@5.0.0': {} + '@types/lodash@4.17.20': {} + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + '@types/marked@6.0.0': dependencies: marked: 16.2.0 + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdurl@2.0.0': {} + '@types/node@20.17.30': dependencies: undici-types: 6.19.8 @@ -1716,6 +2533,10 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@24.3.0': + dependencies: + undici-types: 7.10.0 + '@types/react-dom@19.1.2(@types/react@19.1.2)': dependencies: '@types/react': 19.1.2 @@ -1724,6 +2545,111 @@ snapshots: dependencies: csstype: 3.1.3 + '@types/unist@3.0.3': {} + + '@types/web-bluetooth@0.0.21': {} + + '@ungap/structured-clone@1.3.0': {} + + '@vitejs/plugin-vue@6.0.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.20.4)(yaml@2.8.1))(vue@3.5.18(typescript@5.8.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-beta.29 + vite: 7.1.3(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.20.4)(yaml@2.8.1) + vue: 3.5.18(typescript@5.8.3) + + '@vue/compiler-core@3.5.18': + dependencies: + '@babel/parser': 7.28.3 + '@vue/shared': 3.5.18 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.18': + dependencies: + '@vue/compiler-core': 3.5.18 + '@vue/shared': 3.5.18 + + '@vue/compiler-sfc@3.5.18': + dependencies: + '@babel/parser': 7.28.3 + '@vue/compiler-core': 3.5.18 + '@vue/compiler-dom': 3.5.18 + '@vue/compiler-ssr': 3.5.18 + '@vue/shared': 3.5.18 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.18': + dependencies: + '@vue/compiler-dom': 3.5.18 + '@vue/shared': 3.5.18 + + '@vue/devtools-api@8.0.0': + dependencies: + '@vue/devtools-kit': 8.0.0 + + '@vue/devtools-kit@8.0.0': + dependencies: + '@vue/devtools-shared': 8.0.0 + birpc: 2.5.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.2 + + '@vue/devtools-shared@8.0.0': + dependencies: + rfdc: 1.4.1 + + '@vue/reactivity@3.5.18': + dependencies: + '@vue/shared': 3.5.18 + + '@vue/runtime-core@3.5.18': + dependencies: + '@vue/reactivity': 3.5.18 + '@vue/shared': 3.5.18 + + '@vue/runtime-dom@3.5.18': + dependencies: + '@vue/reactivity': 3.5.18 + '@vue/runtime-core': 3.5.18 + '@vue/shared': 3.5.18 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.18(vue@3.5.18(typescript@5.8.3))': + dependencies: + '@vue/compiler-ssr': 3.5.18 + '@vue/shared': 3.5.18 + vue: 3.5.18(typescript@5.8.3) + + '@vue/shared@3.5.18': {} + + '@vueuse/core@13.7.0(vue@3.5.18(typescript@5.8.3))': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 13.7.0 + '@vueuse/shared': 13.7.0(vue@3.5.18(typescript@5.8.3)) + vue: 3.5.18(typescript@5.8.3) + + '@vueuse/integrations@13.7.0(focus-trap@7.6.5)(vue@3.5.18(typescript@5.8.3))': + dependencies: + '@vueuse/core': 13.7.0(vue@3.5.18(typescript@5.8.3)) + '@vueuse/shared': 13.7.0(vue@3.5.18(typescript@5.8.3)) + vue: 3.5.18(typescript@5.8.3) + optionalDependencies: + focus-trap: 7.6.5 + + '@vueuse/metadata@13.7.0': {} + + '@vueuse/shared@13.7.0(vue@3.5.18(typescript@5.8.3))': + dependencies: + vue: 3.5.18(typescript@5.8.3) + acorn-walk@8.3.4: dependencies: acorn: 8.14.1 @@ -1737,8 +2663,12 @@ snapshots: arg@4.1.3: {} + argparse@2.0.1: {} + binary-extensions@2.3.0: {} + birpc@2.5.0: {} + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -1749,6 +2679,12 @@ snapshots: caniuse-lite@1.0.30001714: {} + ccount@2.0.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -1783,10 +2719,16 @@ snapshots: color-string: 1.9.1 optional: true + comma-separated-tokens@2.0.3: {} + commander@13.1.0: {} commander@14.0.0: {} + confbox@0.1.8: {} + + confbox@0.2.2: {} + contentkit@0.1.1(@types/node@20.17.30)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@ckjs/cli': 0.1.1(@types/node@20.17.30) @@ -1805,10 +2747,10 @@ snapshots: - react-dom - sass - contentkit@0.1.1(@types/node@22.15.32)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + contentkit@0.1.1(@types/node@24.3.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@ckjs/cli': 0.1.1(@types/node@22.15.32) - '@ckjs/next': 0.1.1(@types/node@22.15.32)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@ckjs/cli': 0.1.1(@types/node@24.3.0) + '@ckjs/next': 0.1.1(@types/node@24.3.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@ckjs/types': 0.1.1 transitivePeerDependencies: - '@babel/core' @@ -1823,14 +2765,28 @@ snapshots: - react-dom - sass + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + create-require@1.1.1: {} cssesc@3.0.0: {} csstype@3.1.3: {} + debug@4.4.1: + dependencies: + ms: 2.1.3 + + dequal@2.0.3: {} + detect-libc@2.0.3: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + diff@4.0.2: {} enhanced-resolve@5.18.1: @@ -1838,6 +2794,8 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 + entities@4.5.0: {} + esbuild@0.25.9: optionalDependencies: '@esbuild/aix-ppc64': 0.25.9 @@ -1867,6 +2825,10 @@ snapshots: '@esbuild/win32-ia32': 0.25.9 '@esbuild/win32-x64': 0.25.9 + estree-walker@2.0.2: {} + + exsolve@1.0.7: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -1879,10 +2841,18 @@ snapshots: dependencies: reusify: 1.1.0 + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + focus-trap@7.6.5: + dependencies: + tabbable: 6.2.0 + framer-motion@12.9.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: motion-dom: 12.9.1 @@ -1903,6 +2873,8 @@ snapshots: dependencies: is-glob: 4.0.3 + globals@15.15.0: {} + globby@14.1.0: dependencies: '@sindresorhus/merge-streams': 2.3.0 @@ -1914,6 +2886,28 @@ snapshots: graceful-fs@4.2.11: {} + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hookable@5.5.3: {} + + html-void-elements@3.0.0: {} + ignore@7.0.3: {} is-arrayish@0.3.2: @@ -1931,8 +2925,12 @@ snapshots: is-number@7.0.0: {} + is-what@4.1.16: {} + jiti@2.4.2: {} + kolorist@1.8.0: {} + lightningcss-darwin-arm64@1.29.2: optional: true @@ -1978,6 +2976,16 @@ snapshots: lightningcss-win32-arm64-msvc: 1.29.2 lightningcss-win32-x64-msvc: 1.29.2 + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + local-pkg@1.1.2: + dependencies: + mlly: 1.7.4 + pkg-types: 2.3.0 + quansync: 0.2.11 + lodash.castarray@4.4.0: {} lodash.isplainobject@4.0.6: {} @@ -1986,25 +2994,84 @@ snapshots: lodash@4.17.21: {} + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + make-error@1.3.6: {} + mark.js@8.11.1: {} + + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + marked@15.0.12: {} marked@16.2.0: {} + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdurl@2.0.0: {} + merge2@1.4.1: {} + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-encode@2.0.1: {} + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 + minisearch@7.1.2: {} + + mitt@3.0.1: {} + + mlly@1.7.4: + dependencies: + acorn: 8.14.1 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + motion-dom@12.9.1: dependencies: motion-utils: 12.8.3 motion-utils@12.8.3: {} + ms@2.1.3: {} + nanoid@3.3.11: {} next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): @@ -2059,12 +3126,40 @@ snapshots: normalize-path@3.0.0: {} + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.3: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.0.1 + regex-recursion: 6.0.2 + + package-manager-detector@1.3.0: {} + path-type@6.0.0: {} + pathe@2.0.3: {} + + perfect-debounce@1.0.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} + picomatch@4.0.3: {} + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + postcss-selector-parser@6.0.10: dependencies: cssesc: 3.0.0 @@ -2082,8 +3177,20 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prettier@3.6.2: {} + property-information@7.1.0: {} + + punycode.js@2.3.1: {} + + quansync@0.2.11: {} + queue-microtask@1.2.3: {} react-dom@19.1.0(react@19.1.0): @@ -2097,10 +3204,48 @@ snapshots: dependencies: picomatch: 2.3.1 + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.0.1: + dependencies: + regex-utilities: 2.3.0 + resolve-pkg-maps@1.0.0: {} reusify@1.1.0: {} + rfdc@1.4.1: {} + + rollup@4.46.4: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.46.4 + '@rollup/rollup-android-arm64': 4.46.4 + '@rollup/rollup-darwin-arm64': 4.46.4 + '@rollup/rollup-darwin-x64': 4.46.4 + '@rollup/rollup-freebsd-arm64': 4.46.4 + '@rollup/rollup-freebsd-x64': 4.46.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.4 + '@rollup/rollup-linux-arm-musleabihf': 4.46.4 + '@rollup/rollup-linux-arm64-gnu': 4.46.4 + '@rollup/rollup-linux-arm64-musl': 4.46.4 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.4 + '@rollup/rollup-linux-ppc64-gnu': 4.46.4 + '@rollup/rollup-linux-riscv64-gnu': 4.46.4 + '@rollup/rollup-linux-riscv64-musl': 4.46.4 + '@rollup/rollup-linux-s390x-gnu': 4.46.4 + '@rollup/rollup-linux-x64-gnu': 4.46.4 + '@rollup/rollup-linux-x64-musl': 4.46.4 + '@rollup/rollup-win32-arm64-msvc': 4.46.4 + '@rollup/rollup-win32-ia32-msvc': 4.46.4 + '@rollup/rollup-win32-x64-msvc': 4.46.4 + fsevents: 2.3.3 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -2138,6 +3283,17 @@ snapshots: '@img/sharp-win32-x64': 0.34.1 optional: true + shiki@3.11.0: + dependencies: + '@shikijs/core': 3.11.0 + '@shikijs/engine-javascript': 3.11.0 + '@shikijs/engine-oniguruma': 3.11.0 + '@shikijs/langs': 3.11.0 + '@shikijs/themes': 3.11.0 + '@shikijs/types': 3.11.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 @@ -2147,21 +3303,45 @@ snapshots: source-map-js@1.2.1: {} + space-separated-tokens@2.0.2: {} + + speakingurl@14.0.1: {} + streamsearch@1.1.0: {} + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + styled-jsx@5.1.6(react@19.1.0): dependencies: client-only: 0.0.1 react: 19.1.0 + superjson@2.2.2: + dependencies: + copy-anything: 3.0.5 + + tabbable@6.2.0: {} + tailwindcss@4.1.4: {} tapable@2.2.1: {} + tinyexec@1.0.1: {} + + tinyglobby@0.2.14: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + trim-lines@3.0.1: {} + ts-node@10.9.2(@types/node@20.17.30)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -2198,14 +3378,14 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - ts-node@10.9.2(@types/node@22.15.32)(typescript@5.8.3): + ts-node@10.9.2(@types/node@24.3.0)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.15.32 + '@types/node': 24.3.0 acorn: 8.14.1 acorn-walk: 8.3.4 arg: 4.1.3 @@ -2227,16 +3407,140 @@ snapshots: typescript@5.8.3: {} + uc.micro@2.1.0: {} + + ufo@1.6.1: {} + undici-types@6.19.8: {} undici-types@6.21.0: {} + undici-types@7.10.0: {} + unicorn-magic@0.3.0: {} + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + util-deprecate@1.0.2: {} v8-compile-cache-lib@3.0.1: {} + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + vite@7.1.3(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.20.4)(yaml@2.8.1): + dependencies: + esbuild: 0.25.9 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.46.4 + tinyglobby: 0.2.14 + optionalDependencies: + '@types/node': 24.3.0 + fsevents: 2.3.3 + jiti: 2.4.2 + lightningcss: 1.29.2 + tsx: 4.20.4 + yaml: 2.8.1 + + vitepress-plugin-group-icons@1.6.3(markdown-it@14.1.0)(vite@7.1.3(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.20.4)(yaml@2.8.1)): + dependencies: + '@iconify-json/logos': 1.2.9 + '@iconify-json/vscode-icons': 1.2.29 + '@iconify/utils': 3.0.1 + markdown-it: 14.1.0 + vite: 7.1.3(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.20.4)(yaml@2.8.1) + transitivePeerDependencies: + - supports-color + + vitepress@2.0.0-alpha.11(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.29.2)(postcss@8.5.6)(tsx@4.20.4)(typescript@5.8.3)(yaml@2.8.1): + dependencies: + '@docsearch/css': 4.0.0-beta.7 + '@docsearch/js': 4.0.0-beta.7 + '@iconify-json/simple-icons': 1.2.48 + '@shikijs/core': 3.11.0 + '@shikijs/transformers': 3.11.0 + '@shikijs/types': 3.11.0 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 6.0.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.20.4)(yaml@2.8.1))(vue@3.5.18(typescript@5.8.3)) + '@vue/devtools-api': 8.0.0 + '@vue/shared': 3.5.18 + '@vueuse/core': 13.7.0(vue@3.5.18(typescript@5.8.3)) + '@vueuse/integrations': 13.7.0(focus-trap@7.6.5)(vue@3.5.18(typescript@5.8.3)) + focus-trap: 7.6.5 + mark.js: 8.11.1 + minisearch: 7.1.2 + shiki: 3.11.0 + vite: 7.1.3(@types/node@24.3.0)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.20.4)(yaml@2.8.1) + vue: 3.5.18(typescript@5.8.3) + optionalDependencies: + postcss: 8.5.6 + transitivePeerDependencies: + - '@types/node' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jiti + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - sass + - sass-embedded + - sortablejs + - stylus + - sugarss + - terser + - tsx + - typescript + - universal-cookie + - yaml + + vue@3.5.18(typescript@5.8.3): + dependencies: + '@vue/compiler-dom': 3.5.18 + '@vue/compiler-sfc': 3.5.18 + '@vue/runtime-dom': 3.5.18 + '@vue/server-renderer': 3.5.18(vue@3.5.18(typescript@5.8.3)) + '@vue/shared': 3.5.18 + optionalDependencies: + typescript: 5.8.3 + yaml@2.8.1: {} yn@3.1.1: {} + + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d3e7ff0..cb78ed0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ -packages: - - packages/* - - examples/* \ No newline at end of file +packages: + - packages/* + - examples/* + - docs \ No newline at end of file From 58c5fc539b05e2be97945686d97c4d08f07fc9d3 Mon Sep 17 00:00:00 2001 From: Jonas Date: Wed, 20 Aug 2025 19:34:01 +0200 Subject: [PATCH 5/5] chore: update subproject commits for examples/javascript and examples/next --- examples/javascript | 2 +- examples/next | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/javascript b/examples/javascript index a015c3d..0f9269c 160000 --- a/examples/javascript +++ b/examples/javascript @@ -1 +1 @@ -Subproject commit a015c3dba9bd016eea96b609479519fac89d9075 +Subproject commit 0f9269cc0b5f44041ce9c23250d9525aa370b192 diff --git a/examples/next b/examples/next index aa3893a..4910185 160000 --- a/examples/next +++ b/examples/next @@ -1 +1 @@ -Subproject commit aa3893ac1e4486810bf557a45d814909103d00ed +Subproject commit 49101854f523d405c8dd8d63438422f1bb2da9fd